Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
+++ src/Parser/DeclarationNode.cc	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug  7 08:01:55 2016
-// Update Count     : 165
+// Last Modified On : Tue Aug  9 08:39:20 2016
+// Update Count     : 169
 //
 
@@ -284,5 +284,5 @@
 	newnode->type->array->dimension = size;
 	newnode->type->array->isStatic = isStatic;
-	if ( newnode->type->array->dimension == 0 || dynamic_cast<ConstantNode *>( newnode->type->array->dimension ) ) {
+	if ( newnode->type->array->dimension == 0 || dynamic_cast<ConstantExpr *>( newnode->type->array->dimension->build() ) ) {
 		newnode->type->array->isVarLen = false;
 	} else {
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
+++ src/Parser/ExpressionNode.cc	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug  7 09:23:12 2016
-// Update Count     : 437
+// Last Modified On : Tue Aug  9 12:28:40 2016
+// Update Count     : 482
 //
 
@@ -32,56 +32,5 @@
 using namespace std;
 
-ExpressionNode::ExpressionNode() : ParseNode() {}
-
-ExpressionNode::ExpressionNode( const string *name ) : ParseNode( name ) {}
-
-ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {
-	if ( other.argName ) {
-		std::cout << "ExpressionNode" << std::endl;
-		argName = other.argName->clone();
-	} else {
-		argName = 0;
-	} // if
-}
-
-ExpressionNode * ExpressionNode::set_argName( const std::string *aName ) {
-	argName = new VarRefNode( aName );
-	return this;
-}
-
-ExpressionNode * ExpressionNode::set_argName( ExpressionNode *aDesignator ) {
-	argName = aDesignator;
-	return this;
-}
-
-void ExpressionNode::printDesignation( std::ostream &os, int indent ) const {
-	if ( argName ) {
-		os << string( indent, ' ' ) << "(designated by:  ";
-		argName->printOneLine( os, indent );
-		os << ")" << std::endl;
-	} // if
-}
-
-//##############################################################################
-
-NullExprNode::NullExprNode() {}
-
-NullExprNode *NullExprNode::clone() const {
-	return new NullExprNode();
-}
-
-void NullExprNode::print( std::ostream & os, int indent ) const {
-	printDesignation( os );
-	os << "null expression";
-}
-
-void NullExprNode::printOneLine( std::ostream & os, int indent ) const {
-	printDesignation( os );
-	os << "null";
-}
-
-Expression *NullExprNode::build() const {
-	return 0;
-}
+ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {}
 
 //##############################################################################
@@ -108,5 +57,5 @@
 static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
 
-ConstantNode *build_constantInteger( std::string & str ) {
+Expression *build_constantInteger( std::string & str ) {
 	static const BasicType::Kind kind[2][3] = {
 		{ BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
@@ -171,8 +120,8 @@
 	} // if
 
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) ) );
+	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) );
 } // build_constantInteger
 
-ConstantNode *build_constantFloat( std::string & str ) {
+Expression *build_constantFloat( std::string & str ) {
 	static const BasicType::Kind kind[2][3] = {
 		{ BasicType::Float, BasicType::Double, BasicType::LongDouble },
@@ -201,12 +150,12 @@
 	} // if
 
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) ) );
+	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) );
 } // build_constantFloat
 
-ConstantNode *build_constantChar( std::string & str ) {
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) ) );
+Expression *build_constantChar( std::string & str ) {
+	return new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) );
 } // build_constantChar
 
-ConstantNode *build_constantStr( std::string & str ) {
+ConstantExpr *build_constantStr( std::string & str ) {
 	// string should probably be a primitive type
 	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
@@ -214,5 +163,5 @@
 											toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
 								   false, false );
-	return new ConstantNode( new ConstantExpr( Constant( at, str ) ) );
+	return new ConstantExpr( Constant( at, str ) );
 } // build_constantStr
 
@@ -223,99 +172,77 @@
 //}
 
-VarRefNode::VarRefNode( const string *name, bool labelp ) : ExpressionNode( name ), isLabel( labelp ) {}
-
-VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) {
-}
-
-Expression *VarRefNode::build() const {
-	return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
-}
-
-void VarRefNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << get_name() << ' ';
-}
-
-void VarRefNode::print( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Referencing: ";
-	os << "Variable: " << get_name();
-	os << endl;
-}
-
-//##############################################################################
-
-DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex ) : isArrayIndex( isArrayIndex ) {
-	set_argName( expr );
-	assert( get_argName() );
-
-	if ( ! isArrayIndex ) {
-		if ( VarRefNode * var = dynamic_cast< VarRefNode * >( expr ) ) {
-
-			stringstream ss( var->get_name() );
-			double value;
-			if ( ss >> value ) {
-				// this is a floating point constant. It MUST be ".0" or ".1", otherwise the program is invalid
-				if ( ! (var->get_name() == ".0" || var->get_name() == ".1") ) {
-					throw SemanticError( "invalid designator name: " + var->get_name() );
-				} // if
-				var->set_name( var->get_name().substr(1) );
-			} // if
-		} // if
-	} // if
-}
-
-DesignatorNode::DesignatorNode( const DesignatorNode &other ) : ExpressionNode( other ), isArrayIndex( other.isArrayIndex ) {
-}
-
-class DesignatorFixer : public Mutator {
-public:
-	virtual Expression* mutate( NameExpr *nameExpr ) {
-		if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
-			Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() );
-			delete nameExpr;
-			return new ConstantExpr( val );
-		}
-		return nameExpr;
-	}
-};
-
-Expression *DesignatorNode::build() const {
-	Expression * ret = maybeBuild<Expression>(get_argName());
-
-	if ( isArrayIndex ) {
-		// need to traverse entire structure and change any instances of 0 or 1 to ConstantExpr
-		DesignatorFixer fixer;
-		ret = ret->acceptMutator( fixer );
-	} // if
-
-	return ret;
-}
-
-void DesignatorNode::printOneLine( std::ostream &os, int indent ) const {
-	if ( get_argName() ) {
-		if ( isArrayIndex ) {
-			os << "[";
-			get_argName()->printOneLine( os, indent );
-			os << "]";
-		} else {
-			os << ".";
-			get_argName()->printOneLine( os, indent );
-		}
-	} // if
-}
-
-void DesignatorNode::print( std::ostream &os, int indent ) const {
-	if ( get_argName() ) {
-		if ( isArrayIndex ) {
-			os << "[";
-			get_argName()->print( os, indent );
-			os << "]";
-		} else {
-			os << ".";
-			get_argName()->print( os, indent );
-		}
-	} // if
-}
+// VarRefNode::VarRefNode( const string *name, bool labelp ) : ExpressionNode( nullptr, name ), isLabel( labelp ) {}
+
+// VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) {}
+
+// Expression *VarRefNode::build() const {
+// 	return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
+// }
+
+// void VarRefNode::printOneLine( std::ostream &os, int indent ) const {
+// 	printDesignation( os );
+// 	os << get_name() << ' ';
+// }
+
+// void VarRefNode::print( std::ostream &os, int indent ) const {
+// 	printDesignation( os );
+// 	os << string( indent, ' ' ) << "Referencing: ";
+// 	os << "Variable: " << get_name();
+// 	os << endl;
+// }
+
+NameExpr * build_varref( const string *name, bool labelp ) {
+	return new NameExpr( *name, nullptr );
+}
+
+//##############################################################################
+
+// DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex, bool isVarRef ) : isArrayIndex( isArrayIndex ) {
+// 	set_argName( expr );
+// }
+
+// DesignatorNode::DesignatorNode( const DesignatorNode &other ) : ExpressionNode( other ), isArrayIndex( other.isArrayIndex ) {}
+
+// class DesignatorFixer : public Mutator {
+//   public:
+// 	virtual Expression* mutate( NameExpr *nameExpr ) {
+// 		if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
+// 			Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() );
+// 			delete nameExpr;
+// 			return new ConstantExpr( val );
+// 		}
+// 		return nameExpr;
+// 	}
+// };
+
+// Expression *DesignatorNode::build() const {
+// 	return maybeBuild<Expression>(get_argName());
+// }
+
+// void DesignatorNode::printOneLine( std::ostream &os, int indent ) const {
+// 	if ( get_argName() ) {
+// 		if ( isArrayIndex ) {
+// 			os << "[";
+// 			get_argName()->printOneLine( os, indent );
+// 			os << "]";
+// 		} else {
+// 			os << ".";
+// 			get_argName()->printOneLine( os, indent );
+// 		}
+// 	} // if
+// }
+
+// void DesignatorNode::print( std::ostream &os, int indent ) const {
+// 	if ( get_argName() ) {
+// 		if ( isArrayIndex ) {
+// 			os << "[";
+// 			get_argName()->print( os, indent );
+// 			os << "]";
+// 		} else {
+// 			os << ".";
+// 			get_argName()->print( os, indent );
+// 		}
+// 	} // if
+// }
 
 //##############################################################################
@@ -333,9 +260,7 @@
 //##############################################################################
 
-Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node ) {
-	DeclarationNode *decl_node = arg->get_decl();
-
+Expression *build_cast( DeclarationNode *decl_node, ExpressionNode *expr_node ) {
 	Type *targetType = decl_node->buildType();
-	if ( dynamic_cast< VoidType* >( targetType ) ) {
+	if ( dynamic_cast< VoidType * >( targetType ) ) {
 		delete targetType;
 		return new CastExpr( maybeBuild<Expression>(expr_node) );
@@ -345,18 +270,14 @@
 }
 
-Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
-	NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
-	assert( memberExpr );
-	UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), maybeBuild<Expression>(expr_node) );
+Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) {
+	UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeBuild<Expression>(expr_node) );
 	delete member;
 	return ret;
 }
 
-Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
-	NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
-	assert( memberExpr );
+Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
 	UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
 	deref->get_args().push_back( maybeBuild<Expression>(expr_node) );
-	UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), deref );
+	UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
 	delete member;
 	return ret;
@@ -366,22 +287,18 @@
 		return new AddressExpr( maybeBuild<Expression>(expr_node) );
 }
-Expression *build_sizeOf( ExpressionNode *expr_node ) {
-	if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
-		return new SizeofExpr( arg->get_decl()->buildType() );
-	} else {
-		return new SizeofExpr( maybeBuild<Expression>(expr_node) );
-	} // if
-}
-Expression *build_alignOf( ExpressionNode *expr_node ) {
-	if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
-		return new AlignofExpr( arg->get_decl()->buildType() );
-	} else {
-		return new AlignofExpr( maybeBuild<Expression>(expr_node) );
-	} // if
-}
-Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member ) {
-	NameExpr *memberExpr = dynamic_cast<NameExpr *>( maybeBuild<Expression>( member ) );
-	assert( memberExpr );
-	return new UntypedOffsetofExpr( arg->get_decl()->buildType(), memberExpr->get_name() );
+Expression *build_sizeOfexpr( ExpressionNode *expr_node ) {
+	return new SizeofExpr( maybeBuild<Expression>(expr_node) );
+}
+Expression *build_sizeOftype( DeclarationNode *decl_node ) {
+	return new SizeofExpr( decl_node->buildType() );
+}
+Expression *build_alignOfexpr( ExpressionNode *expr_node ) {
+	return new AlignofExpr( maybeBuild<Expression>(expr_node) );
+}
+Expression *build_alignOftype( DeclarationNode *decl_node ) {
+	return new AlignofExpr( decl_node->buildType() );
+}
+Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member ) {
+	return new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() );
 }
 
@@ -421,22 +338,21 @@
 }
 
-Expression *build_attr( VarRefNode *var, ExpressionNode * expr ) {
-	if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr ) ) {
-		return new AttrExpr( maybeBuild<Expression>(var), arg->get_decl()->buildType() );
-	} else {
-		return new AttrExpr( maybeBuild<Expression>(var), maybeBuild<Expression>(expr) );
-	} // if
-}
-
-Expression *build_tuple( ExpressionNode * expr ) {
+Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ) {
+	return new AttrExpr( var, maybeBuild<Expression>(expr_node) );
+}
+Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ) {
+	return new AttrExpr( var, decl_node->buildType() );
+}
+
+Expression *build_tuple( ExpressionNode * expr_node ) {
 	TupleExpr *ret = new TupleExpr();
-	buildList( expr, ret->get_exprs() );
+	buildList( expr_node, ret->get_exprs() );
 	return ret;
 }
 
-Expression *build_func( ExpressionNode * function, ExpressionNode * expr ) {
+Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ) {
 	std::list<Expression *> args;
 
-	buildList( expr, args );
+	buildList( expr_node, args );
 	return new UntypedExpr( maybeBuild<Expression>(function), args, nullptr );
 }
@@ -450,33 +366,37 @@
 //##############################################################################
 
-Expression *AsmExprNode::build() const {
-	return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)maybeBuild<Expression>(constraint), maybeBuild<Expression>(operand) );
-}
-
-void AsmExprNode::print( std::ostream &os, int indent ) const {
-	os << string( indent, ' ' ) << "Assembler Expression:" << endl;
-	if ( inout ) {
-		os << string( indent, ' ' ) << "inout: " << std::endl;
-		inout->print( os, indent + 2 );
-	} // if
-	if ( constraint ) {
-		os << string( indent, ' ' ) << "constraint: " << std::endl;
-		constraint->print( os, indent + 2 );
-	} // if
-	if ( operand ) {
-		os << string( indent, ' ' ) << "operand: " << std::endl;
-		operand->print( os, indent + 2 );
-	} // if
-}
-
-void AsmExprNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << "( ";
-	if ( inout ) inout->printOneLine( os, indent + 2 );
-	os << ", ";
-	if ( constraint ) constraint->printOneLine( os, indent + 2 );
-	os << ", ";
-	if ( operand ) operand->printOneLine( os, indent + 2 );
-	os << ") ";
+// Expression *AsmExprNode::build() const {
+// 	return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)maybeBuild<Expression>(constraint), maybeBuild<Expression>(operand) );
+// }
+
+// void AsmExprNode::print( std::ostream &os, int indent ) const {
+// 	os << string( indent, ' ' ) << "Assembler Expression:" << endl;
+// 	if ( inout ) {
+// 		os << string( indent, ' ' ) << "inout: " << std::endl;
+// 		inout->print( os, indent + 2 );
+// 	} // if
+// 	if ( constraint ) {
+// 		os << string( indent, ' ' ) << "constraint: " << std::endl;
+// 		constraint->print( os, indent + 2 );
+// 	} // if
+// 	if ( operand ) {
+// 		os << string( indent, ' ' ) << "operand: " << std::endl;
+// 		operand->print( os, indent + 2 );
+// 	} // if
+// }
+
+// void AsmExprNode::printOneLine( std::ostream &os, int indent ) const {
+// 	printDesignation( os );
+// 	os << "( ";
+// 	if ( inout ) inout->printOneLine( os, indent + 2 );
+// 	os << ", ";
+// 	if ( constraint ) constraint->printOneLine( os, indent + 2 );
+// 	os << ", ";
+// 	if ( operand ) operand->printOneLine( os, indent + 2 );
+// 	os << ") ";
+// }
+
+Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) {
+	return new AsmExpr( maybeBuild< Expression >( inout ), constraint, maybeBuild<Expression>(operand) );
 }
 
@@ -489,25 +409,28 @@
 //##############################################################################
 
-ValofExprNode::ValofExprNode( StatementNode *s ): body( s ) {}
-
-ValofExprNode::ValofExprNode( const ValofExprNode &other ) : ExpressionNode( other ), body( maybeClone( body ) ) {
-}
-
-ValofExprNode::~ValofExprNode() {
-	delete body;
-}
-
-void ValofExprNode::print( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Valof Expression:" << std::endl;
-	get_body()->print( os, indent + 4);
-}
-
-void ValofExprNode::printOneLine( std::ostream &, int indent ) const {
-	assert( false );
-}
-
-Expression *ValofExprNode::build() const {
-	return new UntypedValofExpr ( maybeBuild<Statement>(get_body()), maybeBuild< Expression >( get_argName() ) );
+// ValofExprNode::ValofExprNode( StatementNode *s ): body( s ) {}
+
+// ValofExprNode::ValofExprNode( const ValofExprNode &other ) : ExpressionNode( other ), body( maybeClone( body ) ) {
+// }
+
+// ValofExprNode::~ValofExprNode() {
+// 	delete body;
+// }
+
+// void ValofExprNode::print( std::ostream &os, int indent ) const {
+// 	os << string( indent, ' ' ) << "Valof Expression:" << std::endl;
+// 	get_body()->print( os, indent + 4);
+// }
+
+// void ValofExprNode::printOneLine( std::ostream &, int indent ) const {
+// 	assert( false );
+// }
+
+// Expression *ValofExprNode::build() const {
+// 	return new UntypedValofExpr( maybeBuild<Statement>(get_body()), nullptr );
+// }
+
+Expression *build_valexpr( StatementNode *s ) {
+	return new UntypedValofExpr( maybeBuild<Statement>(s), nullptr );
 }
 
@@ -567,59 +490,80 @@
 //##############################################################################
 
-TypeValueNode::TypeValueNode( DeclarationNode *decl ) : decl( decl ) {
-}
-
-TypeValueNode::TypeValueNode( const TypeValueNode &other ) : ExpressionNode( other ), decl( maybeClone( other.decl ) ) {
-}
-
-Expression *TypeValueNode::build() const {
+// TypeValueNode::TypeValueNode( DeclarationNode *decl ) : decl( decl ) {
+// }
+
+// TypeValueNode::TypeValueNode( const TypeValueNode &other ) : ExpressionNode( other ), decl( maybeClone( other.decl ) ) {
+// }
+
+// Expression *TypeValueNode::build() const {
+// 	return new TypeExpr( decl->buildType() );
+// }
+
+// void TypeValueNode::print( std::ostream &os, int indent ) const {
+// 	os << std::string( indent, ' ' ) << "Type:";
+// 	get_decl()->print( os, indent + 2);
+// }
+
+// void TypeValueNode::printOneLine( std::ostream &os, int indent ) const {
+// 	os << "Type:";
+// 	get_decl()->print( os, indent + 2);
+// }
+
+Expression *build_typevalue( DeclarationNode *decl ) {
 	return new TypeExpr( decl->buildType() );
 }
 
-void TypeValueNode::print( std::ostream &os, int indent ) const {
-	os << std::string( indent, ' ' ) << "Type:";
-	get_decl()->print( os, indent + 2);
-}
-
-void TypeValueNode::printOneLine( std::ostream &os, int indent ) const {
-	os << "Type:";
-	get_decl()->print( os, indent + 2);
-}
-
-
-CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
-CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
-
-CompoundLiteralNode::~CompoundLiteralNode() {
-	delete kids;
-	delete type;
-}
-
-CompoundLiteralNode *CompoundLiteralNode::clone() const {
-	return new CompoundLiteralNode( *this );
-}
-
-void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
-	os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
-
-	os << string( indent + 2, ' ' ) << "type:" << endl;
-	if ( type != 0 )
-		type->print( os, indent + 4 );
-
-	os << string( indent + 2, ' ' ) << "initialization:" << endl;
-	if ( kids != 0 )
-		kids->printList( os, indent + 4 );
-}
-
-void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
-	os << "( ";
-	if ( type ) type->print( os );
-	os << ", ";
-	if ( kids ) kids->printOneLine( os );
-	os << ") ";
-}
-
-Expression *CompoundLiteralNode::build() const {
-	Declaration * newDecl = maybeBuild<Declaration>(type); // compound literal type
+//##############################################################################
+
+// CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
+// CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
+
+// CompoundLiteralNode::~CompoundLiteralNode() {
+// 	delete kids;
+// 	delete type;
+// }
+
+// CompoundLiteralNode *CompoundLiteralNode::clone() const {
+// 	return new CompoundLiteralNode( *this );
+// }
+
+// void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
+// 	os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
+
+// 	os << string( indent + 2, ' ' ) << "type:" << endl;
+// 	if ( type != 0 )
+// 		type->print( os, indent + 4 );
+
+// 	os << string( indent + 2, ' ' ) << "initialization:" << endl;
+// 	if ( kids != 0 )
+// 		kids->printList( os, indent + 4 );
+// }
+
+// void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
+// 	os << "( ";
+// 	if ( type ) type->print( os );
+// 	os << ", ";
+// 	if ( kids ) kids->printOneLine( os );
+// 	os << ") ";
+// }
+
+// Expression *CompoundLiteralNode::build() const {
+// 	Declaration * newDecl = maybeBuild<Declaration>(type); // compound literal type
+// 	if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
+// 		return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
+// 	// these types do not have associated type information
+// 	} else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
+// 		return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild<Initializer>(kids) );
+// 	} else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
+// 		return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild<Initializer>(kids) );
+// 	} else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
+// 		return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild<Initializer>(kids) );
+// 	} else {
+// 		assert( false );
+// 	} // if
+// }
+
+Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids ) {
+	Declaration * newDecl = maybeBuild<Declaration>(decl_node); // compound literal type
 	if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
 		return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
Index: src/Parser/ParseNode.cc
===================================================================
--- src/Parser/ParseNode.cc	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
+++ src/Parser/ParseNode.cc	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:26:29 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Aug  6 08:26:11 2016
-// Update Count     : 93
+// Last Modified On : Sun Aug  7 23:32:47 2016
+// Update Count     : 94
 // 
 
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
+++ src/Parser/ParseNode.h	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug  7 09:37:16 2016
-// Update Count     : 333
+// Last Modified On : Tue Aug  9 12:28:12 2016
+// Update Count     : 389
 //
 
@@ -33,4 +33,5 @@
 class CompoundStmtNode;
 class DeclarationNode;
+class ExpressionNode;
 class InitializerNode;
 
@@ -67,28 +68,53 @@
 //##############################################################################
 
+class InitializerNode : public ParseNode {
+  public:
+	InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
+	InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
+	~InitializerNode();
+
+	ExpressionNode *get_expression() const { return expr; }
+
+	InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
+	ExpressionNode *get_designators() const { return designator; }
+
+	InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
+	bool get_maybeConstructed() const { return maybeConstructed; }
+
+	InitializerNode *next_init() const { return kids; }
+
+	void print( std::ostream &os, int indent = 0 ) const;
+	void printOneLine( std::ostream & ) const;
+
+	virtual Initializer *build() const;
+  private:
+	ExpressionNode *expr;
+	bool aggregate;
+	ExpressionNode *designator; // may be list
+	InitializerNode *kids;
+	bool maybeConstructed;
+};
+
+//##############################################################################
+
 class ExpressionNode : public ParseNode {
   public:
-	ExpressionNode();
-	ExpressionNode( const std::string * );
+	ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
+	ExpressionNode( Expression * expr, const std::string *name ) : ParseNode( name ), expr( expr ) {}
 	ExpressionNode( const ExpressionNode &other );
-	virtual ~ExpressionNode() { delete argName; }
-
-	virtual ExpressionNode *clone() const = 0;
-
-	ExpressionNode *get_argName() const { return argName; }
-	ExpressionNode *set_argName( const std::string *aName );
-	ExpressionNode *set_argName( ExpressionNode *aDesignator );
+	virtual ~ExpressionNode() {}
+
+	virtual ExpressionNode *clone() const { return 0; }
+
 	bool get_extension() const { return extension; }
 	ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
 
-	virtual void print( std::ostream &os, int indent = 0) const = 0;
-	virtual void printOneLine( std::ostream &os, int indent = 0) const = 0;
-
-	virtual Expression *build() const = 0;
-  protected:
-	void printDesignation ( std::ostream &os, int indent = 0) const;
-  private:
-	ExpressionNode *argName = 0;
+	virtual void print( std::ostream &os, int indent = 0 ) const {}
+	virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
+
+	virtual Expression *build() const { return expr; }
+  private:
 	bool extension = false;
+	Expression *expr;
 };
 
@@ -109,110 +135,114 @@
 
 // NullExprNode is used in tuples as a place-holder where a tuple component is omitted e.g., [ 2, , 3 ]
-class NullExprNode : public ExpressionNode {
-  public:
-	NullExprNode();
-
-	virtual NullExprNode *clone() const;
-
-	virtual void print( std::ostream &os, int indent = 0) const;
-	virtual void printOneLine( std::ostream &os, int indent = 0) const;
-
-	virtual Expression *build() const;
-};
-
-//##############################################################################
-
-class ConstantNode : public ExpressionNode {
-  public:
-	ConstantNode( ConstantExpr *expr ) : expr( expr ) {}
-	ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {}
-	virtual ~ConstantNode() {}
-
-	virtual ConstantNode *clone() const { assert( false ); return new ConstantNode( *this ); }
-
-	ConstantExpr *get_expr() const { return expr; }
-
-	virtual void print( std::ostream &os, int indent = 0 ) const {}
-	virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
-
-	Expression *build() const { return expr; }
-  private:
-	ConstantExpr *expr;
-};
-
-ConstantNode *build_constantInteger( std::string &str );
-ConstantNode *build_constantFloat( std::string &str );
-ConstantNode *build_constantChar( std::string &str );
-ConstantNode *build_constantStr( std::string &str );
-
-//##############################################################################
-
-class VarRefNode : public ExpressionNode {
-  public:
-	VarRefNode( const std::string *, bool isLabel = false );
-	VarRefNode( const VarRefNode &other );
-
-	virtual Expression *build() const ;
-
-	virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
-
-	virtual void print( std::ostream &os, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
-  private:
-	bool isLabel;
-};
-
-//##############################################################################
-
-class DesignatorNode : public ExpressionNode {
-  public:
-	DesignatorNode( ExpressionNode *expr, bool isArrayIndex = false );
-	DesignatorNode( const DesignatorNode &other );
-
-	virtual Expression *build() const ;
-	virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
-
-	virtual void print( std::ostream &os, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
-  private:
-	bool isArrayIndex;
-};
-
-//##############################################################################
-
-class TypeValueNode : public ExpressionNode {
-  public:
-	TypeValueNode( DeclarationNode * );
-	TypeValueNode( const TypeValueNode &other );
-
-	DeclarationNode *get_decl() const { return decl; }
-
-	virtual Expression *build() const ;
-
-	virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
-
-	virtual void print( std::ostream &os, int indent = 0) const;
-	virtual void printOneLine( std::ostream &os, int indent = 0) const;
-  private:
-	DeclarationNode *decl;
-};
-
-//##############################################################################
-
-class CompositeExprNode : public ExpressionNode {
-  public:
-	CompositeExprNode( Expression *expr ) : expr( expr ) {}
-	CompositeExprNode( const CompositeExprNode &other ) : expr( other.expr->clone() ) {}
-	virtual ~CompositeExprNode() {}
-
-	CompositeExprNode *clone() const { assert( false ); return new CompositeExprNode( *this ); }
-
-	Expression *build() const { return expr; }
-
-	void print( std::ostream &os, int indent = 0 ) const {}
-	void printOneLine( std::ostream &os, int indent = 0 ) const {}
-  private:
-	Expression *expr;
-};
+// class NullExprNode : public ExpressionNode {
+//   public:
+// 	NullExprNode() {}
+
+// 	virtual NullExprNode *clone() const { assert( false ); }
+
+// 	virtual void print( std::ostream &os, int indent = 0) const {}
+// 	virtual void printOneLine( std::ostream &os, int indent = 0) const {}
+
+// 	virtual Expression *build() const { assert( false ); return 0; }
+// };
+
+//##############################################################################
+
+// class ConstantNode : public ExpressionNode {
+//   public:
+// 	ConstantNode( ConstantExpr *expr ) : expr( expr ) {}
+// 	ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {}
+// 	virtual ~ConstantNode() {}
+
+// 	virtual ConstantNode *clone() const { assert( false ); return new ConstantNode( *this ); }
+
+// 	ConstantExpr *get_expr() const { return expr; }
+
+// 	virtual void print( std::ostream &os, int indent = 0 ) const {}
+// 	virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
+
+// 	Expression *build() const { return expr; }
+//   private:
+// 	ConstantExpr *expr;
+// };
+
+Expression *build_constantInteger( std::string &str );
+Expression *build_constantFloat( std::string &str );
+Expression *build_constantChar( std::string &str );
+ConstantExpr *build_constantStr( std::string &str );
+
+//##############################################################################
+
+// class VarRefNode : public ExpressionNode {
+//   public:
+// 	VarRefNode( const std::string *, bool isLabel = false );
+// 	VarRefNode( const VarRefNode &other );
+
+// 	virtual Expression *build() const ;
+
+// 	virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
+
+// 	virtual void print( std::ostream &os, int indent = 0 ) const;
+// 	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
+//   private:
+// 	bool isLabel;
+// };
+
+NameExpr *build_varref( const std::string *name, bool labelp = false );
+
+//##############################################################################
+
+// class DesignatorNode : public ExpressionNode {
+//   public:
+// 	DesignatorNode( ExpressionNode *expr, bool isArrayIndex = false );
+// 	DesignatorNode( const DesignatorNode &other );
+
+// 	virtual Expression *build() const ;
+// 	virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
+
+// 	virtual void print( std::ostream &os, int indent = 0 ) const;
+// 	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
+//   private:
+// 	bool isArrayIndex;
+// };
+
+//##############################################################################
+
+// class TypeValueNode : public ExpressionNode {
+//   public:
+// 	TypeValueNode( DeclarationNode * );
+// 	TypeValueNode( const TypeValueNode &other );
+
+// 	DeclarationNode *get_decl() const { return decl; }
+
+// 	virtual Expression *build() const ;
+
+// 	virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
+
+// 	virtual void print( std::ostream &os, int indent = 0) const;
+// 	virtual void printOneLine( std::ostream &os, int indent = 0) const;
+//   private:
+// 	DeclarationNode *decl;
+// };
+
+Expression *build_typevalue( DeclarationNode *decl );
+
+//##############################################################################
+
+// class CompositeExprNode : public ExpressionNode {
+//   public:
+// 	CompositeExprNode( Expression *expr ) : expr( expr ) {}
+// 	CompositeExprNode( const CompositeExprNode &other ) : expr( other.expr->clone() ) {}
+// 	virtual ~CompositeExprNode() {}
+
+// 	CompositeExprNode *clone() const { assert( false ); return new CompositeExprNode( *this ); }
+
+// 	Expression *build() const { return expr; }
+
+// 	void print( std::ostream &os, int indent = 0 ) const {}
+// 	void printOneLine( std::ostream &os, int indent = 0 ) const {}
+//   private:
+// 	Expression *expr;
+// };
 
 enum class OperKinds {
@@ -227,11 +257,13 @@
 };
 
-Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node );
-Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member );
-Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member );
+Expression *build_cast( DeclarationNode * decl_node, ExpressionNode *expr_node );
+Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member );
+Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member );
 Expression *build_addressOf( ExpressionNode *expr_node );
-Expression *build_sizeOf( ExpressionNode *expr_node );
-Expression *build_alignOf( ExpressionNode *expr_node );
-Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member );
+Expression *build_sizeOfexpr( ExpressionNode *expr_node );
+Expression *build_sizeOftype( DeclarationNode *decl_node );
+Expression *build_alignOfexpr( ExpressionNode *expr_node );
+Expression *build_alignOftype( DeclarationNode *decl_node );
+Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member );
 Expression *build_and( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
 Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind );
@@ -242,49 +274,52 @@
 Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 );
 Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
-Expression *build_attr( VarRefNode *var, ExpressionNode * expr = 0 );
-Expression *build_tuple( ExpressionNode * expr = 0 );
-Expression *build_func( ExpressionNode * function, ExpressionNode * expr );
+Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node );
+Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node );
+Expression *build_tuple( ExpressionNode * expr_node = 0 );
+Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node );
 Expression *build_range( ExpressionNode * low, ExpressionNode *high );
 
 //##############################################################################
 
-class AsmExprNode : public ExpressionNode {
-  public:
-	AsmExprNode();
-	AsmExprNode( ExpressionNode *inout, ConstantNode *constraint, ExpressionNode *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
-	virtual ~AsmExprNode() { delete inout; delete constraint; delete operand; }
-
-	virtual AsmExprNode *clone() const { return new AsmExprNode( *this ); }
-	virtual Expression *build() const;
+// class AsmExprNode : public ExpressionNode {
+//   public:
+// 	AsmExprNode();
+// 	AsmExprNode( ExpressionNode *inout, ConstantNode *constraint, ExpressionNode *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
+// 	virtual ~AsmExprNode() { delete inout; delete constraint; delete operand; }
+
+// 	virtual AsmExprNode *clone() const { return new AsmExprNode( *this ); }
+// 	virtual Expression *build() const;
+
+// 	virtual void print( std::ostream &os, int indent = 0) const;
+// 	virtual void printOneLine( std::ostream &os, int indent = 0) const;
+
+// 	ExpressionNode *get_inout() const { return inout; };
+// 	void set_inout( ExpressionNode *newValue ) { inout = newValue; }
+
+// 	ConstantNode *get_constraint() const { return constraint; };
+// 	void set_constraint( ConstantNode *newValue ) { constraint = newValue; }
+
+// 	ExpressionNode *get_operand() const { return operand; };
+// 	void set_operand( ExpressionNode *newValue ) { operand = newValue; }
+//   private:
+// 	ExpressionNode *inout;
+// 	ConstantNode *constraint;
+// 	ExpressionNode *operand;
+// };
+
+Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand );
+
+//##############################################################################
+
+class LabelNode : public ExpressionNode {
+  public:
+	virtual Expression *build() const { return NULL; }
+	virtual LabelNode *clone() const { assert( false ); return new LabelNode( *this ); }
 
 	virtual void print( std::ostream &os, int indent = 0) const;
 	virtual void printOneLine( std::ostream &os, int indent = 0) const;
 
-	ExpressionNode *get_inout() const { return inout; };
-	void set_inout( ExpressionNode *newValue ) { inout = newValue; }
-
-	ConstantNode *get_constraint() const { return constraint; };
-	void set_constraint( ConstantNode *newValue ) { constraint = newValue; }
-
-	ExpressionNode *get_operand() const { return operand; };
-	void set_operand( ExpressionNode *newValue ) { operand = newValue; }
-  private:
-	ExpressionNode *inout;
-	ConstantNode *constraint;
-	ExpressionNode *operand;
-};
-
-//##############################################################################
-
-class LabelNode : public ExpressionNode {
-  public:
-	virtual Expression *build() const { return NULL; }
-	virtual LabelNode *clone() const { return new LabelNode( *this ); }
-
-	virtual void print( std::ostream &os, int indent = 0) const;
-	virtual void printOneLine( std::ostream &os, int indent = 0) const;
-
 	const std::list< Label > &get_labels() const { return labels; };
-	void append_label( std::string *label ) { labels.push_back( *label ); delete label; }
+	void append_label( std::string * label ) { labels.push_back( *label ); delete label; }
   private:
 	std::list< Label > labels;
@@ -316,21 +351,50 @@
 //##############################################################################
 
-class ValofExprNode : public ExpressionNode {
-  public:
-	ValofExprNode();
-	ValofExprNode( StatementNode *s = 0 );
-	ValofExprNode( const ValofExprNode &other );
-	~ValofExprNode();
-
-	virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
-
-	StatementNode *get_body() const { return body; }
-	void print( std::ostream &os, int indent = 0 ) const;
-	void printOneLine( std::ostream &os, int indent = 0 ) const;
-	Expression *build() const;
-
-  private:
-	StatementNode *body;
-};
+// class ValofExprNode : public ExpressionNode {
+//   public:
+// 	ValofExprNode();
+// 	ValofExprNode( StatementNode *s = 0 );
+// 	ValofExprNode( const ValofExprNode &other );
+// 	~ValofExprNode();
+
+// 	virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
+
+// 	StatementNode *get_body() const { return body; }
+// 	void print( std::ostream &os, int indent = 0 ) const;
+// 	void printOneLine( std::ostream &os, int indent = 0 ) const;
+// 	Expression *build() const;
+
+//   private:
+// 	StatementNode *body;
+// };
+
+Expression *build_valexpr( StatementNode *s );
+
+//##############################################################################
+
+// class CompoundLiteralNode : public ExpressionNode {
+//   public:
+// 	CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
+// 	CompoundLiteralNode( const CompoundLiteralNode &type );
+// 	~CompoundLiteralNode();
+
+// 	virtual CompoundLiteralNode *clone() const;
+
+// 	DeclarationNode *get_type() const { return type; }
+// 	CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
+
+// 	InitializerNode *get_initializer() const { return kids; }
+// 	CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
+
+// 	void print( std::ostream &os, int indent = 0 ) const;
+// 	void printOneLine( std::ostream &os, int indent = 0 ) const;
+
+// 	virtual Expression *build() const;
+//   private:
+// 	DeclarationNode *type;
+// 	InitializerNode *kids;
+// };
+
+Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids );
 
 //##############################################################################
@@ -444,4 +508,6 @@
 }; // DeclarationNode
 
+Type *buildType( TypeData *type );
+
 //##############################################################################
 
@@ -520,5 +586,5 @@
 class AsmStmtNode : public StatementNode {
   public:
-	AsmStmtNode( Type, bool voltile, ConstantNode *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ConstantNode *clobber = 0, LabelNode *gotolabels = 0 );
+	AsmStmtNode( Type, bool voltile, ConstantExpr *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ExpressionNode *clobber = 0, LabelNode *gotolabels = 0 );
 	~AsmStmtNode();
 
@@ -527,64 +593,11 @@
   private:
 	bool voltile;
-	ConstantNode *instruction;
+	ConstantExpr *instruction;
 	ExpressionNode *output, *input;
-	ConstantNode *clobber;
+	ExpressionNode *clobber;
 	std::list< Label > gotolabels;
 };
 
 //##############################################################################
-
-class InitializerNode : public ParseNode {
-  public:
-	InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
-	InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
-	~InitializerNode();
-
-	ExpressionNode *get_expression() const { return expr; }
-
-	InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
-	ExpressionNode *get_designators() const { return designator; }
-
-	InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
-	bool get_maybeConstructed() const { return maybeConstructed; }
-
-	InitializerNode *next_init() const { return kids; }
-
-	void print( std::ostream &os, int indent = 0 ) const;
-	void printOneLine( std::ostream & ) const;
-
-	virtual Initializer *build() const;
-  private:
-	ExpressionNode *expr;
-	bool aggregate;
-	ExpressionNode *designator; // may be list
-	InitializerNode *kids;
-	bool maybeConstructed;
-};
-
-//##############################################################################
-
-class CompoundLiteralNode : public ExpressionNode {
-  public:
-	CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
-	CompoundLiteralNode( const CompoundLiteralNode &type );
-	~CompoundLiteralNode();
-
-	virtual CompoundLiteralNode *clone() const;
-
-	DeclarationNode *get_type() const { return type; }
-	CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
-
-	InitializerNode *get_initializer() const { return kids; }
-	CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
-
-	void print( std::ostream &os, int indent = 0 ) const;
-	void printOneLine( std::ostream &os, int indent = 0 ) const;
-
-	virtual Expression *build() const;
-  private:
-	DeclarationNode *type;
-	InitializerNode *kids;
-};
 
 template< typename SynTreeType, typename NodeType >
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
+++ src/Parser/StatementNode.cc	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug  7 06:42:38 2016
-// Update Count     : 135
+// Last Modified On : Tue Aug  9 10:14:33 2016
+// Update Count     : 141
 //
 
@@ -350,5 +350,5 @@
 
 
-AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantNode *instruction, ExpressionNode *output, ExpressionNode *input, ConstantNode *clobber, LabelNode *gotolabels ) :
+AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantExpr *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) :
 	StatementNode( t ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ) {
 	if ( gotolabels ) {
@@ -359,5 +359,5 @@
 
 AsmStmtNode::~AsmStmtNode() {
-	delete instruction; delete output; delete input; delete clobber;
+	delete output; delete input; delete clobber;
 }
 
@@ -367,5 +367,5 @@
 	if ( instruction ) {
 		os << string( indent + ParseNode::indent_by, ' ' ) << "Instruction:" << endl;
-		instruction->printList( os, indent + 2 * ParseNode::indent_by );
+//		instruction->printList( os, indent + 2 * ParseNode::indent_by );
 	} // if
 	if ( output ) {
@@ -379,5 +379,5 @@
 	if ( clobber ) {
 		os << string( indent + ParseNode::indent_by, ' ' ) << "Clobber:" << endl;
-		clobber->printList( os, indent + 2 * ParseNode::indent_by );
+//		clobber->printList( os, indent + 2 * ParseNode::indent_by );
 	} // if
 	if ( ! gotolabels.empty() ) {
@@ -408,5 +408,5 @@
 	buildList( clobber, clob );
 	std::list< Label > gotolabs = gotolabels;
-	return new AsmStmt( labs, voltile, (ConstantExpr *)maybeBuild< Expression >( instruction ), out, in, clob, gotolabs );
+	return new AsmStmt( labs, voltile, instruction, out, in, clob, gotolabs );
 }
 
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
+++ src/Parser/parser.cc	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
@@ -356,5 +356,5 @@
 	DeclarationNode::TypeClass tclass;
 	StatementNode *sn;
-	ConstantNode *constant;
+	ConstantExpr *constant;
 	LabelNode *label;
 	InitializerNode *in;
@@ -596,5 +596,5 @@
 #define YYFINAL  251
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   10969
+#define YYLAST   10816
 
 /* YYNTOKENS -- Number of terminals.  */
@@ -603,7 +603,7 @@
 #define YYNNTS  241
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  754
+#define YYNRULES  750
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1577
+#define YYNSTATES  1554
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
@@ -620,14 +620,14 @@
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   122,     2,     2,     2,   125,   119,     2,
-     109,   110,   118,   120,   116,   121,   113,   124,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   117,   132,
-     126,   131,   127,   130,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   121,     2,     2,     2,   124,   118,     2,
+     109,   110,   117,   119,   116,   120,   113,   123,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   130,   132,
+     125,   131,   126,   129,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   111,     2,   112,   128,     2,     2,     2,     2,     2,
+       2,   111,     2,   112,   127,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   114,   129,   115,   123,     2,     2,     2,
+       2,     2,     2,   114,   128,   115,   122,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -664,77 +664,77 @@
       17,    19,    21,    23,    25,    27,    29,    31,    34,    36,
       38,    42,    46,    48,    55,    60,    64,    72,    76,    84,
-      87,    90,    98,   103,   105,   109,   110,   112,   116,   124,
-     134,   136,   140,   142,   146,   154,   158,   166,   168,   170,
-     172,   175,   178,   181,   184,   187,   190,   195,   202,   204,
-     209,   214,   217,   222,   224,   226,   228,   230,   232,   234,
-     236,   241,   246,   248,   252,   256,   260,   262,   266,   270,
-     272,   276,   280,   282,   286,   290,   294,   298,   300,   304,
-     308,   310,   314,   316,   320,   322,   326,   328,   332,   334,
-     338,   340,   346,   351,   357,   359,   361,   365,   368,   369,
-     371,   373,   375,   377,   379,   381,   383,   385,   387,   389,
-     391,   393,   396,   402,   409,   417,   419,   423,   425,   429,
-     430,   432,   434,   436,   438,   440,   442,   444,   446,   448,
-     455,   460,   463,   471,   473,   477,   479,   482,   484,   487,
-     489,   492,   495,   501,   509,   515,   525,   531,   541,   543,
-     547,   549,   551,   555,   559,   562,   564,   567,   570,   571,
-     573,   576,   580,   581,   583,   586,   590,   594,   599,   600,
-     602,   604,   607,   613,   621,   628,   635,   640,   644,   649,
-     652,   656,   659,   663,   667,   671,   675,   681,   685,   689,
-     694,   696,   702,   709,   715,   722,   732,   743,   753,   764,
-     767,   769,   772,   775,   778,   780,   787,   796,   807,   820,
-     835,   836,   838,   839,   841,   843,   847,   852,   860,   861,
-     863,   867,   869,   873,   875,   877,   879,   883,   885,   887,
-     889,   893,   894,   896,   900,   905,   907,   911,   913,   915,
-     919,   923,   927,   931,   935,   938,   942,   949,   953,   957,
-     962,   964,   967,   970,   974,   980,   989,   997,  1005,  1011,
-    1021,  1024,  1027,  1033,  1037,  1043,  1048,  1052,  1057,  1062,
-    1070,  1074,  1078,  1082,  1086,  1091,  1098,  1100,  1102,  1104,
-    1106,  1108,  1110,  1112,  1114,  1115,  1117,  1119,  1122,  1124,
-    1126,  1128,  1130,  1132,  1134,  1136,  1137,  1143,  1145,  1148,
-    1152,  1154,  1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,
-    1173,  1175,  1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,
-    1193,  1195,  1197,  1199,  1201,  1203,  1206,  1209,  1213,  1217,
-    1219,  1223,  1225,  1228,  1231,  1234,  1239,  1244,  1249,  1254,
-    1256,  1259,  1262,  1266,  1268,  1271,  1274,  1276,  1279,  1282,
-    1286,  1288,  1291,  1294,  1296,  1298,  1303,  1306,  1307,  1314,
-    1322,  1325,  1328,  1331,  1332,  1335,  1338,  1342,  1345,  1349,
-    1351,  1354,  1358,  1361,  1364,  1369,  1370,  1372,  1375,  1378,
-    1380,  1381,  1383,  1386,  1389,  1395,  1398,  1399,  1407,  1410,
-    1415,  1416,  1419,  1420,  1422,  1424,  1426,  1432,  1438,  1444,
-    1446,  1452,  1458,  1468,  1470,  1476,  1477,  1479,  1481,  1487,
-    1489,  1491,  1497,  1503,  1505,  1509,  1513,  1518,  1520,  1522,
-    1524,  1526,  1529,  1531,  1535,  1539,  1541,  1544,  1546,  1550,
-    1552,  1554,  1556,  1558,  1560,  1562,  1564,  1566,  1568,  1570,
-    1572,  1575,  1577,  1579,  1581,  1584,  1585,  1588,  1591,  1593,
-    1598,  1599,  1601,  1604,  1608,  1613,  1616,  1619,  1621,  1624,
-    1626,  1629,  1635,  1641,  1649,  1656,  1658,  1661,  1664,  1668,
-    1670,  1673,  1676,  1681,  1684,  1689,  1690,  1695,  1698,  1700,
-    1702,  1704,  1705,  1708,  1714,  1720,  1734,  1736,  1738,  1742,
-    1746,  1749,  1753,  1757,  1760,  1765,  1767,  1774,  1784,  1785,
-    1797,  1799,  1803,  1807,  1811,  1813,  1815,  1821,  1824,  1830,
-    1831,  1833,  1835,  1839,  1840,  1842,  1844,  1846,  1848,  1849,
-    1856,  1859,  1861,  1864,  1869,  1872,  1876,  1880,  1884,  1889,
-    1895,  1901,  1907,  1914,  1916,  1918,  1920,  1924,  1925,  1931,
-    1932,  1934,  1936,  1939,  1946,  1948,  1952,  1953,  1955,  1960,
-    1962,  1964,  1966,  1968,  1971,  1973,  1976,  1979,  1981,  1985,
-    1988,  1992,  1996,  1999,  2004,  2009,  2013,  2022,  2026,  2029,
-    2031,  2034,  2041,  2050,  2054,  2057,  2061,  2065,  2070,  2075,
-    2079,  2081,  2083,  2085,  2090,  2097,  2101,  2104,  2108,  2112,
-    2117,  2122,  2126,  2129,  2131,  2134,  2137,  2139,  2143,  2146,
-    2150,  2154,  2157,  2162,  2167,  2171,  2178,  2187,  2191,  2194,
-    2196,  2199,  2202,  2205,  2209,  2213,  2216,  2221,  2226,  2230,
-    2237,  2246,  2250,  2253,  2255,  2258,  2261,  2263,  2265,  2268,
-    2272,  2276,  2279,  2284,  2291,  2300,  2302,  2305,  2308,  2310,
-    2313,  2316,  2320,  2324,  2326,  2331,  2336,  2340,  2346,  2355,
-    2359,  2362,  2366,  2368,  2374,  2380,  2387,  2394,  2396,  2399,
-    2402,  2404,  2407,  2410,  2414,  2418,  2420,  2425,  2430,  2434,
-    2440,  2449,  2453,  2455,  2458,  2460,  2463,  2470,  2476,  2483,
-    2491,  2499,  2501,  2504,  2507,  2509,  2512,  2515,  2519,  2523,
-    2525,  2530,  2535,  2539,  2548,  2552,  2554,  2556,  2559,  2561,
-    2563,  2566,  2570,  2573,  2577,  2580,  2584,  2588,  2591,  2596,
-    2600,  2603,  2607,  2610,  2615,  2619,  2622,  2629,  2636,  2643,
-    2651,  2653,  2656,  2658,  2660,  2662,  2665,  2669,  2672,  2676,
-    2679,  2683,  2687,  2692,  2695,  2699,  2704,  2707,  2713,  2719,
-    2726,  2733,  2734,  2736,  2737
+      87,    90,    98,   103,   105,   109,   110,   112,   114,   118,
+     120,   124,   132,   136,   144,   146,   148,   150,   153,   156,
+     159,   162,   165,   168,   173,   176,   181,   188,   190,   195,
+     200,   202,   204,   206,   208,   210,   212,   214,   219,   224,
+     226,   230,   234,   238,   240,   244,   248,   250,   254,   258,
+     260,   264,   268,   272,   276,   278,   282,   286,   288,   292,
+     294,   298,   300,   304,   306,   310,   312,   316,   318,   324,
+     329,   335,   337,   339,   343,   346,   347,   349,   351,   353,
+     355,   357,   359,   361,   363,   365,   367,   369,   371,   374,
+     380,   387,   395,   397,   401,   403,   407,   408,   410,   412,
+     414,   416,   418,   420,   422,   424,   426,   433,   438,   441,
+     449,   451,   455,   457,   460,   462,   465,   467,   470,   473,
+     479,   487,   493,   503,   509,   519,   521,   525,   527,   529,
+     533,   537,   540,   542,   545,   548,   549,   551,   554,   558,
+     559,   561,   564,   568,   572,   577,   578,   580,   582,   585,
+     591,   599,   606,   613,   618,   622,   627,   630,   634,   637,
+     641,   645,   649,   653,   659,   663,   667,   672,   674,   680,
+     687,   693,   700,   710,   721,   731,   742,   745,   747,   750,
+     753,   756,   758,   765,   774,   785,   798,   813,   814,   816,
+     817,   819,   821,   825,   830,   838,   839,   841,   845,   847,
+     851,   853,   855,   857,   861,   863,   865,   867,   871,   872,
+     874,   878,   883,   885,   889,   891,   893,   897,   901,   905,
+     909,   913,   916,   920,   927,   931,   935,   940,   942,   945,
+     948,   952,   958,   967,   975,   983,   989,   999,  1002,  1005,
+    1011,  1015,  1021,  1026,  1030,  1035,  1040,  1048,  1052,  1056,
+    1060,  1064,  1069,  1076,  1078,  1080,  1082,  1084,  1086,  1088,
+    1090,  1092,  1093,  1095,  1097,  1100,  1102,  1104,  1106,  1108,
+    1110,  1112,  1114,  1115,  1121,  1123,  1126,  1130,  1132,  1135,
+    1137,  1139,  1141,  1143,  1145,  1147,  1149,  1151,  1153,  1155,
+    1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
+    1177,  1179,  1181,  1184,  1187,  1191,  1195,  1197,  1201,  1203,
+    1206,  1209,  1212,  1217,  1222,  1227,  1232,  1234,  1237,  1240,
+    1244,  1246,  1249,  1252,  1254,  1257,  1260,  1264,  1266,  1269,
+    1272,  1274,  1276,  1281,  1284,  1285,  1292,  1300,  1303,  1306,
+    1309,  1310,  1313,  1316,  1320,  1323,  1327,  1329,  1332,  1336,
+    1339,  1342,  1347,  1348,  1350,  1353,  1356,  1358,  1359,  1361,
+    1364,  1367,  1373,  1376,  1377,  1385,  1388,  1393,  1394,  1397,
+    1398,  1400,  1402,  1404,  1410,  1416,  1422,  1424,  1430,  1436,
+    1446,  1448,  1454,  1455,  1457,  1459,  1465,  1467,  1469,  1475,
+    1481,  1483,  1487,  1491,  1496,  1498,  1500,  1502,  1504,  1507,
+    1509,  1513,  1517,  1519,  1522,  1524,  1528,  1530,  1532,  1534,
+    1536,  1538,  1540,  1542,  1544,  1546,  1548,  1550,  1553,  1555,
+    1557,  1559,  1562,  1563,  1566,  1569,  1571,  1576,  1577,  1579,
+    1582,  1586,  1591,  1594,  1597,  1599,  1602,  1605,  1611,  1617,
+    1625,  1632,  1634,  1637,  1640,  1644,  1646,  1649,  1652,  1657,
+    1660,  1665,  1666,  1671,  1674,  1676,  1678,  1680,  1681,  1684,
+    1690,  1696,  1710,  1712,  1714,  1718,  1722,  1725,  1729,  1733,
+    1736,  1741,  1743,  1750,  1760,  1761,  1773,  1775,  1779,  1783,
+    1787,  1789,  1791,  1797,  1800,  1806,  1807,  1809,  1811,  1815,
+    1816,  1818,  1820,  1822,  1824,  1825,  1832,  1835,  1837,  1840,
+    1845,  1848,  1852,  1856,  1860,  1865,  1871,  1877,  1883,  1890,
+    1892,  1894,  1896,  1900,  1901,  1907,  1908,  1910,  1912,  1915,
+    1922,  1924,  1928,  1929,  1931,  1936,  1938,  1940,  1942,  1944,
+    1947,  1949,  1952,  1955,  1957,  1961,  1964,  1968,  1972,  1975,
+    1980,  1985,  1989,  1998,  2002,  2005,  2007,  2010,  2017,  2026,
+    2030,  2033,  2037,  2041,  2046,  2051,  2055,  2057,  2059,  2061,
+    2066,  2073,  2077,  2080,  2084,  2088,  2093,  2098,  2102,  2105,
+    2107,  2110,  2113,  2115,  2119,  2122,  2126,  2130,  2133,  2138,
+    2143,  2147,  2154,  2163,  2167,  2170,  2172,  2175,  2178,  2181,
+    2185,  2189,  2192,  2197,  2202,  2206,  2213,  2222,  2226,  2229,
+    2231,  2234,  2237,  2239,  2241,  2244,  2248,  2252,  2255,  2260,
+    2267,  2276,  2278,  2281,  2284,  2286,  2289,  2292,  2296,  2300,
+    2302,  2307,  2312,  2316,  2322,  2331,  2335,  2338,  2342,  2344,
+    2350,  2356,  2363,  2370,  2372,  2375,  2378,  2380,  2383,  2386,
+    2390,  2394,  2396,  2401,  2406,  2410,  2416,  2425,  2429,  2431,
+    2434,  2436,  2439,  2446,  2452,  2459,  2467,  2475,  2477,  2480,
+    2483,  2485,  2488,  2491,  2495,  2499,  2501,  2506,  2511,  2515,
+    2524,  2528,  2530,  2532,  2535,  2537,  2539,  2542,  2546,  2549,
+    2553,  2556,  2560,  2564,  2567,  2572,  2576,  2579,  2583,  2586,
+    2591,  2595,  2598,  2605,  2612,  2619,  2627,  2629,  2632,  2634,
+    2636,  2638,  2641,  2645,  2648,  2652,  2655,  2659,  2663,  2668,
+    2671,  2675,  2680,  2683,  2689,  2695,  2702,  2709,  2710,  2712,
+    2713
 };
 
@@ -753,267 +753,265 @@
      109,   275,   110,   114,   279,   372,   115,    -1,   143,   114,
      144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
-     164,    -1,   139,   117,   164,    -1,   111,   134,   164,   135,
-     112,   117,   164,    -1,   111,   134,   164,   116,   168,   135,
-     112,   117,   164,    -1,   147,    -1,   146,   116,   147,    -1,
-     139,    -1,   139,   113,   147,    -1,   139,   113,   111,   134,
-     146,   135,   112,    -1,   139,    85,   147,    -1,   139,    85,
-     111,   134,   146,   135,   112,    -1,   143,    -1,   136,    -1,
-     141,    -1,    40,   151,    -1,   149,   151,    -1,   150,   151,
-      -1,    86,   148,    -1,    87,   148,    -1,    37,   148,    -1,
-      37,   109,   275,   110,    -1,    38,   109,   275,   116,   139,
-     110,    -1,    76,    -1,    76,   109,   276,   110,    -1,    76,
-     109,   145,   110,    -1,    66,   148,    -1,    66,   109,   275,
-     110,    -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,
-     122,    -1,   123,    -1,   148,    -1,   109,   275,   110,   151,
-      -1,   109,   275,   110,   167,    -1,   151,    -1,   152,   118,
-     151,    -1,   152,   124,   151,    -1,   152,   125,   151,    -1,
-     152,    -1,   153,   120,   152,    -1,   153,   121,   152,    -1,
-     153,    -1,   154,    88,   153,    -1,   154,    89,   153,    -1,
-     154,    -1,   155,   126,   154,    -1,   155,   127,   154,    -1,
-     155,    90,   154,    -1,   155,    91,   154,    -1,   155,    -1,
-     156,    92,   155,    -1,   156,    93,   155,    -1,   156,    -1,
-     157,   119,   156,    -1,   157,    -1,   158,   128,   157,    -1,
-     158,    -1,   159,   129,   158,    -1,   159,    -1,   160,    94,
-     159,    -1,   160,    -1,   161,    95,   160,    -1,   161,    -1,
-     161,   130,   169,   117,   162,    -1,   161,   130,   117,   162,
-      -1,   161,   130,   169,   117,   167,    -1,   162,    -1,   162,
-      -1,   148,   166,   164,    -1,   167,   373,    -1,    -1,   164,
-      -1,   131,    -1,    97,    -1,    98,    -1,    99,    -1,   100,
-      -1,   101,    -1,   102,    -1,   103,    -1,   104,    -1,   105,
-      -1,   106,    -1,   111,   112,    -1,   111,   134,   164,   135,
-     112,    -1,   111,   134,   116,   168,   135,   112,    -1,   111,
-     134,   164,   116,   168,   135,   112,    -1,   165,    -1,   168,
-     116,   165,    -1,   164,    -1,   169,   116,   164,    -1,    -1,
-     169,    -1,   172,    -1,   173,    -1,   177,    -1,   178,    -1,
-     190,    -1,   192,    -1,   193,    -1,   198,    -1,   128,   143,
-     114,   144,   115,   132,    -1,    72,   117,   312,   171,    -1,
-     114,   115,    -1,   114,   134,   134,   209,   174,   135,   115,
-      -1,   175,    -1,   174,   134,   175,    -1,   212,    -1,    40,
-     212,    -1,   308,    -1,   171,   135,    -1,   171,    -1,   176,
-     171,    -1,   170,   132,    -1,    41,   109,   169,   110,   171,
-      -1,    41,   109,   169,   110,   171,    42,   171,    -1,    43,
-     109,   169,   110,   183,    -1,    43,   109,   169,   110,   114,
-     134,   205,   184,   115,    -1,    53,   109,   169,   110,   183,
-      -1,    53,   109,   169,   110,   114,   134,   205,   186,   115,
-      -1,   163,    -1,   163,    96,   163,    -1,   310,    -1,   179,
-      -1,   180,   116,   179,    -1,    44,   180,   117,    -1,    45,
-     117,    -1,   181,    -1,   182,   181,    -1,   182,   171,    -1,
-      -1,   185,    -1,   182,   176,    -1,   185,   182,   176,    -1,
-      -1,   187,    -1,   182,   189,    -1,   182,   176,   188,    -1,
-     187,   182,   189,    -1,   187,   182,   176,   188,    -1,    -1,
-     189,    -1,    56,    -1,    56,   132,    -1,    47,   109,   169,
-     110,   171,    -1,    46,   171,    47,   109,   169,   110,   132,
-      -1,    48,   109,   134,   191,   110,   171,    -1,   170,   135,
-     132,   170,   132,   170,    -1,   212,   170,   132,   170,    -1,
-      51,    72,   132,    -1,    51,   118,   169,   132,    -1,    50,
-     132,    -1,    50,    72,   132,    -1,    49,   132,    -1,    49,
-      72,   132,    -1,    52,   170,   132,    -1,    61,   165,   132,
-      -1,    62,   165,   132,    -1,    62,   165,    63,   164,   132,
-      -1,    57,   173,   194,    -1,    57,   173,   196,    -1,    57,
-     173,   194,   196,    -1,   195,    -1,    58,   109,    96,   110,
-     173,    -1,   195,    58,   109,    96,   110,   173,    -1,    59,
-     109,    96,   110,   173,    -1,   195,    59,   109,    96,   110,
-     173,    -1,    58,   109,   134,   134,   197,   135,   110,   173,
-     135,    -1,   195,    58,   109,   134,   134,   197,   135,   110,
-     173,   135,    -1,    59,   109,   134,   134,   197,   135,   110,
-     173,   135,    -1,   195,    59,   109,   134,   134,   197,   135,
-     110,   173,   135,    -1,    60,   173,    -1,   225,    -1,   225,
-     309,    -1,   225,   357,    -1,   366,   139,    -1,   366,    -1,
-      64,   199,   109,   141,   110,   132,    -1,    64,   199,   109,
-     141,   117,   200,   110,   132,    -1,    64,   199,   109,   141,
-     117,   200,   117,   200,   110,   132,    -1,    64,   199,   109,
-     141,   117,   200,   117,   200,   117,   203,   110,   132,    -1,
-      64,   199,    51,   109,   141,   117,   117,   200,   117,   203,
-     117,   204,   110,   132,    -1,    -1,    11,    -1,    -1,   201,
-      -1,   202,    -1,   201,   116,   202,    -1,   141,   109,   163,
-     110,    -1,   111,   163,   112,   141,   109,   163,   110,    -1,
-      -1,   141,    -1,   203,   116,   141,    -1,   139,    -1,   204,
-     116,   139,    -1,   135,    -1,   206,    -1,   212,    -1,   206,
-     134,   212,    -1,   135,    -1,   208,    -1,   222,    -1,   208,
-     134,   222,    -1,    -1,   210,    -1,    29,   211,   132,    -1,
-     210,    29,   211,   132,    -1,   274,    -1,   211,   116,   274,
-      -1,   213,    -1,   222,    -1,   214,   135,   132,    -1,   219,
-     135,   132,    -1,   216,   135,   132,    -1,   293,   135,   132,
-      -1,   296,   135,   132,    -1,   215,   277,    -1,   231,   215,
-     277,    -1,   214,   135,   116,   134,   272,   277,    -1,   367,
-     272,   311,    -1,   370,   272,   311,    -1,   227,   370,   272,
-     311,    -1,   217,    -1,   227,   217,    -1,   231,   217,    -1,
-     231,   227,   217,    -1,   216,   135,   116,   134,   272,    -1,
-     111,   112,   272,   109,   134,   260,   135,   110,    -1,   370,
-     272,   109,   134,   260,   135,   110,    -1,   218,   272,   109,
-     134,   260,   135,   110,    -1,   111,   134,   262,   135,   112,
-      -1,   111,   134,   262,   135,   116,   134,   263,   135,   112,
-      -1,     3,   215,    -1,     3,   217,    -1,   219,   135,   116,
-     134,   139,    -1,     3,   225,   309,    -1,   220,   135,   116,
-     134,   309,    -1,   227,     3,   225,   309,    -1,   225,     3,
-     309,    -1,   225,     3,   227,   309,    -1,     3,   139,   131,
-     164,    -1,   221,   135,   116,   134,   139,   131,   164,    -1,
-     223,   135,   132,    -1,   220,   135,   132,    -1,   221,   135,
-     132,    -1,   240,   135,   132,    -1,   224,   309,   311,   277,
-      -1,   223,   116,   312,   309,   311,   277,    -1,   236,    -1,
-     240,    -1,   242,    -1,   283,    -1,   237,    -1,   241,    -1,
-     243,    -1,   284,    -1,    -1,   227,    -1,   228,    -1,   227,
-     228,    -1,   229,    -1,   314,    -1,    10,    -1,    12,    -1,
-      11,    -1,    14,    -1,    67,    -1,    -1,    13,   109,   230,
-     286,   110,    -1,   232,    -1,   227,   232,    -1,   231,   227,
-     232,    -1,   233,    -1,   232,   233,    -1,   234,    -1,     5,
-      -1,     7,    -1,     4,    -1,     6,    -1,     8,    -1,     9,
-      -1,    69,    -1,    71,    -1,    16,    -1,    21,    -1,    20,
-      -1,    18,    -1,    19,    -1,    17,    -1,    22,    -1,    23,
-      -1,    15,    -1,    25,    -1,    26,    -1,    27,    -1,    24,
-      -1,   237,    -1,   231,   237,    -1,   236,   233,    -1,   236,
-     233,   227,    -1,   236,   233,   237,    -1,   238,    -1,   226,
-     239,   226,    -1,   235,    -1,   227,   235,    -1,   238,   228,
-      -1,   238,   235,    -1,    28,   109,   276,   110,    -1,    28,
-     109,   169,   110,    -1,    78,   109,   276,   110,    -1,    78,
-     109,   169,   110,    -1,   241,    -1,   231,   241,    -1,   240,
-     233,    -1,   240,   233,   227,    -1,   244,    -1,   227,   244,
-      -1,   241,   228,    -1,   243,    -1,   231,   243,    -1,   242,
-     233,    -1,   242,   233,   227,    -1,    74,    -1,   227,    74,
-      -1,   243,   228,    -1,   245,    -1,   256,    -1,   247,   114,
-     248,   115,    -1,   247,   274,    -1,    -1,   247,   274,   246,
-     114,   248,   115,    -1,   247,   109,   292,   110,   114,   248,
-     115,    -1,   247,   285,    -1,    31,   312,    -1,    32,   312,
-      -1,    -1,   248,   249,    -1,   250,   132,    -1,    40,   250,
-     132,    -1,   251,   132,    -1,    40,   251,   132,    -1,   366,
-      -1,   366,   274,    -1,   250,   116,   274,    -1,   250,   116,
-      -1,   225,   252,    -1,   251,   116,   312,   252,    -1,    -1,
-     254,    -1,   318,   253,    -1,   331,   253,    -1,   357,    -1,
-      -1,   254,    -1,   117,   163,    -1,    30,   312,    -1,   255,
-     114,   258,   372,   115,    -1,   255,   274,    -1,    -1,   255,
-     274,   257,   114,   258,   372,   115,    -1,   274,   259,    -1,
-     258,   116,   274,   259,    -1,    -1,   131,   163,    -1,    -1,
-     261,    -1,   263,    -1,   262,    -1,   262,   135,   116,   134,
-     263,    -1,   263,   135,   116,   134,    96,    -1,   262,   135,
-     116,   134,    96,    -1,   267,    -1,   263,   135,   116,   134,
-     267,    -1,   262,   135,   116,   134,   267,    -1,   262,   135,
-     116,   134,   263,   135,   116,   134,   267,    -1,   268,    -1,
-     263,   135,   116,   134,   268,    -1,    -1,   265,    -1,   266,
-      -1,   266,   135,   116,   134,    96,    -1,   270,    -1,   269,
-      -1,   266,   135,   116,   134,   270,    -1,   266,   135,   116,
-     134,   269,    -1,   269,    -1,   362,   272,   373,    -1,   370,
-     272,   373,    -1,   227,   370,   272,   373,    -1,   217,    -1,
-     270,    -1,   362,    -1,   370,    -1,   227,   370,    -1,   371,
-      -1,   224,   336,   373,    -1,   224,   340,   373,    -1,   224,
-      -1,   224,   351,    -1,   139,    -1,   271,   116,   139,    -1,
-     137,    -1,    74,    -1,    75,    -1,   138,    -1,    74,    -1,
-      75,    -1,   139,    -1,    74,    -1,    75,    -1,   366,    -1,
-     225,    -1,   225,   357,    -1,   366,    -1,   371,    -1,   225,
-      -1,   225,   345,    -1,    -1,   131,   278,    -1,   107,   278,
-      -1,   164,    -1,   114,   279,   372,   115,    -1,    -1,   278,
-      -1,   280,   278,    -1,   279,   116,   278,    -1,   279,   116,
-     280,   278,    -1,   281,   117,    -1,   274,   117,    -1,   282,
-      -1,   281,   282,    -1,    80,    -1,   113,   274,    -1,   111,
-     134,   164,   135,   112,    -1,   111,   134,   310,   135,   112,
-      -1,   111,   134,   163,    96,   163,   135,   112,    -1,   113,
-     111,   134,   146,   135,   112,    -1,   284,    -1,   231,   284,
-      -1,   283,   233,    -1,   283,   233,   227,    -1,   285,    -1,
-     227,   285,    -1,   284,   228,    -1,    75,   109,   292,   110,
-      -1,   287,   373,    -1,   286,   116,   287,   373,    -1,    -1,
-     289,   274,   288,   290,    -1,   225,   336,    -1,    33,    -1,
-      35,    -1,    34,    -1,    -1,   290,   291,    -1,   129,   274,
-     109,   292,   110,    -1,   129,   114,   134,   298,   115,    -1,
-     129,   109,   134,   286,   135,   110,   114,   134,   298,   115,
-     109,   292,   110,    -1,   276,    -1,   164,    -1,   292,   116,
-     276,    -1,   292,   116,   164,    -1,    33,   294,    -1,   232,
-      33,   294,    -1,   293,   116,   294,    -1,   295,   290,    -1,
-     295,   290,   131,   276,    -1,   274,    -1,   273,   109,   134,
-     286,   135,   110,    -1,    36,   274,   109,   134,   286,   135,
-     110,   114,   115,    -1,    -1,    36,   274,   109,   134,   286,
-     135,   110,   114,   297,   298,   115,    -1,   299,    -1,   298,
-     134,   299,    -1,   300,   135,   132,    -1,   301,   135,   132,
-      -1,   215,    -1,   217,    -1,   300,   135,   116,   134,   272,
-      -1,   225,   309,    -1,   301,   135,   116,   134,   309,    -1,
-      -1,   303,    -1,   305,    -1,   303,   134,   305,    -1,    -1,
-     303,    -1,   212,    -1,   307,    -1,   198,    -1,    -1,     5,
-      82,   306,   114,   304,   115,    -1,    40,   305,    -1,   308,
-      -1,   323,   173,    -1,   327,   134,   207,   173,    -1,   216,
-     173,    -1,   224,   323,   173,    -1,   227,   323,   173,    -1,
-     231,   323,   173,    -1,   231,   227,   323,   173,    -1,   224,
-     327,   134,   207,   173,    -1,   227,   327,   134,   207,   173,
-      -1,   231,   327,   134,   207,   173,    -1,   231,   227,   327,
-     134,   207,   173,    -1,   318,    -1,   331,    -1,   323,    -1,
-     163,   123,   163,    -1,    -1,    64,   109,   141,   110,   312,
-      -1,    -1,   313,    -1,   314,    -1,   313,   314,    -1,    39,
-     109,   109,   315,   110,   110,    -1,   316,    -1,   315,   116,
-     316,    -1,    -1,   317,    -1,   317,   109,   170,   110,    -1,
-     272,    -1,   234,    -1,   235,    -1,   228,    -1,   319,   312,
-      -1,   320,    -1,   321,   312,    -1,   322,   312,    -1,   137,
-      -1,   109,   319,   110,    -1,   149,   318,    -1,   149,   227,
-     318,    -1,   109,   320,   110,    -1,   319,   349,    -1,   109,
-     320,   110,   349,    -1,   109,   321,   110,   350,    -1,   109,
-     321,   110,    -1,   109,   320,   110,   109,   134,   264,   135,
-     110,    -1,   109,   322,   110,    -1,   324,   312,    -1,   325,
-      -1,   326,   312,    -1,   319,   109,   134,   264,   135,   110,
-      -1,   109,   325,   110,   109,   134,   264,   135,   110,    -1,
-     109,   324,   110,    -1,   149,   323,    -1,   149,   227,   323,
-      -1,   109,   325,   110,    -1,   109,   325,   110,   349,    -1,
-     109,   326,   110,   350,    -1,   109,   326,   110,    -1,   328,
-      -1,   329,    -1,   330,    -1,   319,   109,   271,   110,    -1,
-     109,   329,   110,   109,   271,   110,    -1,   109,   328,   110,
-      -1,   149,   327,    -1,   149,   227,   327,    -1,   109,   329,
-     110,    -1,   109,   329,   110,   349,    -1,   109,   330,   110,
-     350,    -1,   109,   330,   110,    -1,   332,   312,    -1,   333,
-      -1,   334,   312,    -1,   335,   312,    -1,   341,    -1,   109,
-     332,   110,    -1,   149,   331,    -1,   149,   227,   331,    -1,
-     109,   333,   110,    -1,   332,   349,    -1,   109,   333,   110,
-     349,    -1,   109,   334,   110,   350,    -1,   109,   334,   110,
-      -1,   332,   109,   134,   264,   135,   110,    -1,   109,   333,
-     110,   109,   134,   264,   135,   110,    -1,   109,   335,   110,
-      -1,   319,   312,    -1,   337,    -1,   338,   312,    -1,   339,
-     312,    -1,   149,   336,    -1,   149,   227,   336,    -1,   109,
-     337,   110,    -1,   319,   355,    -1,   109,   337,   110,   349,
-      -1,   109,   338,   110,   350,    -1,   109,   338,   110,    -1,
-     319,   109,   134,   264,   135,   110,    -1,   109,   337,   110,
-     109,   134,   264,   135,   110,    -1,   109,   339,   110,    -1,
-     341,   312,    -1,   342,    -1,   343,   312,    -1,   344,   312,
-      -1,    74,    -1,    75,    -1,   149,   340,    -1,   149,   227,
-     340,    -1,   109,   342,   110,    -1,   341,   355,    -1,   109,
-     342,   110,   355,    -1,   341,   109,   134,   264,   135,   110,
-      -1,   109,   342,   110,   109,   134,   264,   135,   110,    -1,
-     346,    -1,   347,   312,    -1,   348,   312,    -1,   149,    -1,
-     149,   227,    -1,   149,   345,    -1,   149,   227,   345,    -1,
-     109,   346,   110,    -1,   349,    -1,   109,   346,   110,   349,
-      -1,   109,   347,   110,   350,    -1,   109,   347,   110,    -1,
-     109,   134,   264,   135,   110,    -1,   109,   346,   110,   109,
-     134,   264,   135,   110,    -1,   109,   348,   110,    -1,   111,
-     112,    -1,   111,   112,   350,    -1,   350,    -1,   111,   134,
-     164,   135,   112,    -1,   111,   134,   118,   135,   112,    -1,
-     350,   111,   134,   164,   135,   112,    -1,   350,   111,   134,
-     118,   135,   112,    -1,   352,    -1,   353,   312,    -1,   354,
-     312,    -1,   149,    -1,   149,   227,    -1,   149,   351,    -1,
-     149,   227,   351,    -1,   109,   352,   110,    -1,   355,    -1,
-     109,   352,   110,   355,    -1,   109,   353,   110,   350,    -1,
-     109,   353,   110,    -1,   109,   134,   264,   135,   110,    -1,
-     109,   352,   110,   109,   134,   264,   135,   110,    -1,   109,
-     354,   110,    -1,   356,    -1,   356,   350,    -1,   350,    -1,
-     111,   112,    -1,   111,   134,   227,   118,   135,   112,    -1,
-     111,   134,   227,   135,   112,    -1,   111,   134,   227,   164,
-     135,   112,    -1,   111,   134,     7,   226,   164,   135,   112,
-      -1,   111,   134,   227,     7,   164,   135,   112,    -1,   358,
-      -1,   359,   312,    -1,   360,   312,    -1,   149,    -1,   149,
-     227,    -1,   149,   357,    -1,   149,   227,   357,    -1,   109,
-     358,   110,    -1,   349,    -1,   109,   358,   110,   349,    -1,
-     109,   359,   110,   350,    -1,   109,   359,   110,    -1,   109,
-     358,   110,   109,   134,   264,   135,   110,    -1,   109,   360,
-     110,    -1,   362,    -1,   370,    -1,   227,   370,    -1,   363,
-      -1,   364,    -1,   149,   225,    -1,   227,   149,   225,    -1,
-     149,   371,    -1,   227,   149,   371,    -1,   149,   361,    -1,
-     227,   149,   361,    -1,   111,   112,   225,    -1,   365,   225,
-      -1,   111,   112,   350,   225,    -1,   365,   350,   225,    -1,
-     350,   225,    -1,   111,   112,   363,    -1,   365,   363,    -1,
-     111,   112,   350,   363,    -1,   365,   350,   363,    -1,   350,
-     363,    -1,   111,   134,   227,   118,   135,   112,    -1,   111,
-     134,   227,   164,   135,   112,    -1,   111,   134,   231,   164,
-     135,   112,    -1,   111,   134,   231,   227,   164,   135,   112,
-      -1,   370,    -1,   227,   370,    -1,   367,    -1,   368,    -1,
-     369,    -1,   149,   225,    -1,   227,   149,   225,    -1,   149,
-     371,    -1,   227,   149,   371,    -1,   149,   366,    -1,   227,
-     149,   366,    -1,   111,   112,   225,    -1,   111,   112,   350,
-     225,    -1,   350,   225,    -1,   111,   112,   368,    -1,   111,
-     112,   350,   368,    -1,   350,   368,    -1,   111,   134,   263,
-     135,   112,    -1,   111,   112,   109,   260,   110,    -1,   370,
-     109,   134,   260,   135,   110,    -1,   218,   109,   134,   260,
-     135,   110,    -1,    -1,   116,    -1,    -1,   131,   164,    -1
+     164,    -1,   147,    -1,   146,   116,   147,    -1,   139,    -1,
+     139,   113,   147,    -1,   139,   113,   111,   134,   146,   135,
+     112,    -1,   139,    85,   147,    -1,   139,    85,   111,   134,
+     146,   135,   112,    -1,   143,    -1,   136,    -1,   141,    -1,
+      40,   151,    -1,   149,   151,    -1,   150,   151,    -1,    86,
+     148,    -1,    87,   148,    -1,    37,   148,    -1,    37,   109,
+     275,   110,    -1,    66,   148,    -1,    66,   109,   275,   110,
+      -1,    38,   109,   275,   116,   139,   110,    -1,    76,    -1,
+      76,   109,   145,   110,    -1,    76,   109,   276,   110,    -1,
+     117,    -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,
+     122,    -1,   148,    -1,   109,   275,   110,   151,    -1,   109,
+     275,   110,   167,    -1,   151,    -1,   152,   117,   151,    -1,
+     152,   123,   151,    -1,   152,   124,   151,    -1,   152,    -1,
+     153,   119,   152,    -1,   153,   120,   152,    -1,   153,    -1,
+     154,    88,   153,    -1,   154,    89,   153,    -1,   154,    -1,
+     155,   125,   154,    -1,   155,   126,   154,    -1,   155,    90,
+     154,    -1,   155,    91,   154,    -1,   155,    -1,   156,    92,
+     155,    -1,   156,    93,   155,    -1,   156,    -1,   157,   118,
+     156,    -1,   157,    -1,   158,   127,   157,    -1,   158,    -1,
+     159,   128,   158,    -1,   159,    -1,   160,    94,   159,    -1,
+     160,    -1,   161,    95,   160,    -1,   161,    -1,   161,   129,
+     169,   130,   162,    -1,   161,   129,   130,   162,    -1,   161,
+     129,   169,   130,   167,    -1,   162,    -1,   162,    -1,   148,
+     166,   164,    -1,   167,   373,    -1,    -1,   164,    -1,   131,
+      -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,   101,
+      -1,   102,    -1,   103,    -1,   104,    -1,   105,    -1,   106,
+      -1,   111,   112,    -1,   111,   134,   164,   135,   112,    -1,
+     111,   134,   116,   168,   135,   112,    -1,   111,   134,   164,
+     116,   168,   135,   112,    -1,   165,    -1,   168,   116,   165,
+      -1,   164,    -1,   169,   116,   164,    -1,    -1,   169,    -1,
+     172,    -1,   173,    -1,   177,    -1,   178,    -1,   190,    -1,
+     192,    -1,   193,    -1,   198,    -1,   127,   143,   114,   144,
+     115,   132,    -1,    72,   130,   312,   171,    -1,   114,   115,
+      -1,   114,   134,   134,   209,   174,   135,   115,    -1,   175,
+      -1,   174,   134,   175,    -1,   212,    -1,    40,   212,    -1,
+     308,    -1,   171,   135,    -1,   171,    -1,   176,   171,    -1,
+     170,   132,    -1,    41,   109,   169,   110,   171,    -1,    41,
+     109,   169,   110,   171,    42,   171,    -1,    43,   109,   169,
+     110,   183,    -1,    43,   109,   169,   110,   114,   134,   205,
+     184,   115,    -1,    53,   109,   169,   110,   183,    -1,    53,
+     109,   169,   110,   114,   134,   205,   186,   115,    -1,   163,
+      -1,   163,    96,   163,    -1,   310,    -1,   179,    -1,   180,
+     116,   179,    -1,    44,   180,   130,    -1,    45,   130,    -1,
+     181,    -1,   182,   181,    -1,   182,   171,    -1,    -1,   185,
+      -1,   182,   176,    -1,   185,   182,   176,    -1,    -1,   187,
+      -1,   182,   189,    -1,   182,   176,   188,    -1,   187,   182,
+     189,    -1,   187,   182,   176,   188,    -1,    -1,   189,    -1,
+      56,    -1,    56,   132,    -1,    47,   109,   169,   110,   171,
+      -1,    46,   171,    47,   109,   169,   110,   132,    -1,    48,
+     109,   134,   191,   110,   171,    -1,   170,   135,   132,   170,
+     132,   170,    -1,   212,   170,   132,   170,    -1,    51,    72,
+     132,    -1,    51,   117,   169,   132,    -1,    50,   132,    -1,
+      50,    72,   132,    -1,    49,   132,    -1,    49,    72,   132,
+      -1,    52,   170,   132,    -1,    61,   165,   132,    -1,    62,
+     165,   132,    -1,    62,   165,    63,   164,   132,    -1,    57,
+     173,   194,    -1,    57,   173,   196,    -1,    57,   173,   194,
+     196,    -1,   195,    -1,    58,   109,    96,   110,   173,    -1,
+     195,    58,   109,    96,   110,   173,    -1,    59,   109,    96,
+     110,   173,    -1,   195,    59,   109,    96,   110,   173,    -1,
+      58,   109,   134,   134,   197,   135,   110,   173,   135,    -1,
+     195,    58,   109,   134,   134,   197,   135,   110,   173,   135,
+      -1,    59,   109,   134,   134,   197,   135,   110,   173,   135,
+      -1,   195,    59,   109,   134,   134,   197,   135,   110,   173,
+     135,    -1,    60,   173,    -1,   225,    -1,   225,   309,    -1,
+     225,   357,    -1,   366,   139,    -1,   366,    -1,    64,   199,
+     109,   141,   110,   132,    -1,    64,   199,   109,   141,   130,
+     200,   110,   132,    -1,    64,   199,   109,   141,   130,   200,
+     130,   200,   110,   132,    -1,    64,   199,   109,   141,   130,
+     200,   130,   200,   130,   203,   110,   132,    -1,    64,   199,
+      51,   109,   141,   130,   130,   200,   130,   203,   130,   204,
+     110,   132,    -1,    -1,    11,    -1,    -1,   201,    -1,   202,
+      -1,   201,   116,   202,    -1,   141,   109,   163,   110,    -1,
+     111,   163,   112,   141,   109,   163,   110,    -1,    -1,   141,
+      -1,   203,   116,   141,    -1,   139,    -1,   204,   116,   139,
+      -1,   135,    -1,   206,    -1,   212,    -1,   206,   134,   212,
+      -1,   135,    -1,   208,    -1,   222,    -1,   208,   134,   222,
+      -1,    -1,   210,    -1,    29,   211,   132,    -1,   210,    29,
+     211,   132,    -1,   274,    -1,   211,   116,   274,    -1,   213,
+      -1,   222,    -1,   214,   135,   132,    -1,   219,   135,   132,
+      -1,   216,   135,   132,    -1,   293,   135,   132,    -1,   296,
+     135,   132,    -1,   215,   277,    -1,   231,   215,   277,    -1,
+     214,   135,   116,   134,   272,   277,    -1,   367,   272,   311,
+      -1,   370,   272,   311,    -1,   227,   370,   272,   311,    -1,
+     217,    -1,   227,   217,    -1,   231,   217,    -1,   231,   227,
+     217,    -1,   216,   135,   116,   134,   272,    -1,   111,   112,
+     272,   109,   134,   260,   135,   110,    -1,   370,   272,   109,
+     134,   260,   135,   110,    -1,   218,   272,   109,   134,   260,
+     135,   110,    -1,   111,   134,   262,   135,   112,    -1,   111,
+     134,   262,   135,   116,   134,   263,   135,   112,    -1,     3,
+     215,    -1,     3,   217,    -1,   219,   135,   116,   134,   139,
+      -1,     3,   225,   309,    -1,   220,   135,   116,   134,   309,
+      -1,   227,     3,   225,   309,    -1,   225,     3,   309,    -1,
+     225,     3,   227,   309,    -1,     3,   139,   131,   164,    -1,
+     221,   135,   116,   134,   139,   131,   164,    -1,   223,   135,
+     132,    -1,   220,   135,   132,    -1,   221,   135,   132,    -1,
+     240,   135,   132,    -1,   224,   309,   311,   277,    -1,   223,
+     116,   312,   309,   311,   277,    -1,   236,    -1,   240,    -1,
+     242,    -1,   283,    -1,   237,    -1,   241,    -1,   243,    -1,
+     284,    -1,    -1,   227,    -1,   228,    -1,   227,   228,    -1,
+     229,    -1,   314,    -1,    10,    -1,    12,    -1,    11,    -1,
+      14,    -1,    67,    -1,    -1,    13,   109,   230,   286,   110,
+      -1,   232,    -1,   227,   232,    -1,   231,   227,   232,    -1,
+     233,    -1,   232,   233,    -1,   234,    -1,     5,    -1,     7,
+      -1,     4,    -1,     6,    -1,     8,    -1,     9,    -1,    69,
+      -1,    71,    -1,    16,    -1,    21,    -1,    20,    -1,    18,
+      -1,    19,    -1,    17,    -1,    22,    -1,    23,    -1,    15,
+      -1,    25,    -1,    26,    -1,    27,    -1,    24,    -1,   237,
+      -1,   231,   237,    -1,   236,   233,    -1,   236,   233,   227,
+      -1,   236,   233,   237,    -1,   238,    -1,   226,   239,   226,
+      -1,   235,    -1,   227,   235,    -1,   238,   228,    -1,   238,
+     235,    -1,    28,   109,   276,   110,    -1,    28,   109,   169,
+     110,    -1,    78,   109,   276,   110,    -1,    78,   109,   169,
+     110,    -1,   241,    -1,   231,   241,    -1,   240,   233,    -1,
+     240,   233,   227,    -1,   244,    -1,   227,   244,    -1,   241,
+     228,    -1,   243,    -1,   231,   243,    -1,   242,   233,    -1,
+     242,   233,   227,    -1,    74,    -1,   227,    74,    -1,   243,
+     228,    -1,   245,    -1,   256,    -1,   247,   114,   248,   115,
+      -1,   247,   274,    -1,    -1,   247,   274,   246,   114,   248,
+     115,    -1,   247,   109,   292,   110,   114,   248,   115,    -1,
+     247,   285,    -1,    31,   312,    -1,    32,   312,    -1,    -1,
+     248,   249,    -1,   250,   132,    -1,    40,   250,   132,    -1,
+     251,   132,    -1,    40,   251,   132,    -1,   366,    -1,   366,
+     274,    -1,   250,   116,   274,    -1,   250,   116,    -1,   225,
+     252,    -1,   251,   116,   312,   252,    -1,    -1,   254,    -1,
+     318,   253,    -1,   331,   253,    -1,   357,    -1,    -1,   254,
+      -1,   130,   163,    -1,    30,   312,    -1,   255,   114,   258,
+     372,   115,    -1,   255,   274,    -1,    -1,   255,   274,   257,
+     114,   258,   372,   115,    -1,   274,   259,    -1,   258,   116,
+     274,   259,    -1,    -1,   131,   163,    -1,    -1,   261,    -1,
+     263,    -1,   262,    -1,   262,   135,   116,   134,   263,    -1,
+     263,   135,   116,   134,    96,    -1,   262,   135,   116,   134,
+      96,    -1,   267,    -1,   263,   135,   116,   134,   267,    -1,
+     262,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
+     263,   135,   116,   134,   267,    -1,   268,    -1,   263,   135,
+     116,   134,   268,    -1,    -1,   265,    -1,   266,    -1,   266,
+     135,   116,   134,    96,    -1,   270,    -1,   269,    -1,   266,
+     135,   116,   134,   270,    -1,   266,   135,   116,   134,   269,
+      -1,   269,    -1,   362,   272,   373,    -1,   370,   272,   373,
+      -1,   227,   370,   272,   373,    -1,   217,    -1,   270,    -1,
+     362,    -1,   370,    -1,   227,   370,    -1,   371,    -1,   224,
+     336,   373,    -1,   224,   340,   373,    -1,   224,    -1,   224,
+     351,    -1,   139,    -1,   271,   116,   139,    -1,   137,    -1,
+      74,    -1,    75,    -1,   138,    -1,    74,    -1,    75,    -1,
+     139,    -1,    74,    -1,    75,    -1,   366,    -1,   225,    -1,
+     225,   357,    -1,   366,    -1,   371,    -1,   225,    -1,   225,
+     345,    -1,    -1,   131,   278,    -1,   107,   278,    -1,   164,
+      -1,   114,   279,   372,   115,    -1,    -1,   278,    -1,   280,
+     278,    -1,   279,   116,   278,    -1,   279,   116,   280,   278,
+      -1,   281,   130,    -1,   274,   130,    -1,   282,    -1,   281,
+     282,    -1,   113,   274,    -1,   111,   134,   164,   135,   112,
+      -1,   111,   134,   310,   135,   112,    -1,   111,   134,   163,
+      96,   163,   135,   112,    -1,   113,   111,   134,   146,   135,
+     112,    -1,   284,    -1,   231,   284,    -1,   283,   233,    -1,
+     283,   233,   227,    -1,   285,    -1,   227,   285,    -1,   284,
+     228,    -1,    75,   109,   292,   110,    -1,   287,   373,    -1,
+     286,   116,   287,   373,    -1,    -1,   289,   274,   288,   290,
+      -1,   225,   336,    -1,    33,    -1,    35,    -1,    34,    -1,
+      -1,   290,   291,    -1,   128,   274,   109,   292,   110,    -1,
+     128,   114,   134,   298,   115,    -1,   128,   109,   134,   286,
+     135,   110,   114,   134,   298,   115,   109,   292,   110,    -1,
+     276,    -1,   164,    -1,   292,   116,   276,    -1,   292,   116,
+     164,    -1,    33,   294,    -1,   232,    33,   294,    -1,   293,
+     116,   294,    -1,   295,   290,    -1,   295,   290,   131,   276,
+      -1,   274,    -1,   273,   109,   134,   286,   135,   110,    -1,
+      36,   274,   109,   134,   286,   135,   110,   114,   115,    -1,
+      -1,    36,   274,   109,   134,   286,   135,   110,   114,   297,
+     298,   115,    -1,   299,    -1,   298,   134,   299,    -1,   300,
+     135,   132,    -1,   301,   135,   132,    -1,   215,    -1,   217,
+      -1,   300,   135,   116,   134,   272,    -1,   225,   309,    -1,
+     301,   135,   116,   134,   309,    -1,    -1,   303,    -1,   305,
+      -1,   303,   134,   305,    -1,    -1,   303,    -1,   212,    -1,
+     307,    -1,   198,    -1,    -1,     5,    82,   306,   114,   304,
+     115,    -1,    40,   305,    -1,   308,    -1,   323,   173,    -1,
+     327,   134,   207,   173,    -1,   216,   173,    -1,   224,   323,
+     173,    -1,   227,   323,   173,    -1,   231,   323,   173,    -1,
+     231,   227,   323,   173,    -1,   224,   327,   134,   207,   173,
+      -1,   227,   327,   134,   207,   173,    -1,   231,   327,   134,
+     207,   173,    -1,   231,   227,   327,   134,   207,   173,    -1,
+     318,    -1,   331,    -1,   323,    -1,   163,   122,   163,    -1,
+      -1,    64,   109,   141,   110,   312,    -1,    -1,   313,    -1,
+     314,    -1,   313,   314,    -1,    39,   109,   109,   315,   110,
+     110,    -1,   316,    -1,   315,   116,   316,    -1,    -1,   317,
+      -1,   317,   109,   170,   110,    -1,   272,    -1,   234,    -1,
+     235,    -1,   228,    -1,   319,   312,    -1,   320,    -1,   321,
+     312,    -1,   322,   312,    -1,   137,    -1,   109,   319,   110,
+      -1,   149,   318,    -1,   149,   227,   318,    -1,   109,   320,
+     110,    -1,   319,   349,    -1,   109,   320,   110,   349,    -1,
+     109,   321,   110,   350,    -1,   109,   321,   110,    -1,   109,
+     320,   110,   109,   134,   264,   135,   110,    -1,   109,   322,
+     110,    -1,   324,   312,    -1,   325,    -1,   326,   312,    -1,
+     319,   109,   134,   264,   135,   110,    -1,   109,   325,   110,
+     109,   134,   264,   135,   110,    -1,   109,   324,   110,    -1,
+     149,   323,    -1,   149,   227,   323,    -1,   109,   325,   110,
+      -1,   109,   325,   110,   349,    -1,   109,   326,   110,   350,
+      -1,   109,   326,   110,    -1,   328,    -1,   329,    -1,   330,
+      -1,   319,   109,   271,   110,    -1,   109,   329,   110,   109,
+     271,   110,    -1,   109,   328,   110,    -1,   149,   327,    -1,
+     149,   227,   327,    -1,   109,   329,   110,    -1,   109,   329,
+     110,   349,    -1,   109,   330,   110,   350,    -1,   109,   330,
+     110,    -1,   332,   312,    -1,   333,    -1,   334,   312,    -1,
+     335,   312,    -1,   341,    -1,   109,   332,   110,    -1,   149,
+     331,    -1,   149,   227,   331,    -1,   109,   333,   110,    -1,
+     332,   349,    -1,   109,   333,   110,   349,    -1,   109,   334,
+     110,   350,    -1,   109,   334,   110,    -1,   332,   109,   134,
+     264,   135,   110,    -1,   109,   333,   110,   109,   134,   264,
+     135,   110,    -1,   109,   335,   110,    -1,   319,   312,    -1,
+     337,    -1,   338,   312,    -1,   339,   312,    -1,   149,   336,
+      -1,   149,   227,   336,    -1,   109,   337,   110,    -1,   319,
+     355,    -1,   109,   337,   110,   349,    -1,   109,   338,   110,
+     350,    -1,   109,   338,   110,    -1,   319,   109,   134,   264,
+     135,   110,    -1,   109,   337,   110,   109,   134,   264,   135,
+     110,    -1,   109,   339,   110,    -1,   341,   312,    -1,   342,
+      -1,   343,   312,    -1,   344,   312,    -1,    74,    -1,    75,
+      -1,   149,   340,    -1,   149,   227,   340,    -1,   109,   342,
+     110,    -1,   341,   355,    -1,   109,   342,   110,   355,    -1,
+     341,   109,   134,   264,   135,   110,    -1,   109,   342,   110,
+     109,   134,   264,   135,   110,    -1,   346,    -1,   347,   312,
+      -1,   348,   312,    -1,   149,    -1,   149,   227,    -1,   149,
+     345,    -1,   149,   227,   345,    -1,   109,   346,   110,    -1,
+     349,    -1,   109,   346,   110,   349,    -1,   109,   347,   110,
+     350,    -1,   109,   347,   110,    -1,   109,   134,   264,   135,
+     110,    -1,   109,   346,   110,   109,   134,   264,   135,   110,
+      -1,   109,   348,   110,    -1,   111,   112,    -1,   111,   112,
+     350,    -1,   350,    -1,   111,   134,   164,   135,   112,    -1,
+     111,   134,   117,   135,   112,    -1,   350,   111,   134,   164,
+     135,   112,    -1,   350,   111,   134,   117,   135,   112,    -1,
+     352,    -1,   353,   312,    -1,   354,   312,    -1,   149,    -1,
+     149,   227,    -1,   149,   351,    -1,   149,   227,   351,    -1,
+     109,   352,   110,    -1,   355,    -1,   109,   352,   110,   355,
+      -1,   109,   353,   110,   350,    -1,   109,   353,   110,    -1,
+     109,   134,   264,   135,   110,    -1,   109,   352,   110,   109,
+     134,   264,   135,   110,    -1,   109,   354,   110,    -1,   356,
+      -1,   356,   350,    -1,   350,    -1,   111,   112,    -1,   111,
+     134,   227,   117,   135,   112,    -1,   111,   134,   227,   135,
+     112,    -1,   111,   134,   227,   164,   135,   112,    -1,   111,
+     134,     7,   226,   164,   135,   112,    -1,   111,   134,   227,
+       7,   164,   135,   112,    -1,   358,    -1,   359,   312,    -1,
+     360,   312,    -1,   149,    -1,   149,   227,    -1,   149,   357,
+      -1,   149,   227,   357,    -1,   109,   358,   110,    -1,   349,
+      -1,   109,   358,   110,   349,    -1,   109,   359,   110,   350,
+      -1,   109,   359,   110,    -1,   109,   358,   110,   109,   134,
+     264,   135,   110,    -1,   109,   360,   110,    -1,   362,    -1,
+     370,    -1,   227,   370,    -1,   363,    -1,   364,    -1,   149,
+     225,    -1,   227,   149,   225,    -1,   149,   371,    -1,   227,
+     149,   371,    -1,   149,   361,    -1,   227,   149,   361,    -1,
+     111,   112,   225,    -1,   365,   225,    -1,   111,   112,   350,
+     225,    -1,   365,   350,   225,    -1,   350,   225,    -1,   111,
+     112,   363,    -1,   365,   363,    -1,   111,   112,   350,   363,
+      -1,   365,   350,   363,    -1,   350,   363,    -1,   111,   134,
+     227,   117,   135,   112,    -1,   111,   134,   227,   164,   135,
+     112,    -1,   111,   134,   231,   164,   135,   112,    -1,   111,
+     134,   231,   227,   164,   135,   112,    -1,   370,    -1,   227,
+     370,    -1,   367,    -1,   368,    -1,   369,    -1,   149,   225,
+      -1,   227,   149,   225,    -1,   149,   371,    -1,   227,   149,
+     371,    -1,   149,   366,    -1,   227,   149,   366,    -1,   111,
+     112,   225,    -1,   111,   112,   350,   225,    -1,   350,   225,
+      -1,   111,   112,   368,    -1,   111,   112,   350,   368,    -1,
+     350,   368,    -1,   111,   134,   263,   135,   112,    -1,   111,
+     112,   109,   260,   110,    -1,   370,   109,   134,   260,   135,
+     110,    -1,   218,   109,   134,   260,   135,   110,    -1,    -1,
+     116,    -1,    -1,   131,   164,    -1
 };
 
@@ -1024,77 +1022,77 @@
      323,   324,   328,   329,   333,   334,   338,   339,   350,   352,
      354,   356,   361,   362,   368,   372,   374,   375,   377,   378,
-     380,   382,   384,   393,   394,   400,   401,   402,   407,   409,
-     414,   415,   419,   423,   425,   427,   429,   434,   437,   439,
-     441,   446,   459,   461,   463,   465,   467,   469,   471,   473,
-     475,   477,   479,   486,   487,   493,   494,   495,   496,   500,
-     501,   503,   508,   509,   511,   513,   518,   519,   521,   526,
-     527,   529,   534,   535,   537,   539,   541,   546,   547,   549,
-     554,   555,   560,   561,   566,   567,   572,   573,   578,   579,
-     584,   585,   588,   590,   595,   600,   601,   603,   609,   610,
-     614,   615,   616,   617,   618,   619,   620,   621,   622,   623,
-     624,   630,   632,   634,   636,   641,   642,   647,   648,   654,
-     655,   661,   662,   663,   664,   665,   666,   667,   668,   669,
-     679,   686,   688,   698,   699,   704,   706,   712,   714,   718,
-     719,   724,   729,   732,   734,   736,   746,   748,   759,   760,
-     762,   766,   768,   772,   773,   778,   779,   783,   788,   789,
-     793,   795,   801,   802,   806,   808,   810,   812,   818,   819,
-     823,   825,   830,   832,   834,   839,   841,   846,   848,   852,
-     855,   859,   862,   866,   868,   872,   874,   881,   883,   885,
-     894,   896,   898,   900,   902,   907,   909,   911,   913,   918,
-     931,   932,   937,   939,   944,   948,   950,   952,   954,   956,
-     962,   963,   969,   970,   974,   975,   980,   982,   988,   989,
-     991,   996,   998,  1005,  1007,  1011,  1012,  1017,  1019,  1023,
-    1024,  1028,  1030,  1034,  1035,  1039,  1040,  1044,  1045,  1060,
-    1061,  1062,  1063,  1064,  1068,  1073,  1080,  1090,  1095,  1100,
-    1108,  1113,  1118,  1123,  1128,  1136,  1158,  1163,  1170,  1172,
-    1179,  1184,  1189,  1200,  1205,  1210,  1215,  1220,  1229,  1234,
-    1242,  1243,  1244,  1245,  1251,  1256,  1264,  1265,  1266,  1267,
-    1271,  1272,  1273,  1274,  1279,  1280,  1289,  1290,  1295,  1296,
-    1301,  1303,  1305,  1307,  1309,  1312,  1311,  1323,  1324,  1326,
-    1336,  1337,  1342,  1346,  1348,  1350,  1352,  1354,  1356,  1358,
-    1360,  1365,  1367,  1369,  1371,  1373,  1375,  1377,  1379,  1381,
-    1383,  1385,  1387,  1389,  1395,  1396,  1398,  1400,  1402,  1407,
-    1408,  1414,  1415,  1417,  1419,  1424,  1426,  1428,  1430,  1435,
-    1436,  1438,  1440,  1445,  1446,  1448,  1453,  1454,  1456,  1458,
-    1463,  1465,  1467,  1472,  1473,  1477,  1479,  1485,  1484,  1488,
-    1490,  1495,  1497,  1503,  1504,  1509,  1510,  1512,  1513,  1522,
-    1523,  1525,  1527,  1532,  1534,  1540,  1541,  1543,  1546,  1549,
-    1554,  1555,  1560,  1565,  1569,  1571,  1577,  1576,  1583,  1585,
-    1591,  1592,  1600,  1601,  1605,  1606,  1607,  1609,  1611,  1618,
-    1619,  1621,  1623,  1628,  1629,  1635,  1636,  1640,  1641,  1646,
-    1647,  1648,  1650,  1658,  1659,  1661,  1664,  1666,  1670,  1671,
-    1672,  1674,  1676,  1680,  1685,  1693,  1694,  1703,  1705,  1710,
-    1711,  1712,  1716,  1717,  1718,  1722,  1723,  1724,  1728,  1729,
-    1730,  1735,  1736,  1737,  1738,  1744,  1745,  1747,  1752,  1753,
-    1758,  1759,  1760,  1761,  1762,  1777,  1778,  1783,  1784,  1792,
-    1794,  1796,  1799,  1801,  1803,  1826,  1827,  1829,  1831,  1836,
-    1837,  1839,  1844,  1849,  1850,  1856,  1855,  1859,  1863,  1865,
-    1867,  1873,  1874,  1879,  1884,  1886,  1891,  1893,  1894,  1896,
-    1901,  1903,  1905,  1910,  1912,  1917,  1922,  1930,  1936,  1935,
-    1949,  1950,  1955,  1956,  1960,  1965,  1970,  1978,  1983,  1994,
-    1995,  2006,  2007,  2013,  2014,  2018,  2019,  2020,  2023,  2022,
-    2033,  2042,  2048,  2054,  2063,  2069,  2075,  2081,  2087,  2095,
-    2101,  2109,  2115,  2124,  2125,  2126,  2130,  2134,  2136,  2141,
-    2142,  2146,  2147,  2152,  2158,  2159,  2162,  2164,  2165,  2169,
-    2170,  2171,  2172,  2206,  2208,  2209,  2211,  2216,  2221,  2226,
-    2228,  2230,  2235,  2237,  2239,  2241,  2246,  2248,  2257,  2259,
-    2260,  2265,  2267,  2269,  2274,  2276,  2278,  2283,  2285,  2287,
-    2296,  2297,  2298,  2302,  2304,  2306,  2311,  2313,  2315,  2320,
-    2322,  2324,  2339,  2341,  2342,  2344,  2349,  2350,  2355,  2357,
-    2359,  2364,  2366,  2368,  2370,  2375,  2377,  2379,  2389,  2391,
-    2392,  2394,  2399,  2401,  2403,  2408,  2410,  2412,  2414,  2419,
-    2421,  2423,  2454,  2456,  2457,  2459,  2464,  2469,  2477,  2479,
-    2481,  2486,  2488,  2493,  2495,  2509,  2510,  2512,  2517,  2519,
-    2521,  2523,  2525,  2530,  2531,  2533,  2535,  2540,  2542,  2544,
-    2550,  2552,  2554,  2558,  2560,  2562,  2564,  2578,  2579,  2581,
-    2586,  2588,  2590,  2592,  2594,  2599,  2600,  2602,  2604,  2609,
-    2611,  2613,  2619,  2620,  2622,  2631,  2634,  2636,  2639,  2641,
-    2643,  2656,  2657,  2659,  2664,  2666,  2668,  2670,  2672,  2677,
-    2678,  2680,  2682,  2687,  2689,  2697,  2698,  2699,  2704,  2705,
-    2709,  2711,  2713,  2715,  2717,  2719,  2726,  2728,  2730,  2732,
-    2734,  2736,  2738,  2740,  2742,  2744,  2749,  2751,  2753,  2758,
-    2784,  2785,  2787,  2791,  2792,  2796,  2798,  2800,  2802,  2804,
-    2806,  2813,  2815,  2817,  2819,  2821,  2823,  2828,  2833,  2835,
-    2837,  2855,  2857,  2862,  2863
+     380,   382,   384,   393,   394,   400,   401,   405,   406,   410,
+     414,   416,   418,   420,   425,   428,   430,   432,   437,   450,
+     452,   454,   456,   458,   460,   462,   464,   466,   468,   470,
+     477,   478,   484,   485,   486,   487,   491,   492,   494,   499,
+     500,   502,   504,   509,   510,   512,   517,   518,   520,   525,
+     526,   528,   530,   532,   537,   538,   540,   545,   546,   551,
+     552,   557,   558,   563,   564,   569,   570,   575,   576,   579,
+     581,   586,   591,   592,   594,   600,   601,   605,   606,   607,
+     608,   609,   610,   611,   612,   613,   614,   615,   621,   623,
+     625,   627,   632,   633,   638,   639,   645,   646,   652,   653,
+     654,   655,   656,   657,   658,   659,   660,   670,   677,   679,
+     689,   690,   695,   697,   703,   705,   709,   710,   715,   720,
+     723,   725,   727,   737,   739,   750,   751,   753,   757,   759,
+     763,   764,   769,   770,   774,   779,   780,   784,   786,   792,
+     793,   797,   799,   801,   803,   809,   810,   814,   816,   821,
+     823,   825,   830,   832,   837,   839,   843,   846,   850,   853,
+     857,   859,   863,   865,   872,   874,   876,   885,   887,   889,
+     891,   893,   898,   900,   902,   904,   909,   922,   923,   928,
+     930,   935,   939,   941,   943,   945,   947,   953,   954,   960,
+     961,   965,   966,   971,   973,   979,   980,   982,   987,   989,
+     996,   998,  1002,  1003,  1008,  1010,  1014,  1015,  1019,  1021,
+    1025,  1026,  1030,  1031,  1035,  1036,  1051,  1052,  1053,  1054,
+    1055,  1059,  1064,  1071,  1081,  1086,  1091,  1099,  1104,  1109,
+    1114,  1119,  1127,  1149,  1154,  1161,  1163,  1170,  1175,  1180,
+    1191,  1196,  1201,  1206,  1211,  1220,  1225,  1233,  1234,  1235,
+    1236,  1242,  1247,  1255,  1256,  1257,  1258,  1262,  1263,  1264,
+    1265,  1270,  1271,  1280,  1281,  1286,  1287,  1292,  1294,  1296,
+    1298,  1300,  1303,  1302,  1314,  1315,  1317,  1327,  1328,  1333,
+    1337,  1339,  1341,  1343,  1345,  1347,  1349,  1351,  1356,  1358,
+    1360,  1362,  1364,  1366,  1368,  1370,  1372,  1374,  1376,  1378,
+    1380,  1386,  1387,  1389,  1391,  1393,  1398,  1399,  1405,  1406,
+    1408,  1410,  1415,  1417,  1419,  1421,  1426,  1427,  1429,  1431,
+    1436,  1437,  1439,  1444,  1445,  1447,  1449,  1454,  1456,  1458,
+    1463,  1464,  1468,  1470,  1476,  1475,  1479,  1481,  1486,  1488,
+    1494,  1495,  1500,  1501,  1503,  1504,  1513,  1514,  1516,  1518,
+    1523,  1525,  1531,  1532,  1534,  1537,  1540,  1545,  1546,  1551,
+    1556,  1560,  1562,  1568,  1567,  1574,  1576,  1582,  1583,  1591,
+    1592,  1596,  1597,  1598,  1600,  1602,  1609,  1610,  1612,  1614,
+    1619,  1620,  1626,  1627,  1631,  1632,  1637,  1638,  1639,  1641,
+    1649,  1650,  1652,  1655,  1657,  1661,  1662,  1663,  1665,  1667,
+    1671,  1676,  1684,  1685,  1694,  1696,  1701,  1702,  1703,  1707,
+    1708,  1709,  1713,  1714,  1715,  1719,  1720,  1721,  1726,  1727,
+    1728,  1729,  1735,  1736,  1738,  1743,  1744,  1749,  1750,  1751,
+    1752,  1753,  1768,  1769,  1774,  1775,  1781,  1783,  1786,  1788,
+    1790,  1813,  1814,  1816,  1818,  1823,  1824,  1826,  1831,  1836,
+    1837,  1843,  1842,  1846,  1850,  1852,  1854,  1860,  1861,  1866,
+    1871,  1873,  1878,  1880,  1881,  1883,  1888,  1890,  1892,  1897,
+    1899,  1904,  1909,  1917,  1923,  1922,  1936,  1937,  1942,  1943,
+    1947,  1952,  1957,  1965,  1970,  1981,  1982,  1993,  1994,  2000,
+    2001,  2005,  2006,  2007,  2010,  2009,  2020,  2029,  2035,  2041,
+    2050,  2056,  2062,  2068,  2074,  2082,  2088,  2096,  2102,  2111,
+    2112,  2113,  2117,  2121,  2123,  2128,  2129,  2133,  2134,  2139,
+    2145,  2146,  2149,  2151,  2152,  2156,  2157,  2158,  2159,  2193,
+    2195,  2196,  2198,  2203,  2208,  2213,  2215,  2217,  2222,  2224,
+    2226,  2228,  2233,  2235,  2244,  2246,  2247,  2252,  2254,  2256,
+    2261,  2263,  2265,  2270,  2272,  2274,  2283,  2284,  2285,  2289,
+    2291,  2293,  2298,  2300,  2302,  2307,  2309,  2311,  2326,  2328,
+    2329,  2331,  2336,  2337,  2342,  2344,  2346,  2351,  2353,  2355,
+    2357,  2362,  2364,  2366,  2376,  2378,  2379,  2381,  2386,  2388,
+    2390,  2395,  2397,  2399,  2401,  2406,  2408,  2410,  2441,  2443,
+    2444,  2446,  2451,  2456,  2464,  2466,  2468,  2473,  2475,  2480,
+    2482,  2496,  2497,  2499,  2504,  2506,  2508,  2510,  2512,  2517,
+    2518,  2520,  2522,  2527,  2529,  2531,  2537,  2539,  2541,  2545,
+    2547,  2549,  2551,  2565,  2566,  2568,  2573,  2575,  2577,  2579,
+    2581,  2586,  2587,  2589,  2591,  2596,  2598,  2600,  2606,  2607,
+    2609,  2618,  2621,  2623,  2626,  2628,  2630,  2643,  2644,  2646,
+    2651,  2653,  2655,  2657,  2659,  2664,  2665,  2667,  2669,  2674,
+    2676,  2684,  2685,  2686,  2691,  2692,  2696,  2698,  2700,  2702,
+    2704,  2706,  2713,  2715,  2717,  2719,  2721,  2723,  2725,  2727,
+    2729,  2731,  2736,  2738,  2740,  2745,  2771,  2772,  2774,  2778,
+    2779,  2783,  2785,  2787,  2789,  2791,  2793,  2800,  2802,  2804,
+    2806,  2808,  2810,  2815,  2820,  2822,  2824,  2842,  2844,  2849,
+    2850
 };
 #endif
@@ -1122,7 +1120,7 @@
   "DIVassign", "MODassign", "PLUSassign", "MINUSassign", "LSassign",
   "RSassign", "ANDassign", "ERassign", "ORassign", "ATassign", "THEN",
-  "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "':'", "'*'",
-  "'&'", "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'",
-  "'|'", "'?'", "'='", "';'", "$accept", "push", "pop", "constant",
+  "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "'*'", "'&'",
+  "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'", "'|'",
+  "'?'", "':'", "'='", "';'", "$accept", "push", "pop", "constant",
   "identifier", "no_01_identifier", "no_attr_identifier", "zero_one",
   "string_literal_list", "primary_expression", "postfix_expression",
@@ -1229,7 +1227,7 @@
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,    40,
-      41,    91,    93,    46,   123,   125,    44,    58,    42,    38,
-      43,    45,    33,   126,    47,    37,    60,    62,    94,   124,
-      63,    61,    59
+      41,    91,    93,    46,   123,   125,    44,    42,    38,    43,
+      45,    33,   126,    47,    37,    60,    62,    94,   124,    63,
+      58,    61,    59
 };
 # endif
@@ -1241,77 +1239,77 @@
      138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
      142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
-     143,   143,   143,   144,   144,   145,   145,   145,   145,   145,
-     146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
+     143,   143,   143,   144,   144,   145,   145,   146,   146,   147,
+     147,   147,   147,   147,   148,   148,   148,   148,   148,   148,
      148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
-     148,   148,   148,   149,   149,   150,   150,   150,   150,   151,
-     151,   151,   152,   152,   152,   152,   153,   153,   153,   154,
-     154,   154,   155,   155,   155,   155,   155,   156,   156,   156,
-     157,   157,   158,   158,   159,   159,   160,   160,   161,   161,
-     162,   162,   162,   162,   163,   164,   164,   164,   165,   165,
-     166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
-     166,   167,   167,   167,   167,   168,   168,   169,   169,   170,
-     170,   171,   171,   171,   171,   171,   171,   171,   171,   171,
-     172,   173,   173,   174,   174,   175,   175,   175,   175,   176,
-     176,   177,   178,   178,   178,   178,   178,   178,   179,   179,
-     179,   180,   180,   181,   181,   182,   182,   183,   184,   184,
-     185,   185,   186,   186,   187,   187,   187,   187,   188,   188,
-     189,   189,   190,   190,   190,   191,   191,   192,   192,   192,
-     192,   192,   192,   192,   192,   192,   192,   193,   193,   193,
-     194,   194,   194,   194,   194,   195,   195,   195,   195,   196,
-     197,   197,   197,   197,   197,   198,   198,   198,   198,   198,
-     199,   199,   200,   200,   201,   201,   202,   202,   203,   203,
-     203,   204,   204,   205,   205,   206,   206,   207,   207,   208,
-     208,   209,   209,   210,   210,   211,   211,   212,   212,   213,
-     213,   213,   213,   213,   214,   214,   214,   215,   215,   215,
-     216,   216,   216,   216,   216,   217,   217,   217,   218,   218,
-     219,   219,   219,   220,   220,   220,   220,   220,   221,   221,
-     222,   222,   222,   222,   223,   223,   224,   224,   224,   224,
-     225,   225,   225,   225,   226,   226,   227,   227,   228,   228,
-     229,   229,   229,   229,   229,   230,   229,   231,   231,   231,
-     232,   232,   233,   234,   234,   234,   234,   234,   234,   234,
-     234,   235,   235,   235,   235,   235,   235,   235,   235,   235,
-     235,   235,   235,   235,   236,   236,   236,   236,   236,   237,
-     237,   238,   238,   238,   238,   239,   239,   239,   239,   240,
-     240,   240,   240,   241,   241,   241,   242,   242,   242,   242,
-     243,   243,   243,   244,   244,   245,   245,   246,   245,   245,
-     245,   247,   247,   248,   248,   249,   249,   249,   249,   250,
-     250,   250,   250,   251,   251,   252,   252,   252,   252,   252,
-     253,   253,   254,   255,   256,   256,   257,   256,   258,   258,
-     259,   259,   260,   260,   261,   261,   261,   261,   261,   262,
-     262,   262,   262,   263,   263,   264,   264,   265,   265,   266,
-     266,   266,   266,   267,   267,   267,   267,   267,   268,   268,
-     268,   268,   268,   269,   269,   270,   270,   271,   271,   272,
-     272,   272,   273,   273,   273,   274,   274,   274,   275,   275,
-     275,   276,   276,   276,   276,   277,   277,   277,   278,   278,
-     279,   279,   279,   279,   279,   280,   280,   281,   281,   282,
-     282,   282,   282,   282,   282,   283,   283,   283,   283,   284,
-     284,   284,   285,   286,   286,   288,   287,   287,   289,   289,
-     289,   290,   290,   291,   291,   291,   292,   292,   292,   292,
-     293,   293,   293,   294,   294,   295,   295,   296,   297,   296,
-     298,   298,   299,   299,   300,   300,   300,   301,   301,   302,
-     302,   303,   303,   304,   304,   305,   305,   305,   306,   305,
-     305,   307,   307,   307,   308,   308,   308,   308,   308,   308,
-     308,   308,   308,   309,   309,   309,   310,   311,   311,   312,
-     312,   313,   313,   314,   315,   315,   316,   316,   316,   317,
-     317,   317,   317,   318,   318,   318,   318,   319,   319,   320,
-     320,   320,   321,   321,   321,   321,   322,   322,   323,   323,
-     323,   324,   324,   324,   325,   325,   325,   326,   326,   326,
-     327,   327,   327,   328,   328,   328,   329,   329,   329,   330,
-     330,   330,   331,   331,   331,   331,   332,   332,   333,   333,
-     333,   334,   334,   334,   334,   335,   335,   335,   336,   336,
-     336,   336,   337,   337,   337,   338,   338,   338,   338,   339,
-     339,   339,   340,   340,   340,   340,   341,   341,   342,   342,
-     342,   343,   343,   344,   344,   345,   345,   345,   346,   346,
-     346,   346,   346,   347,   347,   347,   347,   348,   348,   348,
-     349,   349,   349,   350,   350,   350,   350,   351,   351,   351,
-     352,   352,   352,   352,   352,   353,   353,   353,   353,   354,
-     354,   354,   355,   355,   355,   356,   356,   356,   356,   356,
-     356,   357,   357,   357,   358,   358,   358,   358,   358,   359,
-     359,   359,   359,   360,   360,   361,   361,   361,   362,   362,
-     363,   363,   363,   363,   363,   363,   364,   364,   364,   364,
-     364,   364,   364,   364,   364,   364,   365,   365,   365,   365,
-     366,   366,   366,   367,   367,   368,   368,   368,   368,   368,
-     368,   369,   369,   369,   369,   369,   369,   370,   371,   371,
-     371,   372,   372,   373,   373
+     149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
+     152,   152,   152,   153,   153,   153,   154,   154,   154,   155,
+     155,   155,   155,   155,   156,   156,   156,   157,   157,   158,
+     158,   159,   159,   160,   160,   161,   161,   162,   162,   162,
+     162,   163,   164,   164,   164,   165,   165,   166,   166,   166,
+     166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
+     167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
+     171,   171,   171,   171,   171,   171,   171,   172,   173,   173,
+     174,   174,   175,   175,   175,   175,   176,   176,   177,   178,
+     178,   178,   178,   178,   178,   179,   179,   179,   180,   180,
+     181,   181,   182,   182,   183,   184,   184,   185,   185,   186,
+     186,   187,   187,   187,   187,   188,   188,   189,   189,   190,
+     190,   190,   191,   191,   192,   192,   192,   192,   192,   192,
+     192,   192,   192,   192,   193,   193,   193,   194,   194,   194,
+     194,   194,   195,   195,   195,   195,   196,   197,   197,   197,
+     197,   197,   198,   198,   198,   198,   198,   199,   199,   200,
+     200,   201,   201,   202,   202,   203,   203,   203,   204,   204,
+     205,   205,   206,   206,   207,   207,   208,   208,   209,   209,
+     210,   210,   211,   211,   212,   212,   213,   213,   213,   213,
+     213,   214,   214,   214,   215,   215,   215,   216,   216,   216,
+     216,   216,   217,   217,   217,   218,   218,   219,   219,   219,
+     220,   220,   220,   220,   220,   221,   221,   222,   222,   222,
+     222,   223,   223,   224,   224,   224,   224,   225,   225,   225,
+     225,   226,   226,   227,   227,   228,   228,   229,   229,   229,
+     229,   229,   230,   229,   231,   231,   231,   232,   232,   233,
+     234,   234,   234,   234,   234,   234,   234,   234,   235,   235,
+     235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
+     235,   236,   236,   236,   236,   236,   237,   237,   238,   238,
+     238,   238,   239,   239,   239,   239,   240,   240,   240,   240,
+     241,   241,   241,   242,   242,   242,   242,   243,   243,   243,
+     244,   244,   245,   245,   246,   245,   245,   245,   247,   247,
+     248,   248,   249,   249,   249,   249,   250,   250,   250,   250,
+     251,   251,   252,   252,   252,   252,   252,   253,   253,   254,
+     255,   256,   256,   257,   256,   258,   258,   259,   259,   260,
+     260,   261,   261,   261,   261,   261,   262,   262,   262,   262,
+     263,   263,   264,   264,   265,   265,   266,   266,   266,   266,
+     267,   267,   267,   267,   267,   268,   268,   268,   268,   268,
+     269,   269,   270,   270,   271,   271,   272,   272,   272,   273,
+     273,   273,   274,   274,   274,   275,   275,   275,   276,   276,
+     276,   276,   277,   277,   277,   278,   278,   279,   279,   279,
+     279,   279,   280,   280,   281,   281,   282,   282,   282,   282,
+     282,   283,   283,   283,   283,   284,   284,   284,   285,   286,
+     286,   288,   287,   287,   289,   289,   289,   290,   290,   291,
+     291,   291,   292,   292,   292,   292,   293,   293,   293,   294,
+     294,   295,   295,   296,   297,   296,   298,   298,   299,   299,
+     300,   300,   300,   301,   301,   302,   302,   303,   303,   304,
+     304,   305,   305,   305,   306,   305,   305,   307,   307,   307,
+     308,   308,   308,   308,   308,   308,   308,   308,   308,   309,
+     309,   309,   310,   311,   311,   312,   312,   313,   313,   314,
+     315,   315,   316,   316,   316,   317,   317,   317,   317,   318,
+     318,   318,   318,   319,   319,   320,   320,   320,   321,   321,
+     321,   321,   322,   322,   323,   323,   323,   324,   324,   324,
+     325,   325,   325,   326,   326,   326,   327,   327,   327,   328,
+     328,   328,   329,   329,   329,   330,   330,   330,   331,   331,
+     331,   331,   332,   332,   333,   333,   333,   334,   334,   334,
+     334,   335,   335,   335,   336,   336,   336,   336,   337,   337,
+     337,   338,   338,   338,   338,   339,   339,   339,   340,   340,
+     340,   340,   341,   341,   342,   342,   342,   343,   343,   344,
+     344,   345,   345,   345,   346,   346,   346,   346,   346,   347,
+     347,   347,   347,   348,   348,   348,   349,   349,   349,   350,
+     350,   350,   350,   351,   351,   351,   352,   352,   352,   352,
+     352,   353,   353,   353,   353,   354,   354,   354,   355,   355,
+     355,   356,   356,   356,   356,   356,   356,   357,   357,   357,
+     358,   358,   358,   358,   358,   359,   359,   359,   359,   360,
+     360,   361,   361,   361,   362,   362,   363,   363,   363,   363,
+     363,   363,   364,   364,   364,   364,   364,   364,   364,   364,
+     364,   364,   365,   365,   365,   365,   366,   366,   366,   367,
+     367,   368,   368,   368,   368,   368,   368,   369,   369,   369,
+     369,   369,   369,   370,   371,   371,   371,   372,   372,   373,
+     373
 };
 
@@ -1322,77 +1320,77 @@
        1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
        3,     3,     1,     6,     4,     3,     7,     3,     7,     2,
-       2,     7,     4,     1,     3,     0,     1,     3,     7,     9,
-       1,     3,     1,     3,     7,     3,     7,     1,     1,     1,
-       2,     2,     2,     2,     2,     2,     4,     6,     1,     4,
-       4,     2,     4,     1,     1,     1,     1,     1,     1,     1,
-       4,     4,     1,     3,     3,     3,     1,     3,     3,     1,
-       3,     3,     1,     3,     3,     3,     3,     1,     3,     3,
-       1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
-       1,     5,     4,     5,     1,     1,     3,     2,     0,     1,
+       2,     7,     4,     1,     3,     0,     1,     1,     3,     1,
+       3,     7,     3,     7,     1,     1,     1,     2,     2,     2,
+       2,     2,     2,     4,     2,     4,     6,     1,     4,     4,
+       1,     1,     1,     1,     1,     1,     1,     4,     4,     1,
+       3,     3,     3,     1,     3,     3,     1,     3,     3,     1,
+       3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
+       3,     1,     3,     1,     3,     1,     3,     1,     5,     4,
+       5,     1,     1,     3,     2,     0,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     5,
+       6,     7,     1,     3,     1,     3,     0,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     6,     4,     2,     7,
+       1,     3,     1,     2,     1,     2,     1,     2,     2,     5,
+       7,     5,     9,     5,     9,     1,     3,     1,     1,     3,
+       3,     2,     1,     2,     2,     0,     1,     2,     3,     0,
+       1,     2,     3,     3,     4,     0,     1,     1,     2,     5,
+       7,     6,     6,     4,     3,     4,     2,     3,     2,     3,
+       3,     3,     3,     5,     3,     3,     4,     1,     5,     6,
+       5,     6,     9,    10,     9,    10,     2,     1,     2,     2,
+       2,     1,     6,     8,    10,    12,    14,     0,     1,     0,
+       1,     1,     3,     4,     7,     0,     1,     3,     1,     3,
+       1,     1,     1,     3,     1,     1,     1,     3,     0,     1,
+       3,     4,     1,     3,     1,     1,     3,     3,     3,     3,
+       3,     2,     3,     6,     3,     3,     4,     1,     2,     2,
+       3,     5,     8,     7,     7,     5,     9,     2,     2,     5,
+       3,     5,     4,     3,     4,     4,     7,     3,     3,     3,
+       3,     4,     6,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     1,     1,     2,     1,     1,     1,     1,     1,
+       1,     1,     0,     5,     1,     2,     3,     1,     2,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     5,     6,     7,     1,     3,     1,     3,     0,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     6,
-       4,     2,     7,     1,     3,     1,     2,     1,     2,     1,
-       2,     2,     5,     7,     5,     9,     5,     9,     1,     3,
-       1,     1,     3,     3,     2,     1,     2,     2,     0,     1,
-       2,     3,     0,     1,     2,     3,     3,     4,     0,     1,
-       1,     2,     5,     7,     6,     6,     4,     3,     4,     2,
-       3,     2,     3,     3,     3,     3,     5,     3,     3,     4,
-       1,     5,     6,     5,     6,     9,    10,     9,    10,     2,
-       1,     2,     2,     2,     1,     6,     8,    10,    12,    14,
-       0,     1,     0,     1,     1,     3,     4,     7,     0,     1,
-       3,     1,     3,     1,     1,     1,     3,     1,     1,     1,
-       3,     0,     1,     3,     4,     1,     3,     1,     1,     3,
-       3,     3,     3,     3,     2,     3,     6,     3,     3,     4,
-       1,     2,     2,     3,     5,     8,     7,     7,     5,     9,
-       2,     2,     5,     3,     5,     4,     3,     4,     4,     7,
-       3,     3,     3,     3,     4,     6,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     1,     1,     2,     1,     1,
-       1,     1,     1,     1,     1,     0,     5,     1,     2,     3,
-       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     2,     3,     3,     1,
-       3,     1,     2,     2,     2,     4,     4,     4,     4,     1,
-       2,     2,     3,     1,     2,     2,     1,     2,     2,     3,
-       1,     2,     2,     1,     1,     4,     2,     0,     6,     7,
-       2,     2,     2,     0,     2,     2,     3,     2,     3,     1,
-       2,     3,     2,     2,     4,     0,     1,     2,     2,     1,
-       0,     1,     2,     2,     5,     2,     0,     7,     2,     4,
-       0,     2,     0,     1,     1,     1,     5,     5,     5,     1,
-       5,     5,     9,     1,     5,     0,     1,     1,     5,     1,
-       1,     5,     5,     1,     3,     3,     4,     1,     1,     1,
-       1,     2,     1,     3,     3,     1,     2,     1,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       2,     1,     1,     1,     2,     0,     2,     2,     1,     4,
-       0,     1,     2,     3,     4,     2,     2,     1,     2,     1,
-       2,     5,     5,     7,     6,     1,     2,     2,     3,     1,
-       2,     2,     4,     2,     4,     0,     4,     2,     1,     1,
-       1,     0,     2,     5,     5,    13,     1,     1,     3,     3,
-       2,     3,     3,     2,     4,     1,     6,     9,     0,    11,
-       1,     3,     3,     3,     1,     1,     5,     2,     5,     0,
-       1,     1,     3,     0,     1,     1,     1,     1,     0,     6,
-       2,     1,     2,     4,     2,     3,     3,     3,     4,     5,
-       5,     5,     6,     1,     1,     1,     3,     0,     5,     0,
-       1,     1,     2,     6,     1,     3,     0,     1,     4,     1,
-       1,     1,     1,     2,     1,     2,     2,     1,     3,     2,
-       3,     3,     2,     4,     4,     3,     8,     3,     2,     1,
-       2,     6,     8,     3,     2,     3,     3,     4,     4,     3,
-       1,     1,     1,     4,     6,     3,     2,     3,     3,     4,
-       4,     3,     2,     1,     2,     2,     1,     3,     2,     3,
+       1,     1,     2,     2,     3,     3,     1,     3,     1,     2,
+       2,     2,     4,     4,     4,     4,     1,     2,     2,     3,
+       1,     2,     2,     1,     2,     2,     3,     1,     2,     2,
+       1,     1,     4,     2,     0,     6,     7,     2,     2,     2,
+       0,     2,     2,     3,     2,     3,     1,     2,     3,     2,
+       2,     4,     0,     1,     2,     2,     1,     0,     1,     2,
+       2,     5,     2,     0,     7,     2,     4,     0,     2,     0,
+       1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
+       1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
+       1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
+       3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
+       1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
+       3,     4,     2,     2,     1,     2,     2,     5,     5,     7,
+       6,     1,     2,     2,     3,     1,     2,     2,     4,     2,
+       4,     0,     4,     2,     1,     1,     1,     0,     2,     5,
+       5,    13,     1,     1,     3,     3,     2,     3,     3,     2,
+       4,     1,     6,     9,     0,    11,     1,     3,     3,     3,
+       1,     1,     5,     2,     5,     0,     1,     1,     3,     0,
+       1,     1,     1,     1,     0,     6,     2,     1,     2,     4,
+       2,     3,     3,     3,     4,     5,     5,     5,     6,     1,
+       1,     1,     3,     0,     5,     0,     1,     1,     2,     6,
+       1,     3,     0,     1,     4,     1,     1,     1,     1,     2,
+       1,     2,     2,     1,     3,     2,     3,     3,     2,     4,
+       4,     3,     8,     3,     2,     1,     2,     6,     8,     3,
+       2,     3,     3,     4,     4,     3,     1,     1,     1,     4,
+       6,     3,     2,     3,     3,     4,     4,     3,     2,     1,
+       2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
+       3,     6,     8,     3,     2,     1,     2,     2,     2,     3,
        3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
-       2,     2,     2,     3,     3,     2,     4,     4,     3,     6,
-       8,     3,     2,     1,     2,     2,     1,     1,     2,     3,
-       3,     2,     4,     6,     8,     1,     2,     2,     1,     2,
-       2,     3,     3,     1,     4,     4,     3,     5,     8,     3,
-       2,     3,     1,     5,     5,     6,     6,     1,     2,     2,
-       1,     2,     2,     3,     3,     1,     4,     4,     3,     5,
-       8,     3,     1,     2,     1,     2,     6,     5,     6,     7,
-       7,     1,     2,     2,     1,     2,     2,     3,     3,     1,
-       4,     4,     3,     8,     3,     1,     1,     2,     1,     1,
-       2,     3,     2,     3,     2,     3,     3,     2,     4,     3,
-       2,     3,     2,     4,     3,     2,     6,     6,     6,     7,
-       1,     2,     1,     1,     1,     2,     3,     2,     3,     2,
-       3,     3,     4,     2,     3,     4,     2,     5,     5,     6,
-       6,     0,     1,     0,     2
+       2,     2,     1,     1,     2,     3,     3,     2,     4,     6,
+       8,     1,     2,     2,     1,     2,     2,     3,     3,     1,
+       4,     4,     3,     5,     8,     3,     2,     3,     1,     5,
+       5,     6,     6,     1,     2,     2,     1,     2,     2,     3,
+       3,     1,     4,     4,     3,     5,     8,     3,     1,     2,
+       1,     2,     6,     5,     6,     7,     7,     1,     2,     2,
+       1,     2,     2,     3,     3,     1,     4,     4,     3,     8,
+       3,     1,     1,     2,     1,     1,     2,     3,     2,     3,
+       2,     3,     3,     2,     4,     3,     2,     3,     2,     4,
+       3,     2,     6,     6,     6,     7,     1,     2,     1,     1,
+       1,     2,     3,     2,     3,     2,     3,     3,     4,     2,
+       3,     4,     2,     5,     5,     6,     6,     0,     1,     0,
+       2
 };
 
@@ -1402,162 +1400,160 @@
 static const yytype_uint16 yydefact[] =
 {
-     294,   294,   315,   313,   316,   314,   317,   318,   300,   302,
-     301,     0,   303,   329,   321,   326,   324,   325,   323,   322,
-     327,   328,   333,   330,   331,   332,   549,   549,   549,     0,
-       0,     0,   294,   220,   304,   319,   320,     7,   360,     0,
-       8,    14,    15,     0,     2,    63,    64,   567,     9,   294,
-     527,   525,   247,     3,   455,     3,   260,     0,     3,     3,
-       3,   248,     3,     0,     0,     0,   295,   296,   298,   294,
-     307,   310,   312,   341,   286,   334,   339,   287,   349,   288,
-     356,   353,   363,     0,     0,   364,   289,   475,   479,     3,
-       3,     0,     2,   521,   526,   531,   299,     0,     0,   549,
-     579,   549,     2,   590,   591,   592,   294,     0,   733,   734,
-       0,    12,     0,    13,   294,   270,   271,     0,   295,   290,
-     291,   292,   293,   528,   305,   393,   550,   551,   371,   372,
-      12,   446,   447,    11,   442,   445,     0,   505,   500,   491,
-     446,   447,     0,     0,   530,   221,     0,   294,     0,     0,
-       0,     0,     0,     0,     0,     0,   294,   294,     2,     0,
-     735,   295,   584,   596,   739,   732,   730,   737,     0,     0,
-       0,   254,     2,     0,   534,   440,   441,   439,     0,     0,
-       0,     0,   549,     0,   636,   637,     0,     0,   547,   543,
-     549,   564,   549,   549,   545,     2,   544,   549,   603,   549,
-     549,   606,     0,     0,     0,   294,   294,   313,   361,     2,
-     294,   261,   297,   308,   342,   354,   480,     0,     2,     0,
-     455,   262,   295,   335,   350,   357,   476,     0,     2,     0,
-     311,   336,   343,   344,     0,   351,   355,   358,   362,   447,
-     294,   373,   366,   370,     0,   395,   477,   481,     0,     0,
-       0,     1,   294,     2,   532,   578,   580,   294,     2,   743,
-     295,   746,   547,   547,     0,   295,     0,     0,   273,   549,
-     545,     2,   294,     0,     0,   294,   552,     2,   503,     2,
-     556,     0,     0,     0,     0,     0,     0,    18,    58,     4,
-       5,     6,    16,     0,     0,   294,     2,    65,    66,    67,
-      68,    48,    19,    49,    22,    47,    69,   294,     0,    72,
-      76,    79,    82,    87,    90,    92,    94,    96,    98,   100,
-     105,   497,   753,   453,   496,     0,   451,   452,     0,   568,
-     583,   586,   589,   595,   598,   601,   360,     0,     2,   741,
-       0,   294,   744,     2,    63,   294,     3,   427,     0,   435,
-     295,   294,   307,   334,   287,   349,   356,     3,     3,   409,
-     413,   423,   428,   475,   294,   429,   708,   709,   294,   430,
-     432,   294,     2,   585,   597,   731,     2,     2,   249,     2,
-     460,     0,   458,   457,   456,   141,     2,     2,   251,     2,
-       2,   250,     2,   281,     2,   282,     0,   280,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   569,   608,     0,
-     455,     2,   563,   572,   662,   565,   566,   535,   294,     2,
-     602,   611,   604,   605,     0,   276,   294,   294,   340,   295,
-       0,   295,     0,   294,   736,   740,   738,   536,   294,   547,
-     255,   263,   309,     0,     2,   537,   294,   501,   337,   338,
-     283,   352,   359,     0,   294,     0,   751,   400,     0,   478,
-     502,   252,   253,   522,   294,   437,     0,   294,   237,     0,
-       2,   239,     0,   295,     0,   257,     2,   258,   278,     0,
-       0,     2,   294,   547,   294,   488,   490,   489,     0,     0,
-     753,     0,   294,     0,   294,   492,   294,   562,   560,   561,
-     559,     0,   554,   557,     0,     0,   294,    55,   294,    69,
-      50,   294,    61,   294,   294,    53,    54,     2,   127,     0,
-       0,   449,     0,   448,   730,   121,   294,    17,     0,    29,
-      30,    35,     2,     0,    35,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   110,     0,    51,    52,     0,
+     291,   291,   312,   310,   313,   311,   314,   315,   297,   299,
+     298,     0,   300,   326,   318,   323,   321,   322,   320,   319,
+     324,   325,   330,   327,   328,   329,   545,   545,   545,     0,
+       0,     0,   291,   217,   301,   316,   317,     7,   357,     0,
+       8,    14,    15,     0,     2,    60,    61,   563,     9,   291,
+     523,   521,   244,     3,   452,     3,   257,     0,     3,     3,
+       3,   245,     3,     0,     0,     0,   292,   293,   295,   291,
+     304,   307,   309,   338,   283,   331,   336,   284,   346,   285,
+     353,   350,   360,     0,     0,   361,   286,   471,   475,     3,
+       3,     0,     2,   517,   522,   527,   296,     0,     0,   545,
+     575,   545,     2,   586,   587,   588,   291,     0,   729,   730,
+       0,    12,     0,    13,   291,   267,   268,     0,   292,   287,
+     288,   289,   290,   524,   302,   390,   546,   547,   368,   369,
+      12,   443,   444,    11,   439,   442,     0,   501,   496,   487,
+     443,   444,     0,     0,   526,   218,     0,   291,     0,     0,
+       0,     0,     0,     0,     0,     0,   291,   291,     2,     0,
+     731,   292,   580,   592,   735,   728,   726,   733,     0,     0,
+       0,   251,     2,     0,   530,   437,   438,   436,     0,     0,
+       0,     0,   545,     0,   632,   633,     0,     0,   543,   539,
+     545,   560,   545,   545,   541,     2,   540,   545,   599,   545,
+     545,   602,     0,     0,     0,   291,   291,   310,   358,     2,
+     291,   258,   294,   305,   339,   351,   476,     0,     2,     0,
+     452,   259,   292,   332,   347,   354,   472,     0,     2,     0,
+     308,   333,   340,   341,     0,   348,   352,   355,   359,   444,
+     291,   370,   363,   367,     0,   392,   473,   477,     0,     0,
+       0,     1,   291,     2,   528,   574,   576,   291,     2,   739,
+     292,   742,   543,   543,     0,   292,     0,     0,   270,   545,
+     541,     2,   291,     0,     0,   291,   548,     2,   499,     2,
+     552,     0,     0,     0,     0,     0,     0,    18,    57,     4,
+       5,     6,    16,     0,     0,   291,     2,    62,    63,    64,
+      65,    45,    19,    46,    22,    44,    66,   291,     0,    69,
+      73,    76,    79,    84,    87,    89,    91,    93,    95,    97,
+     102,   493,   749,   450,   492,     0,   448,   449,     0,   564,
+     579,   582,   585,   591,   594,   597,   357,     0,     2,   737,
+       0,   291,   740,     2,    60,   291,     3,   424,     0,   432,
+     292,   291,   304,   331,   284,   346,   353,     3,     3,   406,
+     410,   420,   425,   471,   291,   426,   704,   705,   291,   427,
+     429,   291,     2,   581,   593,   727,     2,     2,   246,     2,
+     457,     0,   455,   454,   453,   138,     2,     2,   248,     2,
+       2,   247,     2,   278,     2,   279,     0,   277,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   565,   604,     0,
+     452,     2,   559,   568,   658,   561,   562,   531,   291,     2,
+     598,   607,   600,   601,     0,   273,   291,   291,   337,   292,
+       0,   292,     0,   291,   732,   736,   734,   532,   291,   543,
+     252,   260,   306,     0,     2,   533,   291,   497,   334,   335,
+     280,   349,   356,     0,   291,     0,   747,   397,     0,   474,
+     498,   249,   250,   518,   291,   434,     0,   291,   234,     0,
+       2,   236,     0,   292,     0,   254,     2,   255,   275,     0,
+       0,     2,   291,   543,   291,   484,   486,   485,     0,     0,
+     749,     0,   291,     0,   291,   488,   291,   558,   556,   557,
+     555,     0,   550,   553,     0,     0,   291,    52,   291,    66,
+      47,   291,    54,   291,   291,    50,    51,     2,   124,     0,
+       0,   446,     0,   445,   726,   118,   291,    17,     0,    29,
+      30,    35,     2,     0,    35,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   107,     0,    48,    49,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   107,
-       2,   648,   454,   645,   549,   549,   653,   482,   294,     2,
-     587,   588,     0,   599,   600,     0,     2,   742,   745,   121,
-     294,     0,     2,   710,   295,   714,   705,   706,   712,     0,
-       2,     2,   670,   549,   753,   619,   549,   549,   753,   549,
-     633,   549,   549,   684,   436,   667,   549,   549,   675,   682,
-     294,   431,   295,     0,     0,   294,   720,   295,   725,   753,
-     717,   294,   722,   753,   294,   294,   294,     0,   121,     0,
-      18,     5,     2,     0,    19,     0,   461,   751,     0,     0,
-     467,   241,     0,   294,     0,     0,     0,   547,   571,   575,
-     577,   607,   610,   614,   617,   570,   609,     0,   284,   660,
-       0,   294,   277,     0,     0,     0,     0,   275,     2,     0,
-     259,   538,   294,     0,     0,   294,     2,   365,   385,   374,
-       0,     0,   379,   373,   752,     0,     0,   398,     0,   295,
-       3,   416,     3,   420,   419,   593,     0,   533,   294,    63,
-       3,   294,   435,   295,     3,   429,   430,     2,     0,     0,
-       0,   487,   306,   294,   483,   485,     3,     2,     2,     0,
-     504,     3,     0,   556,   129,     0,     0,   222,     0,     0,
-       0,     2,     0,     0,    36,     0,     0,   121,   294,    20,
-       0,    21,     0,   694,   699,   450,   691,   549,   549,     0,
-     108,     3,     2,    27,     2,     0,    33,     0,     2,    25,
-       0,   106,    73,    74,    75,    77,    78,    80,    81,    85,
-      86,    83,    84,    88,    89,    91,    93,    95,    97,    99,
-       0,     0,   754,   294,     0,     0,     0,   649,   650,   646,
-     647,   499,   498,   294,     0,   294,   716,   294,   721,   295,
-     294,   664,   294,   294,   707,   663,     2,   294,     0,     0,
-       0,     0,     0,     0,     0,     0,   685,     0,   671,   622,
-     638,   672,     2,   618,   625,   433,   620,   621,   434,     2,
-     632,   641,   634,   635,   668,   669,   683,   711,   715,   713,
-     753,   268,     2,   747,     2,   424,   719,   724,   425,     0,
-     403,     3,     3,     3,     3,   455,     3,     0,     2,   470,
-     466,   752,     0,   462,   469,     2,   465,   468,     0,   294,
-     242,   264,     3,   272,   274,     0,   455,     2,   573,   574,
-       2,   612,   613,     0,   661,   539,     3,   346,   345,   348,
-     347,   294,   540,     0,   541,   373,     0,     0,   294,   294,
-       0,     0,   694,   383,   386,   390,   549,   390,   389,   382,
-     375,   549,   377,   380,   294,   400,   394,   104,   401,   751,
-       0,     0,   438,   240,     0,     0,     3,     2,   670,   431,
-       0,   529,     0,   753,   491,     0,   294,   294,   294,     0,
-     553,   555,   130,     0,     0,   215,     0,     0,     0,   223,
-     224,    56,     0,    62,   294,     0,    60,    59,     0,     2,
-     128,     0,     0,     0,   695,   696,   692,   693,   460,    70,
-      71,   109,   125,     3,   108,     0,     0,     0,    24,    35,
-       3,     0,    32,   102,     0,     3,   652,   656,   659,   651,
-       3,   594,     3,   718,   723,     2,    63,   294,     3,     3,
-     295,     0,     3,   624,   628,   631,   640,   674,   678,   681,
-     294,     3,   623,   639,   673,   294,   294,   426,   294,   294,
-     748,     0,     0,     0,     0,   256,     0,   104,     0,     3,
-       3,     0,   463,     0,   459,     0,     0,   245,   294,     0,
-       0,   129,     0,     0,     0,     0,     0,   129,     0,     0,
-     108,   108,    18,     2,     0,     0,     3,   131,   132,     2,
-     143,   133,   134,   135,   136,   137,   138,   145,   147,     0,
-       0,     0,   285,   294,   294,   549,     0,   542,   294,   376,
-     378,     0,   392,   695,   387,   391,   388,   381,   385,   368,
-     399,     0,   581,     2,   666,   665,     0,   671,     2,   484,
-     486,   506,     3,   514,   515,     0,     2,   510,     3,     3,
-       0,     0,   558,   222,     0,     0,     0,   222,     0,     0,
-       3,    37,   121,   698,   702,   704,   697,   751,   108,     0,
-       3,   663,    42,     3,    40,     3,    34,     0,     3,   101,
-     103,     0,     2,   654,   655,     0,     0,   294,     0,     0,
-       0,     3,   640,     0,     2,   626,   627,     2,   642,     2,
-     676,   677,     0,     0,    63,     0,     3,     3,     3,     3,
-     411,   410,   414,     2,     2,   750,   749,   122,     0,     0,
-       0,     0,     3,   464,     3,     0,   243,   146,     3,   295,
-     294,     0,     0,     0,     0,     2,     0,   191,     0,   189,
-       0,     0,     0,     0,     0,     0,     0,   549,   121,     0,
-     151,   148,   294,     0,     0,   267,   279,     3,     3,   548,
-     615,   369,   384,   397,   294,   266,   294,     0,   517,   494,
-     294,     0,     0,   493,   508,     0,     0,     0,   216,     0,
-     225,    57,   108,     0,     2,   700,   701,     0,   126,   123,
-       0,     0,     0,     0,     0,     0,    23,     0,   657,   294,
-     582,   265,   726,   727,   728,     0,   679,   294,   294,   294,
-       3,     3,     0,   687,     0,     0,     0,     0,   294,   294,
-       3,   546,   471,   472,     0,     0,   246,   295,     0,     0,
-       0,     0,   294,   192,   190,   187,     0,   193,     0,     0,
-       0,     0,   197,   200,   198,   194,     0,   195,   129,    35,
-     144,   142,   244,     0,     0,   418,   422,   421,     0,   511,
-       2,   512,     2,   513,   507,   294,   228,     0,   226,     0,
-     228,     3,   663,   294,    31,   124,     2,    45,     2,    43,
-      41,    28,   122,    26,     3,   729,     3,     3,     3,     0,
-       0,   686,   688,   629,   643,   269,     2,   408,     3,   407,
-       0,   474,   471,   129,     0,     0,   129,     3,     0,   129,
-     188,     0,     2,     2,   209,   199,     0,     0,     0,   140,
-       0,   576,   616,     2,     0,     0,     2,   229,     0,     0,
-     217,     0,     0,     0,     3,     0,     0,     0,     0,     0,
-       0,   689,   690,   294,     0,   473,   152,     0,     0,     2,
-     165,   129,   154,     0,   182,     0,   129,     0,     2,   156,
-       0,     2,     0,     2,     2,     2,   196,    32,   294,   516,
-     518,   509,     0,     0,     0,     0,   124,    38,     0,     3,
-       3,   658,   630,   644,   680,   412,   129,   158,   161,     0,
-     160,   164,     3,   167,   166,     0,   129,   184,   129,     3,
-       0,   294,     0,   294,     0,     2,     0,     2,   139,     2,
-     230,   231,     0,   227,   218,     0,   703,     0,     0,   153,
-       0,     0,   163,   233,   168,     2,   235,   183,     0,   186,
-     172,   201,     3,   210,   214,   203,     3,     0,   294,     0,
-     294,     0,     0,     0,    39,    46,    44,   159,   162,   129,
-       0,   169,   294,   129,   129,     0,   173,     0,     0,   694,
-     211,   212,   213,     0,   202,     3,   204,     3,   294,   219,
-     232,   149,   170,   155,   129,   236,   185,   180,   178,   174,
-     157,   129,     0,   695,     0,     0,     0,     0,   150,   171,
-     181,   175,   179,   178,   176,     3,     3,     0,     0,   495,
-     177,   205,   207,     3,     3,   206,   208
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   104,
+       2,   644,   451,   641,   545,   545,   649,   478,   291,     2,
+     583,   584,     0,   595,   596,     0,     2,   738,   741,   118,
+     291,     0,     2,   706,   292,   710,   701,   702,   708,     0,
+       2,     2,   666,   545,   749,   615,   545,   545,   749,   545,
+     629,   545,   545,   680,   433,   663,   545,   545,   671,   678,
+     291,   428,   292,     0,     0,   291,   716,   292,   721,   749,
+     713,   291,   718,   749,   291,   291,   291,     0,   118,     0,
+      18,     2,     0,    19,     0,   458,   747,     0,     0,   464,
+     238,     0,   291,     0,     0,     0,   543,   567,   571,   573,
+     603,   606,   610,   613,   566,   605,     0,   281,   656,     0,
+     291,   274,     0,     0,     0,     0,   272,     2,     0,   256,
+     534,   291,     0,     0,   291,     2,   362,   382,   371,     0,
+       0,   376,   370,   748,     0,     0,   395,     0,   292,     3,
+     413,     3,   417,   416,   589,     0,   529,   291,    60,     3,
+     291,   432,   292,     3,   426,   427,     2,     0,     0,     0,
+     483,   303,   291,   479,   481,     3,     2,     2,     0,   500,
+       3,     0,   552,   126,     0,     0,   219,     0,     0,     0,
+       0,    36,     0,     0,   118,   291,    20,     0,    21,     0,
+     690,   695,   447,   687,   545,   545,     0,   105,     3,     2,
+      27,     0,    33,     0,     2,    25,     0,   103,    70,    71,
+      72,    74,    75,    77,    78,    82,    83,    80,    81,    85,
+      86,    88,    90,    92,    94,    96,     0,     0,   750,   291,
+       0,     0,     0,   645,   646,   642,   643,   495,   494,   291,
+       0,   291,   712,   291,   717,   292,   291,   660,   291,   291,
+     703,   659,     2,   291,     0,     0,     0,     0,     0,     0,
+       0,     0,   681,     0,   667,   618,   634,   668,     2,   614,
+     621,   430,   616,   617,   431,     2,   628,   637,   630,   631,
+     664,   665,   679,   707,   711,   709,   749,   265,     2,   743,
+       2,   421,   715,   720,   422,     0,   400,     3,     3,     3,
+       3,   452,     3,     0,     2,   466,   463,   748,     0,   459,
+       2,   462,   465,     0,   291,   239,   261,     3,   269,   271,
+       0,   452,     2,   569,   570,     2,   608,   609,     0,   657,
+     535,     3,   343,   342,   345,   344,   291,   536,     0,   537,
+     370,     0,     0,   291,   291,     0,     0,   690,   380,   383,
+     387,   545,   387,   386,   379,   372,   545,   374,   377,   291,
+     397,   391,   101,   398,   747,     0,     0,   435,   237,     0,
+       0,     3,     2,   666,   428,     0,   525,     0,   749,   487,
+       0,   291,   291,   291,     0,   549,   551,   127,     0,     0,
+     212,     0,     0,     0,   220,   221,    53,     0,    55,    58,
+      59,     0,     2,   125,     0,     0,     0,   691,   692,   688,
+     689,   457,    67,    68,   106,   122,     3,   105,     0,     0,
+      24,    35,     3,     0,    32,    99,     0,     3,   648,   652,
+     655,   647,     3,   590,     3,   714,   719,     2,    60,   291,
+       3,     3,   292,     0,     3,   620,   624,   627,   636,   670,
+     674,   677,   291,     3,   619,   635,   669,   291,   291,   423,
+     291,   291,   744,     0,     0,     0,     0,   253,     0,   101,
+       0,     3,     3,     0,   460,     0,   456,     0,     0,   242,
+     291,     0,     0,   126,     0,     0,     0,     0,     0,   126,
+       0,     0,   105,   105,    18,     2,     0,     0,     3,   128,
+     129,     2,   140,   130,   131,   132,   133,   134,   135,   142,
+     144,     0,     0,     0,   282,   291,   291,   545,     0,   538,
+     291,   373,   375,     0,   389,   691,   384,   388,   385,   378,
+     382,   365,   396,     0,   577,     2,   662,   661,     0,   667,
+       2,   480,   482,   502,     3,   510,   511,     0,     2,   506,
+       3,     3,     0,     0,   554,   219,     0,     0,     0,   219,
+       0,     0,   118,   694,   698,   700,   693,   747,   105,     0,
+       3,   659,    39,     3,    37,    34,     0,     3,    98,   100,
+       0,     2,   650,   651,     0,     0,   291,     0,     0,     0,
+       3,   636,     0,     2,   622,   623,     2,   638,     2,   672,
+     673,     0,     0,    60,     0,     3,     3,     3,     3,   408,
+     407,   411,     2,     2,   746,   745,   119,     0,     0,     0,
+       0,     3,   461,     3,     0,   240,   143,     3,   292,   291,
+       0,     0,     0,     0,     2,     0,   188,     0,   186,     0,
+       0,     0,     0,     0,     0,     0,   545,   118,     0,   148,
+     145,   291,     0,     0,   264,   276,     3,     3,   544,   611,
+     366,   381,   394,   291,   263,   291,     0,   513,   490,   291,
+       0,     0,   489,   504,     0,     0,     0,   213,     0,   222,
+      56,     2,   696,   697,     0,   123,   120,     0,     0,     0,
+       0,     0,    23,     0,   653,   291,   578,   262,   722,   723,
+     724,     0,   675,   291,   291,   291,     3,     3,     0,   683,
+       0,     0,     0,     0,   291,   291,     3,   542,   119,   468,
+       0,     0,   243,   292,     0,     0,     0,     0,   291,   189,
+     187,   184,     0,   190,     0,     0,     0,     0,   194,   197,
+     195,   191,     0,   192,   126,    35,   141,   139,   241,     0,
+       0,   415,   419,   418,     0,   507,     2,   508,     2,   509,
+     503,   291,   225,     0,   223,     0,   225,   291,    31,   121,
+       2,    42,     2,    40,    38,    28,    26,     3,   725,     3,
+       3,     3,     0,     0,   682,   684,   625,   639,   266,     2,
+     405,     3,   404,     0,   470,   467,   126,     0,     0,   126,
+       3,     0,   126,   185,     0,     2,     2,   206,   196,     0,
+       0,     0,   137,     0,   572,   612,     2,     0,     0,     2,
+     226,     0,     0,   214,     0,     3,     0,     0,     0,     0,
+       0,     0,   685,   686,   291,     0,   469,   149,     0,     0,
+       2,   162,   126,   151,     0,   179,     0,   126,     0,     2,
+     153,     0,     2,     0,     2,     2,     2,   193,    32,   291,
+     512,   514,   505,     0,     0,     0,     0,     0,     3,     3,
+     654,   626,   640,   676,   409,   126,   155,   158,     0,   157,
+     161,     3,   164,   163,     0,   126,   181,   126,     3,     0,
+     291,     0,   291,     0,     2,     0,     2,   136,     2,   227,
+     228,     0,   224,   215,   699,     0,     0,   150,     0,     0,
+     160,   230,   165,     2,   232,   180,     0,   183,   169,   198,
+       3,   207,   211,   200,     3,     0,   291,     0,   291,     0,
+       0,     0,    43,    41,   156,   159,   126,     0,   166,   291,
+     126,   126,     0,   170,     0,     0,   690,   208,   209,   210,
+       0,   199,     3,   201,     3,   291,   216,   229,   146,   167,
+     152,   126,   233,   182,   177,   175,   171,   154,   126,     0,
+     691,     0,     0,     0,     0,   147,   168,   178,   172,   176,
+     175,   173,     3,     3,     0,     0,   491,   174,   202,   204,
+       3,     3,   203,   205
 };
 
@@ -1565,28 +1561,28 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   817,   468,   301,    47,   134,   135,   302,   303,   304,
-     305,   765,   766,  1143,  1144,   306,   381,   308,   309,   310,
+      -1,   813,   468,   301,    47,   134,   135,   302,   303,   304,
+     305,   761,   762,  1133,  1134,   306,   381,   308,   309,   310,
      311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-    1038,   518,   982,   546,   322,   983,   952,  1065,  1541,  1067,
-    1068,  1069,  1070,  1542,  1071,  1072,  1458,  1459,  1420,  1421,
-    1422,  1520,  1521,  1525,  1526,  1561,  1562,  1073,  1378,  1074,
-    1075,  1312,  1313,  1314,  1502,  1076,   146,   958,   959,   960,
-    1398,  1482,  1494,  1495,   469,   470,   879,   880,  1046,    51,
+    1030,   518,   975,   546,   322,   976,   947,  1057,  1518,  1059,
+    1060,  1061,  1062,  1519,  1063,  1064,  1437,  1438,  1401,  1402,
+    1403,  1497,  1498,  1502,  1503,  1538,  1539,  1065,  1361,  1066,
+    1067,  1298,  1299,  1300,  1480,  1068,   146,   953,   954,   955,
+    1381,  1461,  1472,  1473,   469,   470,   874,   875,  1038,    51,
       52,    53,    54,    55,   347,   159,    58,    59,    60,    61,
       62,   349,    64,    65,   265,    67,    68,   275,   351,   352,
       71,    72,    73,    74,   119,    76,   205,   354,   120,    79,
-     121,    81,    82,   455,    83,   454,   689,   690,   691,   913,
-    1094,   914,    84,    85,   458,   456,   697,   859,   860,   357,
-     358,   700,   701,   702,   359,   360,   361,   362,   466,   340,
-     136,   137,   522,   324,   171,   646,   647,   648,   649,   650,
-      86,   122,    88,   489,   490,   944,   491,   278,   495,   325,
-      89,   138,   139,    90,  1335,  1116,  1117,  1118,  1119,    91,
-      92,   718,    93,   274,    94,    95,   188,  1040,   680,   412,
+     121,    81,    82,   455,    83,   454,   688,   689,   690,   908,
+    1086,   909,    84,    85,   458,   456,   696,   855,   856,   857,
+     858,   699,   700,   701,   359,   360,   361,   362,   466,   340,
+     136,   137,   522,   324,   171,   645,   646,   647,   648,   649,
+      86,   122,    88,   489,   490,   939,   491,   278,   495,   325,
+      89,   138,   139,    90,  1321,  1108,  1109,  1110,  1111,    91,
+      92,   717,    93,   274,    94,    95,   188,  1032,   679,   412,
      126,    96,   501,   502,   503,   189,   269,   191,   192,   193,
      270,    99,   100,   101,   102,   103,   104,   105,   196,   197,
-     198,   199,   200,   829,   605,   606,   607,   608,   201,   610,
-     611,   612,   572,   573,   574,   575,   754,   106,   614,   615,
-     616,   617,   618,   619,   975,   756,   757,   758,   595,   365,
-     366,   367,   368,   326,   165,   108,   109,   110,   370,   695,
+     198,   199,   200,   825,   605,   606,   607,   608,   201,   610,
+     611,   612,   572,   573,   574,   575,   751,   106,   614,   615,
+     616,   617,   618,   619,   968,   753,   754,   755,   595,   365,
+     366,   367,   368,   326,   165,   108,   109,   110,   370,   694,
      569
 };
@@ -1594,165 +1590,163 @@
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1315
+#define YYPACT_NINF -1310
 static const yytype_int16 yypact[] =
 {
-    5006,  8237, -1315,    89, -1315, -1315, -1315, -1315, -1315, -1315,
-   -1315,   194, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,
-   -1315, -1315, -1315, -1315, -1315, -1315,   314,   314,   314,   792,
-     787,   234,  7780,   219, -1315, -1315, -1315, -1315, -1315,   257,
-   -1315, -1315, -1315,   912,   264, -1315, -1315, -1315, -1315,  6920,
-   -1315, -1315, -1315, -1315,   120,   272, -1315,   823, -1315, -1315,
-   -1315, -1315,   302,  1619,   420,   112,  3706, -1315, -1315,  9405,
-    1262, -1315, -1315, -1315,   675,   440,  7333,  1133,  1444,   675,
-    1669, -1315, -1315,   482,   771, -1315,   675,  1807, -1315,   386,
-   -1315,   507,   517, -1315, -1315, -1315, -1315,   426,   272,   314,
-   -1315,   314, -1315, -1315, -1315, -1315,  8871,   823, -1315, -1315,
-     823, -1315,   415, -1315,  8985, -1315, -1315,  1777,  9099, -1315,
-     428,   428,   428, -1315, -1315, -1315,   314, -1315, -1315, -1315,
-     454,   468,   490, -1315, -1315, -1315,   500, -1315, -1315, -1315,
-   -1315, -1315,   504,   509, -1315, -1315,    76,  8833,  2235,   669,
-     439,   450,   519,   522,   537,   567,  8121,  7182,   529,   581,
-   -1315,  9443, -1315, -1315, -1315, -1315,   595, -1315,   216,  3771,
-    3771, -1315,   603,   313, -1315, -1315, -1315, -1315,   605,   316,
-     320,   345,   314,   589, -1315, -1315,  1619,  2809,   664, -1315,
-      49, -1315,   314,   314,   272, -1315, -1315,    87, -1315,   314,
-     314, -1315,  3249,   632,   636,   428,  7093, -1315, -1315,   646,
-    6920, -1315, -1315,   675, -1315, -1315, -1315,   272, -1315,   823,
-     120, -1315,  7972, -1315,   428,   428,   428,   272, -1315,   792,
-   -1315,  5155, -1315, -1315,   635,   428, -1315,   428, -1315,   257,
-    8833, -1315,   657, -1315,   787,   660,   428, -1315,   792,   679,
-     704, -1315,  7780,   574, -1315, -1315, -1315,  9296, -1315, -1315,
-    6389, -1315,   664,    74,  5169,  9099,  1777,  3249, -1315,    97,
-   -1315, -1315,  8985,   823,   708,  9849, -1315, -1315,   539, -1315,
-   10667,   680,   762, 10451,   751, 10470, 10528, -1315,   764, -1315,
-   -1315, -1315, -1315, 10547, 10547,  8605,   778, -1315, -1315, -1315,
-   -1315, -1315, -1315,   801, -1315,   969,  2181,  8947, 10470, -1315,
-     339,   731,   846,   265,   890,   795,   797,   810,   836,    33,
-   -1315, -1315,   812,   497, -1315,    59, -1315, -1315,  2235, -1315,
-   -1315,   588,   835, -1315,   622,   835,   847,   257, -1315, -1315,
-     863,  8871, -1315,   854,   878,  9061, -1315, -1315,   765,  1714,
-    8320,  7093,   675, -1315,   675,   428,   428, -1315, -1315, -1315,
-   -1315, -1315, -1315,   428,  8871,   823, -1315, -1315,  9213,   843,
-   -1315,  8757, -1315, -1315, -1315, -1315, -1315, -1315, -1315,   886,
-    3575, 10470, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,
-   -1315, -1315, -1315, -1315, -1315, -1315,  1777, -1315,   793,   865,
-     884,   894,   869,   902,   905,   909,  2809, -1315, -1315,   918,
-     120,   935, -1315, -1315,   927, -1315, -1315, -1315,  9296, -1315,
-   -1315, -1315, -1315, -1315,  3249, -1315,  8833,  8833, -1315,   428,
-    1777,  7213,   823,  8393, -1315, -1315, -1315, -1315,  9296,    74,
-   -1315, -1315,   675,   272, -1315, -1315,  9296, -1315,  6557, -1315,
-   -1315,   428,   428,   295,  9519,   937,   942,   934,   955,   428,
-   -1315, -1315, -1315, -1315,  9927, -1315,   540,  6680, -1315,   272,
-     963, -1315,  1777, 10749,  5888, -1315, -1315, -1315, -1315,   899,
-    3249, -1315,  8466,   664,  7663, -1315, -1315, -1315,  1232,   551,
-     812,   787,  9849,   591,  8985, -1315,  9849, -1315, -1315, -1315,
-   -1315,   576, -1315,   980,   762,   283,  8605, -1315,  9699, -1315,
-   -1315,  8605, -1315,  8719,  8605, -1315, -1315,   987, -1315,   599,
-     996,   706,   999, -1315, -1315,  6048,  6769, -1315,   137, -1315,
-   -1315,  6053, -1315,   286,  6053, -1315, -1315, -1315, -1315, -1315,
-   -1315, -1315, -1315, -1315, -1315, -1315,  5169, -1315, -1315, 10470,
-   10470, 10470, 10470, 10470, 10470, 10470, 10470, 10470, 10470, 10470,
-   10470, 10470, 10470, 10470, 10470, 10470, 10470,  4672,  5169, -1315,
-     497,  1307, -1315, -1315,   314,   314, -1315, -1315,  8833, -1315,
-   -1315,   927,   574, -1315,   927, 10393, -1315, -1315, -1315,  9329,
-    6769,  1002,  1007, -1315,  9099, -1315, -1315,   595, -1315,  1019,
-     941,  1024,  1647,   103,   812, -1315,   314,   314,   812,   133,
-   -1315,   314,   314,   927, -1315, -1315,   314,   314, -1315,   835,
-    9781,   823, 10894,   412,   469,  9781, -1315,  6389, -1315,   812,
-   -1315,  8871, -1315,   191,  5383,  5383,  5383,   823, -1315,  4873,
-     979,   513,   886,   151,  1028,  1030, -1315,  1036,  3771,   531,
-   -1315,  1124,   823,  5383,   574,  1777,   574,   664,   782,   835,
-   -1315, -1315,   802,   835, -1315, -1315, -1315,   762, -1315,   835,
-     272,  9927, -1315,   606,  1050,   616,  1051, -1315,  1052,   272,
-   -1315, -1315,  9296,   272,  1054,  9699,  1053, -1315,  1508, -1315,
-     360,   367,   787, -1315,   787,  1056, 10470, -1315,   787, 10894,
-   -1315, -1315,  1059, -1315, -1315, -1315,   574, -1315, 10822,   878,
-   -1315,  5383,   769,  8320, -1315, -1315,   595,  1057,  1058,  1232,
-    3288, -1315, -1315,  9849, -1315, -1315,  1065, -1315, -1315,  1066,
-   -1315,  1065,  1064, 10667,  5169,   121,  1034,   100,  1074,  1071,
-    1075,   778,  1072,  1078, -1315,  1080,  1082,  9557,  6889, -1315,
-    5169, -1315,   706,  2222, -1315, -1315, -1315,   314,   314,  5021,
-    5169,  1079, -1315, -1315,   886,   619, -1315,  5169, -1315, -1315,
-     971, -1315, -1315, -1315, -1315,   339,   339,   731,   731,   846,
-     846,   846,   846,   265,   265,   890,   795,   797,   810,   836,
-   10470,   975, -1315,  9927,  1084,  1086,  1087,  1307, -1315, -1315,
-   -1315, -1315, -1315,  9927,   639,  5383, -1315,  8871, -1315,  7302,
-    9175, -1315,  8757,  7182, -1315, -1315,   941,  9927,   923,  1093,
-    1097,  1098,  1101,  1104,  1109,  1110, -1315,  3448,  1647, -1315,
-   -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,
-   -1315, -1315, -1315, -1315, -1315, -1315,   927, -1315, -1315, -1315,
-     812, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,  1111,
-   -1315,  1115,  1116, -1315, -1315,   120,  1079,  4873, -1315, -1315,
-   -1315,  3575,  1113, -1315, -1315, -1315, -1315, -1315,   787,  6479,
-    1200, -1315, -1315, -1315, -1315,  1100,   120, -1315, -1315,   927,
-   -1315, -1315,   927,   146,   927, -1315, -1315, -1315, -1315, -1315,
-   -1315,  9481, -1315,   272, -1315, -1315,   380,   387,  9213,  7422,
-    1947, 10470,  2081, -1315, -1315,  1121,    77,  1121, -1315,   787,
-   -1315,   314, -1315, -1315,  9630,   934, -1315, -1315, -1315,   942,
-    1122,  1117, -1315, -1315,  1129,  1130, -1315,   769,  2444, -1315,
-     476, -1315,  3288,   812, -1315,  1135,  9849,  9811,  8833,  1136,
-   -1315, -1315,  1127,  1137,  1131, -1315, 10470,   134,   293,  1138,
-   -1315,  1142,   574,  1142,  6769,  5169, -1315, -1315,  1142,  1139,
-   -1315,  1150,  1152,  1153,  2222, -1315, -1315, -1315,  3575, -1315,
-   -1315, -1315, -1315,  1156,  5169,  1140,   574,  4873, -1315,  6053,
-   -1315,   574, -1315, -1315,  5169, -1315,   842,   835, -1315, -1315,
-   -1315, -1315, -1315, -1315, -1315,   886,   878,  9061, -1315, -1315,
-    7542,  1163, -1315,   882,   835, -1315,   892,   926,   835, -1315,
-     428,  4553, -1315, -1315, -1315,  9927,  9927, -1315,  8393,  8393,
-   -1315,  1161,  1164,  1169,  1172, -1315,  1171,   527,    41,  1079,
-   -1315,   574, -1315,  3771, -1315,  5169,   423, -1315,  6649,  1175,
-    1177, 10335,  1178,  1181,     9,    73,    48,  5169,  1182,   272,
-    5169,  5169,  1132,  1180,   489,  1162, -1315, -1315, -1315,  1184,
-   -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315,   787,
-    1183,  5169, -1315,  9927,  9927,   314,  1186, -1315,  9668, -1315,
-   -1315,   984, -1315,  2081, -1315, -1315, -1315, -1315,  1508, -1315,
-   -1315,  1188, -1315, -1315, -1315, -1315,  1191,  2444, -1315, -1315,
-    1185, -1315,  1065, -1315, -1315,  1777,  1194, -1315, -1315, -1315,
-     640,  1198, -1315,   100,  1201, 10470,  1195,   100,   100,  1213,
-    1214, -1315,  6048,   959,   835, -1315, -1315,  1036,  5169,  1217,
-    1156,   654,    46,  1216, -1315,  1214, -1315,  1222,  1216, -1315,
-   -1315,  1226, -1315, -1315,   927,  1229,  1230,  7062,  1231,  1235,
-    1237, -1315, -1315,  1242, -1315, -1315,   927, -1315, -1315, -1315,
-   -1315,   927,  5169,  5169,   878,  1244, -1315, -1315, -1315, -1315,
-   -1315, -1315, -1315, -1315, -1315, -1315, -1315, -1315, 10470, 10470,
-    1246,  1253,  1216, -1315, -1315,   787, -1315, -1315, -1315,  4813,
-    9811,  5169,  5169,  1321,  5169, -1315,  1239, -1315,  1247, -1315,
-    1248,  5169,  1250,  5169,   986,  1252,    81,   314,  9367,  1069,
-   -1315, -1315,  6479,  1261,   436, -1315, -1315, -1315, -1315, -1315,
-   -1315, -1315, -1315, -1315, 10153, -1315,  8466,  1268, -1315, -1315,
-    9811,   437,   451, -1315,  1270,  1271,   762,  1280, -1315,   352,
-   -1315, -1315,  5169,  1281, -1315, -1315,   927,  1277, -1315, -1315,
-    1284,   301,   375,   574,  1285,  1288, -1315,  1290, -1315,  9927,
-   -1315, -1315, -1315, -1315, -1315,  1291, -1315,  9927,  9927,  9927,
-   -1315, -1315,  1293, -1315,  1295,  1298,  1299,   590,  8088,  8204,
-   -1315, -1315,   304, -1315,  1302,  1303, -1315,  8539,   652,   671,
-    1308,   690,  6255, -1315, -1315, -1315,   471, -1315,   711,  1310,
-    1311,   272,  1363,  1043, -1315, -1315,  5169, -1315, 10335,  6053,
-   -1315, -1315, -1315,  1317,  1318, -1315, -1315, -1315,  1316, -1315,
-   -1315, -1315, -1315, -1315, -1315,  9811,   762,   155, -1315,  1300,
-     762,  1156,   297,  9927, -1315, -1315, -1315, -1315, -1315, -1315,
-   -1315, -1315,  1314, -1315, -1315, -1315, -1315, -1315, -1315,  1323,
-    1324, -1315, -1315, -1315, -1315, -1315, -1315, -1315,  1329, -1315,
-    1330, -1315, -1315, 10335,   135,  5169, 10335, -1315,  1333,  5169,
-   -1315,   281,  1344,  1348, -1315, -1315,  1340,  1343,  1331, -1315,
-     988, -1315, -1315, -1315,   823,  1777,  1338,   801,   995, 10470,
-   -1315,   713,  1349,  5169, -1315,   574,   574,  1350,  1355,  1356,
-    1358, -1315, -1315,  8393,  1359, -1315,  1430, 10470,  1360, -1315,
-   -1315, 10246, -1315,   722, -1315,  1347, 10335,  1352, -1315, -1315,
-    1366, -1315,  1370, -1315,  1385,  1386, -1315,  1354,  9811, -1315,
-   -1315, -1315,   762,   574,  1382,  1364,  1381, -1315,  1389,  1216,
-    1216, -1315, -1315, -1315, -1315, -1315, 10335,   197, -1315,  1000,
-   -1315, -1315,  7897, -1315, -1315,  1368,  5169, -1315,  5169,  7897,
-     272,  9699,   272,  9699,  1391, -1315,  1392, -1315, -1315,  1390,
-     801, -1315,   776, -1315, -1315,  5169, -1315,  1394,  1395, -1315,
-   10470, 10470, -1315, -1315,  1077,    85, -1315, -1315,  1372, -1315,
-    1077, -1315, -1315,  2494,   574, -1315, -1315,   272,  9699,   272,
-    9699,  1403,  1383,   574, -1315, -1315, -1315, -1315, -1315, 10246,
-    1401,  1077,  5739,  5169, 10157,  1402,  1077,  1408,  2494,  2404,
-   -1315, -1315, -1315,  1409, -1315, -1315, -1315, -1315,  8833, -1315,
-   -1315, -1315, 10024, -1315, 10246, -1315, -1315,  1388,  9931, -1315,
-   -1315, 10157,   272,  2404,   272,  1413,  1414,   857, -1315, 10024,
-   -1315, -1315, -1315,  9931, -1315, -1315, -1315,   272,   272, -1315,
-   -1315, -1315, -1315, -1315, -1315, -1315, -1315
+    7316,  8697, -1310,    16, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310,    22, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310,   101,   101,   101,  1152,
+     941,    64,  7548,   141, -1310, -1310, -1310, -1310, -1310,    87,
+   -1310, -1310, -1310,   868,   134, -1310, -1310, -1310, -1310,  9158,
+   -1310, -1310, -1310, -1310,   149,   144, -1310,  1337, -1310, -1310,
+   -1310, -1310,   139,   935,   260,   102,  2892, -1310, -1310,  9196,
+     790, -1310, -1310, -1310,   904,   293,  5512,   547,   778,   904,
+    1166, -1310, -1310,   554,   624, -1310,   904,  1343, -1310,   187,
+   -1310,   308,   336, -1310, -1310, -1310, -1310,   251,   144,   101,
+   -1310,   101, -1310, -1310, -1310, -1310,  8923,  1337, -1310, -1310,
+    1337, -1310,   337, -1310,  9043, -1310, -1310,  1053,  9381, -1310,
+    1729,  1729,  1729, -1310, -1310, -1310,   101, -1310, -1310, -1310,
+     410,   413,   418, -1310, -1310, -1310,   433, -1310, -1310, -1310,
+   -1310, -1310,   468,   477, -1310, -1310,    37,  8666,  2607,   742,
+     369,   496,   509,   523,   530,   535,  8584,  6836,   536,   546,
+   -1310,  9234, -1310, -1310, -1310, -1310,   561, -1310,   245,  4633,
+    4633, -1310,   562,   361, -1310, -1310, -1310, -1310,   574,   383,
+     408,   429,   101,   577, -1310, -1310,   935,  3015,   664, -1310,
+      86, -1310,   101,   101,   144, -1310, -1310,    89, -1310,   101,
+     101, -1310,  3541,   634,   653,  1729,  6748, -1310, -1310,   623,
+    9158, -1310, -1310,   904, -1310, -1310, -1310,   144, -1310,  1337,
+     149, -1310,  7737, -1310,  1729,  1729,  1729,   144, -1310,  1152,
+   -1310,  5996, -1310, -1310,   642,  1729, -1310,  1729, -1310,    87,
+    8666, -1310,   672, -1310,   941,   697,  1729, -1310,  1152,   699,
+     702, -1310,  7548,   567, -1310, -1310, -1310,  9125, -1310, -1310,
+    4167, -1310,   664,    10,  5116,  9381,  1053,  3541, -1310,    94,
+   -1310, -1310,  9043,  1337,   715, 10741, -1310, -1310,    11, -1310,
+   10483,   740,   772, 10231,   759, 10288, 10307, -1310,   763, -1310,
+   -1310, -1310, -1310, 10364, 10364,  8440,   765, -1310, -1310, -1310,
+   -1310, -1310, -1310,   799, -1310,   616,  2256,  8779, 10288, -1310,
+     475,   860,   810,   276,   913,   766,   767,   793,   832,    41,
+   -1310, -1310,   807,   704, -1310,   331, -1310, -1310,  2607, -1310,
+   -1310,   242,   835, -1310,   421,   835,   841,    87, -1310, -1310,
+     846,  8923, -1310,   847,   857,  8892, -1310, -1310,  1352,  2069,
+    8155,  6748,   904, -1310,   904,  1729,  1729, -1310, -1310, -1310,
+   -1310, -1310, -1310,  1729,  8923,  1337, -1310, -1310,  9419,  1457,
+   -1310,  7886, -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,
+   10098, 10288, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310,  1053, -1310,   928,   862,
+     891,   893,  1023,   916,   937,   951,  3015, -1310, -1310,   942,
+     149,   958, -1310, -1310,   970, -1310, -1310, -1310,  9125, -1310,
+   -1310, -1310, -1310, -1310,  3541, -1310,  8666,  8666, -1310,  1729,
+    1053,  6867,  1337,  8228, -1310, -1310, -1310, -1310,  9125,    10,
+   -1310, -1310,   904,   144, -1310, -1310,  9125, -1310,  6513, -1310,
+   -1310,  1729,  1729,   382,  5342,   969,   972,   960,  1031,  1729,
+   -1310, -1310, -1310, -1310,  9605, -1310,   450,  6629, -1310,   144,
+    1033, -1310,  1053, 10565, 10155, -1310, -1310, -1310, -1310,  1039,
+    3541, -1310,  8301,   664,  7432, -1310, -1310, -1310,   984,   626,
+     807,   941, 10741,   606,  9043, -1310, 10741, -1310, -1310, -1310,
+   -1310,   690, -1310,  1044,   772,   255,  8440, -1310,  9457, -1310,
+   -1310,  8440, -1310,  8553,  8440, -1310, -1310,  1042, -1310,   722,
+    1047,   818,  1048, -1310, -1310,  9310,  6479, -1310,   321, -1310,
+   -1310,  5116, -1310,   602,  5116, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310,  5116, -1310, -1310, 10288,
+   10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288,
+   10288, 10288, 10288, 10288, 10288, 10288, 10288,  2426,  5116, -1310,
+     704,   830, -1310, -1310,   101,   101, -1310, -1310,  8666, -1310,
+   -1310,   970,   567, -1310,   970, 10212, -1310, -1310, -1310,  4524,
+    6479,  1049,  1054, -1310,  9381, -1310, -1310,   561, -1310,  1056,
+     774,  1073,  2515,    95,   807, -1310,   101,   101,   807,    98,
+   -1310,   101,   101,   970, -1310, -1310,   101,   101, -1310,   835,
+    9490,  1337, 10710,   283,   326,  9490, -1310,  4167, -1310,   807,
+   -1310,  8923, -1310,    80,  7852,  7852,  7852,  1337, -1310,  4787,
+    1065,   875,   744,  1066,  1067, -1310,  1070,  4633,   333, -1310,
+    1134,  1337,  7852,   567,  1053,   567,   664,   494,   835, -1310,
+   -1310,   584,   835, -1310, -1310, -1310,   772, -1310,   835,   144,
+    9605, -1310,   737,  1083,   750,  1090, -1310,  1089,   144, -1310,
+   -1310,  9125,   144,  1088,  9457,  1092, -1310,  1677, -1310,   441,
+     448,   941, -1310,   941,  1091, 10288, -1310,   941, 10710, -1310,
+   -1310,  1098, -1310, -1310, -1310,   567, -1310, 10638,   857, -1310,
+    7852,   853,  8155, -1310, -1310,   561,  1095,  1097,   984,  3316,
+   -1310, -1310, 10741, -1310, -1310,  1099, -1310, -1310,  1105, -1310,
+    1099,  1111, 10483,  5116,    62,  1102,   167,  1113,  1121,  1129,
+    1130, -1310,  1131,  1132,  9348,  6598, -1310,  5116, -1310,   818,
+     978, -1310, -1310, -1310,   101,   101,  5540,  5116,  1135, -1310,
+   -1310,   757, -1310,  5116, -1310, -1310,   914, -1310, -1310, -1310,
+   -1310,   475,   475,   860,   860,   810,   810,   810,   810,   276,
+     276,   913,   766,   767,   793,   832, 10288,   282, -1310,  9605,
+    1136,  1137,  1140,   830, -1310, -1310, -1310, -1310, -1310,  9605,
+     779,  7852, -1310,  8923, -1310,  6955,  9005, -1310,  7886,  6836,
+   -1310, -1310,   774,  9605,  1063,  1142,  1143,  1145,  1146,  1147,
+    1148,  1154, -1310,  3759,  2515, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310,   970, -1310, -1310, -1310,   807, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310,  1156, -1310,  1159,  1160, -1310,
+   -1310,   149,  1135,  4787, -1310, -1310, -1310, 10098,  1157, -1310,
+   -1310, -1310, -1310,   941,  6225,  1247, -1310, -1310, -1310, -1310,
+    1150,   149, -1310, -1310,   970, -1310, -1310,   970,   137,   970,
+   -1310, -1310, -1310, -1310, -1310, -1310,  9272, -1310,   144, -1310,
+   -1310,   451,   452,  9419,  7074,  2178, 10288,  3429, -1310, -1310,
+    1149,    39,  1149, -1310,   941, -1310,   101, -1310, -1310,  8073,
+     960, -1310, -1310, -1310,   972,  1168,  1169, -1310, -1310,  1170,
+    1172, -1310,   853,  1305, -1310,   359, -1310,  3316,   807, -1310,
+    1177, 10741,  9528,  8666,  1180, -1310, -1310,  1175,  1182,  1164,
+   -1310, 10288,    56,   233,  1179, -1310,  1183,   567,  1183, -1310,
+   -1310,  1183,  1184, -1310,  1189,  1190,  1192,   978, -1310, -1310,
+   -1310, 10098, -1310, -1310, -1310, -1310,  1188,  5116,  1193,   567,
+   -1310,  5116, -1310,   567, -1310, -1310,  5116, -1310,   595,   835,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,   857,  8892,
+   -1310, -1310,  7193,  1196, -1310,   622,   835, -1310,   644,   649,
+     835, -1310,  1729,  4053, -1310, -1310, -1310,  9605,  9605, -1310,
+    8228,  8228, -1310,  1194,  1195,  1198,  1199, -1310,  1200,   531,
+      27,  1135, -1310,   567, -1310,  4633, -1310,  5116,   453, -1310,
+    6359,  1213,  1217, 10041,  1222,  1223,    43,    49,   106,  5116,
+    1228,   144,  5116,  5116,  1208,  1237,   142,  1218, -1310, -1310,
+   -1310,  1236, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310,   941,  1249,  5116, -1310,  9605,  9605,   101,  1252, -1310,
+    8810, -1310, -1310,   987, -1310,  3429, -1310, -1310, -1310, -1310,
+    1677, -1310, -1310,  1253, -1310, -1310, -1310, -1310,  1254,  1305,
+   -1310, -1310,  1239, -1310,  1099, -1310, -1310,  1053,  1258, -1310,
+   -1310, -1310,   806,  1262, -1310,   167,  1267, 10288,  1248,   167,
+     167,  1273,  9310,   693,   835, -1310, -1310,  1070,  5116,  1274,
+    1188,   208,   157,  1269, -1310, -1310,  1278,  1269, -1310, -1310,
+    1282, -1310, -1310,   970,  1286,  1288,  6717,  1287,  1289,  1291,
+   -1310, -1310,  1290, -1310, -1310,   970, -1310, -1310, -1310, -1310,
+     970,  5116,  5116,   857,  1292, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310, 10288, 10288,  1294,
+    1295,  1269, -1310, -1310,   941, -1310, -1310, -1310,  5073,  9528,
+    5116,  5116,  1370,  5116, -1310,  1298, -1310,  1299, -1310,  1302,
+    5116,  1306,  5116,  1123,  1307,    30,   101,  5821,  1435, -1310,
+   -1310,  6225,  1303,   456, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310,  9861, -1310,  8301,  1330, -1310, -1310,  9528,
+     463,   481, -1310,  1328,  1314,   772,  1341, -1310,   306, -1310,
+   -1310, -1310, -1310,   970,  1332, -1310, -1310,  1342,   753,   834,
+     567,  1345, -1310,  1350, -1310,  9605, -1310, -1310, -1310, -1310,
+   -1310,  1351, -1310,  9605,  9605,  9605, -1310, -1310,  1359, -1310,
+    1362,  1365,  1366,   557,  7925,  8040, -1310, -1310,   420, -1310,
+    1368,  1371, -1310,  8374,   815,   844,  1346,   866,  6094, -1310,
+   -1310, -1310,   485, -1310,   888,  1369,  1375,   144,  1417,  1051,
+   -1310, -1310,  5116, -1310, 10041,  5116, -1310, -1310, -1310,  1377,
+    1379, -1310, -1310, -1310,  1376, -1310, -1310, -1310, -1310, -1310,
+   -1310,  9528,   772,   195, -1310,  1353,   772,  9605, -1310, -1310,
+   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310, -1310,  1384,  1388, -1310, -1310, -1310, -1310, -1310, -1310,
+   -1310,  1394, -1310,  1397, -1310, -1310, 10041,   217,  5116, 10041,
+   -1310,  1400,  5116, -1310,   289,  1421,  1423, -1310, -1310,  1403,
+    1415,  1393, -1310,  1001, -1310, -1310, -1310,  1337,  1053,  1412,
+     799,   323, 10288, -1310,   953, -1310,   567,   567,  1418,  1425,
+    1426,  1428, -1310, -1310,  8228,  1427, -1310,  1497, 10288,  1420,
+   -1310, -1310,  9953, -1310,   955, -1310,  1419, 10041,  1424, -1310,
+   -1310,  1442, -1310,  1445, -1310,  1461,  1462, -1310,  1430,  9528,
+   -1310, -1310, -1310,   772,   567,  1453,  1436,  1459,  1269,  1269,
+   -1310, -1310, -1310, -1310, -1310, 10041,   204, -1310,   370, -1310,
+   -1310,  3684, -1310, -1310,  1439,  5116, -1310,  5116,  3684,   144,
+    9457,   144,  9457,  1463, -1310,  1465, -1310, -1310,  1464,   799,
+   -1310,   968, -1310, -1310, -1310,  1460,  1466, -1310, 10288, 10288,
+   -1310, -1310,  1075,   122, -1310, -1310,  1444, -1310,  1075, -1310,
+   -1310,  2191,   567, -1310, -1310,   144,  9457,   144,  9457,  1472,
+    1450,   567, -1310, -1310, -1310, -1310,  9953,  1469,  1075,  7664,
+    5116,  9865,  1470,  1075,  1479,  2191,  3509, -1310, -1310, -1310,
+    1482, -1310, -1310, -1310, -1310,  8666, -1310, -1310, -1310,  9732,
+   -1310,  9953, -1310, -1310,  1468,  9644, -1310, -1310,  9865,   144,
+    3509,   144,  1484,  1486,   976, -1310,  9732, -1310, -1310, -1310,
+    9644, -1310, -1310, -1310,   144,   144, -1310, -1310, -1310, -1310,
+   -1310, -1310, -1310, -1310
 };
 
@@ -1760,29 +1754,29 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1315,  4470,  3041, -1315,    39, -1315,  2507,   957,  -207, -1315,
-     461,  -523,  -489,  -955,  -200,  5636,     0, -1315,    72,   572,
-     580,   245,   566,   964,   967,   968,   966,   976, -1315,  1601,
-    -609,  5067,  -949, -1315,  -712,  -938,   430,  -728,   512, -1315,
-    1697, -1315,   311, -1200, -1315, -1315,    43, -1315, -1142, -1154,
-     154, -1315, -1315, -1315, -1315,   -26, -1161, -1315, -1315, -1315,
-   -1315, -1315, -1315,   231, -1202,    53, -1315,  -908, -1315,   416,
-     205, -1315,    78, -1315,  -367, -1315, -1315, -1315,   470,  -824,
-   -1315, -1315,    13,  -940,   465,  2639, -1315, -1315, -1315,  -107,
-   -1315,   102,   269,  -201,  1635,  4179, -1315, -1315,     5,   449,
-     756,  -259,  1489, -1315,  1725, -1315, -1315,    52,  2057, -1315,
-    2147,   612, -1315, -1315, -1315,  -616, -1315,   866,   867,   456,
-     631,   158, -1315, -1315, -1315,   858,   633,  -514, -1315,  -544,
-    -359,  1913, -1315, -1315,  -928,  -991,  1380,  1398,   990,   324,
-   -1315,   171,   457,  -332,  -192,  -147,   584,   695, -1315,   919,
-   -1315,  2794,  1328,  -442,   850, -1315, -1315,   625, -1315,  -238,
-   -1315,   -94, -1315, -1315, -1315, -1246,   330, -1315, -1315, -1315,
-    1091, -1315,    35, -1315, -1315,  -834,   -97, -1314,  -130,  1985,
-   -1315,  3026, -1315,   844, -1315,  -170,  1212,  -183,  -173,  -167,
-       7,   -35,   -34,   -33,   936,    18,    55,    61,  -143,  -159,
-    -156,  -153,  -151,  -323,  -535,  -528,  -526,  -542,  -318,  -520,
-   -1315, -1315,  -512,  1006,  1009,  1011,  2067,  4895,  -560,  -543,
-    -538,  -536,  -484, -1315,  -481,  -740,  -737,  -736,  -586,  -304,
-    -339, -1315, -1315,   856,   707,   -88, -1315,  3848,    29,  -599,
-    -291
+   -1310,  4585,  3220, -1310,  1680, -1310,    79,   965,  -162, -1310,
+     542,  -525,  -472,  -928,   -58,  5006,     0, -1310,   115,   571,
+     588,   220,   578,  1041,  1045,  1037,  1040,  1043, -1310,   682,
+    -568,  4467,  -949, -1310,  -743,   627,  -136,  -680,   399, -1310,
+     364, -1310,   400, -1052, -1310, -1310,   143, -1310, -1280, -1058,
+     249, -1310, -1310, -1310, -1310,    74, -1199, -1310, -1310, -1310,
+   -1310, -1310, -1310,   317, -1213,    36, -1310,  -398, -1310,   501,
+     296, -1310,   175, -1310,  -322, -1310, -1310, -1310,   558,  -827,
+   -1310, -1310,    14,  -963,    60,  1949, -1310, -1310, -1310,   -66,
+   -1310,    19,  1219,  -202,  1852,  4238, -1310, -1310,    54,    75,
+     689,  -242,  1416, -1310,  1975, -1310, -1310,   158,  2131, -1310,
+    2701,  1038, -1310, -1310, -1310,  -621, -1310,   944,   946,   541,
+     713,  -254, -1310, -1310, -1310,   938,   714,  -169, -1310,  -117,
+    -134,  1167, -1310, -1310,  -857,  -878,   837,   910,  1055,    25,
+   -1310,   900,   597,   -39,  -190,  -145,   668,   773, -1310,   993,
+   -1310,  2728,  1561,  -434,   920, -1310, -1310,   708, -1310,  -238,
+   -1310,   241, -1310, -1310, -1310, -1226,   414, -1310, -1310, -1310,
+    1165, -1310,    35, -1310, -1310,  -830,  -111, -1309,  -151,  3288,
+   -1310,  3069, -1310,   921, -1310,  -170,   169,  -182,  -181,  -166,
+       7,   -35,   -33,   -32,   813,     2,    29,    44,  -122,  -165,
+    -164,  -158,  -153,  -314,  -519,  -491,  -490,  -538,  -301,  -501,
+   -1310, -1310,  -512,  1078,  1084,  1085,  2540,  5063,  -571,  -588,
+    -558,  -543,  -557, -1310,  -503,  -733,  -723,  -722,  -570,  -311,
+    -274, -1310, -1310,   240,   176,   -77, -1310,  3991,   136,  -632,
+    -222
 };
 
@@ -1790,929 +1784,912 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -525
+#define YYTABLE_NINF -521
 static const yytype_int16 yytable[] =
 {
-      49,   114,   453,   399,   428,    69,   953,    98,   150,   151,
-     152,   770,   971,   400,   115,   972,   973,   407,   261,   401,
-     268,   498,   383,   384,   743,   628,   604,   402,   440,   632,
-     403,   609,    49,   404,   848,   405,  1148,    69,  1182,    98,
-     755,   596,   831,   148,   408,  1078,  1140,   980,   872,    49,
-     726,   670,    77,    50,   731,  1077,   162,   823,   410,   798,
-     830,   153,   824,   187,   825,   819,   210,   144,   342,    49,
-     194,   679,   820,   217,   821,   505,   227,   924,   167,   683,
-     822,  1206,   220,   399,    77,    50,  1192,   928,    31,  1396,
-     861,   861,   861,   400,   674,   676,   177,   407,   154,   401,
-    1180,  1181,    63,  1460,   155,   425,   114,   402,  1198,   861,
-     403,  1215,  1216,   404,   114,   405,    31,   267,   272,   834,
-    1210,   863,   864,   714,   408,   841,    31,   281,   566,  -234,
-    -234,  1261,   475,   477,    63,   447,    31,  1188,   409,   882,
-     203,  1207,    31,   167,  1316,  1208,   177,   307,   148,   177,
-     471,   150,   151,   152,   460,   162,   114,   345,   253,  1262,
-     411,   210,   730,   567,  1189,   721,  1211,   861,   373,   577,
-     971,   123,    31,   972,   973,   578,   327,  1460,   715,  1417,
-    1418,   745,   292,   476,   819,   282,   187,   187,   411,  1258,
-     204,   820,  1479,   821,   162,   177,   419,   936,   411,   724,
-    -234,   142,   267,   527,   153,  1209,   481,   918,   411,   111,
-      49,   956,   832,  1317,   601,  1245,   527,   162,   668,  1249,
-      41,    42,   210,   111,  1197,   140,   141,   169,   527,   443,
-     145,   150,   151,   152,    41,    42,   665,   527,   954,   436,
-     307,   154,   839,  1125,   601,  1182,   802,   155,   762,  1419,
-     808,   170,    49,   588,   242,   245,  1085,    69,   177,    98,
-     272,   861,   868,   666,  1399,   272,   267,   267,  1024,   327,
-     117,  1506,   114,   823,   162,   862,   862,   862,   824,  1464,
-     825,   819,  1150,   342,   609,   999,  1023,   463,   820,  1088,
-     821,  1002,   857,  1490,   862,   307,  1011,   735,  1182,   657,
-     476,   436,  1092,   124,    77,    50,  1535,   307,  1537,    77,
-     665,   471,   177,   835,  1341,   903,   596,   838,   160,   177,
-    1189,   596,   568,   571,  1548,  1417,  1418,   672,   148,  1212,
-    1101,   471,   377,   677,   834,   373,   167,   666,   855,   471,
-    1519,   114,   858,   143,  1559,   345,  1524,  1124,   378,   602,
-     620,  1563,   862,    31,    63,   556,   557,   510,   111,   472,
-    1180,  1181,  1198,  1549,   625,   527,   147,  1544,   625,    41,
-      42,   114,  1551,   111,   598,   259,   156,  1464,   831,   547,
-     548,   178,  1464,   160,    41,    42,   172,   177,  1078,   714,
-    1564,   558,   559,   736,   823,  1428,   267,   768,  1077,   824,
-     737,   825,  1464,  1126,   177,   684,   187,  -122,   177,  1464,
-    1127,   578,  1346,   373,  1403,   457,   323,   547,   182,  -122,
-    -122,   848,  1182,   202,   267,   339,   307,   307,  -122,   387,
-     267,   262,   390,   625,   263,  -122,   392,   342,     8,     9,
-      10,    11,    12,  -290,   715,   388,   862,   111,   391,    70,
-    1449,  1450,   393,   547,   114,   327,   327,   549,    41,    42,
-     893,   394,  1339,   550,   551,    56,   116,    31,  1004,  1340,
-      77,   177,   267,   808,   498,   430,   919,   395,  1379,   434,
-     267,    70,   625,   921,    49,  1455,  1348,   373,   720,    69,
-      77,    98,   920,  1136,   114,    34,   919,    56,    77,   922,
-    1146,   873,   248,   921,  1112,  1022,   307,   251,   114,   323,
-     609,   307,  1089,   307,   307,   213,  1247,  -520,   915,  1090,
-     472,   753,  1198,   327,   851,   114,   345,   886,   852,  1198,
-     957,   211,  1168,  1170,   221,   253,    77,    50,  1257,  1195,
-     472,   434,   327,   439,   488,   917,   264,  1024,   472,   330,
-     714,   645,  1195,  1330,   111,  1196,   140,   239,   884,  1027,
-     331,   287,   808,   -10,   521,    41,    42,  1332,  1322,  1331,
-     571,   571,    41,    42,  1377,   471,   160,  -443,   307,  1290,
-    1291,   853,  1198,  1333,   712,   854,    63,   750,   853,   625,
-     345,   240,  1108,  -469,   620,   810,   241,   483,   514,  -444,
-     602,   933,   602,  1380,   500,   715,   570,   327,   411,   277,
-     587,   874,  1136,   279,   593,    45,    46,   918,   280,  1022,
-     625,   772,   773,   774,  -469,   625,  -469,   620,   177,   332,
-    -469,   625,   333,   626,   625,   625,   625,   630,  1496,  -105,
-     339,   371,   875,  -105,   643,  1496,   111,   334,   876,   849,
-     705,  1427,  1109,   625,   598,   267,   706,    41,    42,   342,
-     177,   722,   725,   111,   729,   140,   141,   723,   493,  1179,
-     494,   442,   178,  1035,    41,    42,   177,   335,   215,     2,
-     207,     4,     5,     6,     7,   114,   732,   441,   912,   629,
-     372,   177,   733,   633,  1082,   323,   323,   579,  1545,   411,
-     727,    70,  1365,   596,   376,   728,  1366,   107,   107,   749,
-    1120,   625,   938,   620,   389,   750,   897,    56,   385,   720,
-     720,   397,   750,   688,  1042,   519,   899,   399,   409,   988,
-     215,   582,   750,   411,    77,   989,   117,   400,  1498,   107,
-    1499,   426,   407,   401,    35,   427,    36,   114,   345,  1001,
-    1243,   402,   753,   753,   403,   706,   578,   404,   432,   405,
-      77,   488,  1373,   323,  -122,   488,  -122,   450,   750,   408,
-    -122,  -367,   177,   215,  -396,   521,   107,   521,   253,   329,
-     521,  1374,   323,   521,   472,  -122,  -122,   750,   971,   504,
-    1444,   972,   973,   808,   339,  1546,  1390,   571,   714,   213,
-    1376,   779,   780,   781,   782,   625,   750,   625,  1457,  1007,
-     472,   461,   625,   345,   869,   752,   602,   411,   810,  1172,
-     342,  1381,   484,  1445,    45,    46,   230,   750,   602,  1442,
-     231,   979,  1465,   235,   215,   237,   462,    37,   750,   175,
-     176,    40,   246,   111,   292,   140,   141,   323,    41,    42,
-     712,   552,   553,   715,    41,    42,   673,   675,   806,   111,
-     508,   140,   141,   923,   130,   925,   131,   132,   133,   457,
-      41,    42,   215,   513,   372,    41,    42,   215,   937,   307,
-     601,  1517,  1457,   527,    69,   244,  1512,    45,    46,   847,
-     525,   887,  1513,   411,   593,    37,  1193,   175,   176,    40,
-     856,   625,   253,   329,   411,   164,    41,    42,   114,   345,
-     912,   890,   912,   411,   562,    37,   957,   175,   176,    40,
-     957,   957,   213,   665,   114,   563,    41,    42,   915,  1368,
-     565,    77,   715,    70,   554,   555,   519,   938,   938,   564,
-     177,   519,   720,   568,   519,   850,   338,   114,   307,    56,
-     666,  1152,   376,   411,   688,   917,  -440,    48,   113,   107,
-    1113,   865,   215,   738,   345,   739,   589,  1569,   740,   230,
-     164,   746,   586,   578,   753,   658,   881,   327,   419,   661,
-     411,    63,   560,   561,    37,   163,   113,   113,    40,    48,
-      -3,  1164,   488,   411,   659,    41,    42,   791,   638,   195,
-      48,  1167,   218,   601,   660,   228,    48,   345,   481,   329,
-     411,   712,   662,    37,    48,   663,   339,    40,  1238,   664,
-      48,    43,  1531,    48,    41,    42,    48,   667,   625,   625,
-      45,    46,   832,   329,   601,  1169,   849,   601,   258,  1337,
-     113,   113,   645,   215,  1309,  1310,  1311,   669,   307,  1047,
-     816,   693,   601,  1200,   528,   529,   530,   500,   694,    45,
-      46,  1347,  1349,  1350,    48,   696,   435,    48,  1254,   698,
-     411,   442,  1136,  1095,    48,  1095,  1003,  -238,   531,   547,
-     532,   806,   533,   534,   163,   215,   992,   989,   114,   734,
-    1097,   750,   994,   912,   329,   411,   -12,   374,   912,   747,
-      77,  1386,  1387,  1437,   989,    48,   751,   938,   230,   759,
-     235,  1442,  1443,    48,   811,   267,  1491,  1492,    48,   812,
-     510,  1417,  1418,   163,   775,   776,   783,   784,   435,  1397,
-     342,   815,   625,  1397,   777,   778,   826,     2,   207,     4,
-       5,     6,     7,    48,    48,   -13,   163,   870,   213,   645,
-     472,   523,   871,   878,   528,   529,   530,   345,   444,    48,
-     898,   900,   213,   164,   901,   908,   955,    48,   905,  -417,
-     806,   926,  -524,   941,   950,   948,    48,   339,   531,    48,
-     532,   723,   533,  1319,   961,   963,   113,   962,   966,   965,
-     967,   107,   968,   688,   996,   984,   997,   998,   230,   272,
-     114,   113,    35,  1013,    36,   113,   215,  1014,  1015,    48,
-     113,  1016,    97,   220,  1017,   488,  1115,   323,   114,  1018,
-    1019,  1030,   307,    48,    48,  -405,  -404,    69,  1044,  1079,
-      48,  1081,  1102,  1103,   215,  1480,   625,    48,   911,   215,
-     114,  1104,  1105,   750,    97,  1111,  1121,  1122,  1123,  1217,
-    1047,  1132,  1141,  1113,  1128,   149,   978,   177,   213,   712,
-    1133,    97,  1134,  1135,   374,    -3,     2,   207,     4,     5,
-       6,     7,  1138,  1162,    77,   190,   847,  1183,    97,  1185,
-    1184,    97,  1186,  1187,  1201,    48,  1202,  1204,   625,   625,
-    1205,  1213,  1218,  1225,  1220,   229,  1230,   272,  1440,    -3,
-    1557,  1235,   307,  1233,    37,    48,    48,  1200,    40,  1239,
-     692,   215,  1244,  1246,   493,    41,    42,     8,     9,    10,
-      11,    12,    48,  1251,    63,   215,    48,  1248,    70,  1259,
-    1252,    35,  1263,    36,  1266,   114,  1268,   644,   712,  1270,
-    1271,   719,   374,  1272,    56,   399,    31,  1273,  1113,  1274,
-      45,    46,  1276,    48,    77,   400,  1283,   688,  1292,   407,
-      97,   401,   523,    48,   523,  1293,  1296,   523,  1300,   402,
-     523,  1303,   403,    97,    34,   404,  1321,   405,  1328,  1304,
-    1305,    48,  1307,   665,  1315,  1334,   408,    48,  1336,    48,
-    1338,  1066,  1344,  1342,   216,   267,  1345,  1351,   398,   190,
-    1352,   806,  1353,  1355,   472,  1361,  1530,  1362,  1363,  1364,
-     666,   243,  1114,   625,  1371,  1372,   570,  1375,   411,  1382,
-    1383,   215,    97,  1311,   113,    45,    46,  1391,  1392,    48,
-    1393,  1403,  1400,   177,    97,  1411,  1412,    48,   114,  -406,
-    1430,    48,  1415,  1426,  1432,    48,   216,  -291,   113,  1434,
-     113,  1113,  1435,  1441,     8,     9,    10,    11,    12,   442,
-    1451,  1446,   114,  1436,    97,  1452,  1453,  1200,  1454,   114,
-     644,   114,  1456,   114,  1200,  1366,  1470,  1461,   479,  1466,
-    1472,  1474,  1476,    31,  1468,   113,  1478,   339,   644,   216,
-     113,   644,  1483,   150,   151,   152,  1484,    70,  1485,  1486,
-    1497,  1507,  1509,  1529,  1523,  1511,  1515,  1516,   114,  1115,
-     114,    34,  1538,    56,    77,  1539,  1543,  1550,  1552,  1554,
-    1560,    77,   114,  1567,  1568,  1219,   785,  1200,  1529,  1529,
-     786,   788,   787,  1320,  1518,  1429,   162,  1570,   307,   113,
-      97,   692,   789,  1385,  1250,  1401,    48,  1500,  1096,  1224,
-     216,   906,   907,  1529,  1232,   214,   929,    48,  1100,    48,
-     373,   603,  1137,  1203,   472,   233,  1043,   327,   877,  1110,
-    1329,   472,   804,   943,    77,   717,   794,   951,    48,   795,
-      37,   796,   184,   185,    40,     0,   107,     0,   216,     0,
-       0,    41,    42,   216,    48,     0,     0,     0,     0,     0,
-     113,     0,     0,     0,  1115,     0,     0,   214,     0,    48,
-       0,   113,    48,   113,     0,     0,     0,   910,   190,   411,
-       0,     0,   215,     0,   472,   911,    45,    46,     0,     0,
-       0,  1298,  1299,     0,  1301,    66,   118,     0,     0,     0,
-       0,  1306,     0,  1308,     0,    48,     0,     0,   213,   113,
-     214,   113,     0,     0,   107,   113,     0,     8,     9,    10,
-      11,    12,     0,   113,   211,   221,     0,    66,     0,     0,
-       0,    70,  -292,     0,     0,     0,    48,    48,   216,     8,
-       9,    10,    11,    12,   161,     0,    31,    56,     0,     0,
-      48,    37,     0,   184,   185,    40,    97,     0,     0,     0,
-     603,     0,    41,    42,   222,  1114,     0,  1115,    31,     0,
-       0,   214,     0,     0,    34,     0,     0,     0,  1439,    37,
-       0,   184,   185,    40,     0,    75,     0,     0,   186,     0,
-      41,    42,     0,     0,  1066,     0,    34,    45,    46,     0,
-    1503,   260,  1503,     0,     0,     0,   442,     0,     0,   214,
-       0,    70,   174,     0,   214,   107,   600,    75,   601,   216,
-       0,     0,   441,     0,     0,    45,    46,    56,     0,   499,
-       0,     0,     0,    48,     0,     0,     0,  1503,     0,  1503,
-     692,     0,     0,   328,     0,    48,    37,     0,   184,   185,
-      40,   260,   350,     0,   223,   254,     0,    41,    42,     0,
-    1114,   216,     0,     0,     0,  1423,     0,   323,     0,     0,
-    -293,   215,   818,     0,   603,     0,     0,     8,     9,    10,
-      11,    12,   406,   600,     0,   601,     0,     0,   644,     0,
-    1389,     0,    45,    46,     0,   113,     0,   424,     0,   214,
-     429,   431,     0,     0,   703,   161,    31,     0,     0,    37,
-       0,   184,   185,    40,     0,     0,     0,     0,    48,     0,
-      41,    42,   704,     0,     0,     0,   448,    48,     0,    48,
-     451,     0,   452,     0,    34,     0,   113,     0,     0,     0,
-       0,   459,   353,     0,     0,  1416,   266,    66,  1424,     0,
-       0,   417,   473,     0,     0,    45,    46,     0,     0,    48,
-     916,     0,   480,  1114,     0,     0,     0,   107,     0,   215,
-     431,    70,     0,     0,   437,     0,     0,     0,    70,   113,
-     214,     0,   216,     0,   445,     0,     0,    56,     0,   107,
-       0,   818,   603,  1463,    56,   644,     0,   214,  1467,     0,
-       0,     0,     0,   113,   692,     0,   644,   107,   113,     0,
-     216,     0,     0,     0,     0,   216,   449,     0,     0,     0,
-       0,     0,   214,     0,     0,     0,     0,     0,  1489,     0,
-       0,    70,     0,     0,     0,     0,   260,    75,     0,     0,
-     594,     0,    75,     0,     0,     0,   622,    56,     0,     0,
-       0,     0,   520,     0,     0,     0,     0,     0,   113,   627,
-       0,     0,     0,   627,     0,     0,   260,     0,     0,   107,
-       0,   125,   128,   129,     0,     0,     0,     0,     0,    37,
-       0,   184,   185,    40,     0,     0,     0,   216,   818,     0,
-      41,    42,     0,     0,     0,     0,   113,     0,     0,     0,
-     603,   216,   107,     0,     0,     0,     0,     0,     0,     0,
-      48,   703,     0,   473,  1558,    48,   910,    78,   411,     0,
-    1558,     0,     0,     0,     0,    45,    46,     0,   350,   704,
-       0,  1558,    48,   473,     0,  1558,   223,     0,     0,     0,
-       0,   473,     0,   214,   255,     0,   256,     0,     0,    78,
-       0,     8,     9,    10,    11,    12,     0,     0,     0,   699,
-       0,     0,   431,     0,     0,     0,     0,     0,     0,     0,
-       0,   214,     0,     0,     0,     0,   214,   713,     0,    66,
-      31,     0,  1091,     0,   916,     0,   224,   431,     0,     0,
-       0,   431,     0,     0,     0,     0,     0,   216,     0,     0,
-     681,     0,     0,    75,     0,   107,     0,    80,    34,     0,
-       0,     0,   113,    37,   603,   184,   185,    40,   353,     0,
-     260,   350,     0,    75,    41,    42,   707,   396,     0,   107,
-       0,    75,     0,   703,     0,    48,   107,   415,   416,    80,
-       0,     0,   420,   703,   422,   423,     0,     0,   214,   353,
-     910,   704,   411,     0,     0,     0,     0,   703,     0,    45,
-      46,   704,   214,   520,     0,     0,   797,   353,   520,    75,
-       0,   520,     0,     0,   355,   704,   225,     0,   113,   113,
-     113,     0,   499,     0,   627,   809,     0,     0,     0,   107,
-       0,     0,     8,     9,    10,    11,    12,   828,     0,     0,
+      49,   114,   453,   428,   399,   400,   268,    98,   150,   766,
+     151,   152,   819,   973,   868,   115,   964,   407,   752,    63,
+     401,   402,   403,   358,   383,   384,   965,   966,   404,   261,
+     440,   827,    49,   405,   596,   604,    50,   410,   498,    98,
+     357,   740,   820,   148,  1070,   153,   830,  1069,   609,    49,
+     844,    63,   837,   948,    69,  1137,   162,   821,   725,   794,
+      56,   116,   730,   187,   826,   408,   210,   144,    50,    49,
+     194,   919,   154,   217,   409,    70,   227,  1187,    31,   342,
+     112,   815,   178,   220,   399,   400,    69,   155,   281,  1439,
+     628,   425,    56,  1302,   632,  1379,   669,   407,   123,   818,
+     401,   402,   403,  1204,  1205,  1181,   114,    70,   404,   816,
+     817,   475,   477,   405,   114,  1195,   678,   267,   272,   476,
+     505,  1197,  1443,  1177,   682,    31,   211,   923,    31,   221,
+     203,   124,   262,    31,    31,   263,   566,    31,   527,   493,
+      31,   213,   494,  1171,   527,   408,   282,   307,   148,  1178,
+     411,   150,   145,   151,   152,   162,   114,   345,    77,   519,
+    1439,   210,  1303,  1169,  1170,  1117,  -231,  -231,   373,    97,
+     567,   714,   964,   143,   720,  1196,   107,   107,  1199,  1245,
+     204,  1198,   965,   966,   913,   167,   187,   187,   153,   476,
+      77,   471,   949,  1458,   162,   253,   147,   411,   419,   815,
+     411,    97,   267,   481,   828,   411,   601,   835,   107,   601,
+      49,   568,   149,  1186,   287,   154,  1443,   162,    97,   527,
+     667,  1443,   210,  1200,   819,    41,    42,   816,   817,   443,
+     155,   150,   190,   151,   152,    97,   664,  -231,    97,  1484,
+     307,  1443,  1248,  1139,   439,   107,   156,  1077,  1443,   292,
+     167,   514,    49,  1016,   820,   182,   169,   830,   172,    98,
+     272,  1398,  1399,   202,   588,   272,   267,   267,   723,   821,
+    1249,    63,   114,  1512,   162,  1514,   472,   527,   951,  1080,
+     170,   991,   441,   327,   665,   656,  1015,   463,    50,   164,
+     672,   674,  1093,   815,   342,   307,  -287,   442,   483,   358,
+    1468,   609,  1526,   248,  1382,   500,    69,   307,   251,   596,
+     664,  1003,    56,   671,   596,   804,   357,    97,  -119,   676,
+    -119,   816,   817,   571,  -119,  1187,  1178,    70,   148,  1541,
+      97,  1400,   465,  1398,  1399,   373,  -516,   527,  1084,  -119,
+    -119,   114,   734,  1118,   819,   345,   436,  1171,   713,   602,
+     620,   579,   471,   411,   164,   398,   190,   853,   665,   898,
+     253,   377,   827,  1119,   625,   735,   556,   557,   625,  1201,
+     519,   114,   471,   178,   820,   519,   327,   378,   519,    97,
+     471,  1070,   831,  1116,  1069,   736,   834,   673,   675,   821,
+     629,    97,   358,   111,   633,   847,   267,  1171,   747,   848,
+     510,   558,   559,  1409,    41,    42,   187,   851,   436,   357,
+      77,   854,   986,   373,  1496,    77,  1325,  1169,  1170,   174,
+    1501,    97,   547,   548,   267,   213,   307,   307,   107,   844,
+     267,   787,   759,   625,   714,   479,  1326,   472,   849,  1423,
+    1521,   577,   850,   167,   870,  1528,   642,   578,   342,  1525,
+     435,  1157,  1159,  1424,   114,   729,   358,   472,  1428,  1429,
+     547,  1362,   254,   871,  1126,   472,   859,   860,   264,  1536,
+     447,   849,   267,   357,   742,  1100,  1540,   387,  1187,   330,
+     267,   598,   625,   877,    49,  1187,  1469,   373,   719,   460,
+     498,    98,   683,   388,   114,  1244,   547,    97,   578,   390,
+    1470,   711,   869,    63,   888,   881,   307,  1104,   114,  1135,
+    1014,   307,   435,   307,   307,   391,  1171,   910,   603,   -10,
+      50,   750,  -440,   609,   392,   114,   345,  -441,  1016,   996,
+     582,  -467,   411,  -467,   804,   523,  1187,  1434,    69,   798,
+     393,   931,   277,   879,    56,   394,   112,   164,   213,  1236,
+    -467,     2,   207,     4,     5,     6,     7,   914,   417,    70,
+     704,   395,   327,   327,   916,   912,   705,   914,   916,  1184,
+     571,   571,  1184,   915,   952,   190,    77,   279,   307,  1316,
+     917,   437,  1126,  1081,  1082,  1185,   280,   913,  1308,   625,
+     345,   445,   549,   714,   620,  1317,    77,  1318,   550,   551,
+     602,   747,   602,   882,    77,   411,   331,   760,  1360,  1276,
+    1277,   713,   765,  1319,  1474,   471,    35,  1363,    36,   332,
+     625,  1474,   804,  1014,  1019,   625,   111,   620,   140,   239,
+     327,   625,   994,   333,   625,   625,   625,    41,    42,   111,
+     334,   928,    77,  -102,   806,   335,   846,  -102,   371,   327,
+      41,    42,   625,    97,   267,   372,  1087,   603,  1087,   520,
+     107,   465,   861,   240,   768,   769,   770,   342,   241,  1348,
+     376,  1027,  1522,  1349,   111,   358,   876,   385,   111,    -3,
+     140,   141,  1408,   389,   114,    41,    42,   907,   596,    41,
+      42,  1074,   357,   885,   691,   411,   111,   442,   140,   141,
+     472,   528,   529,   530,  1141,  1112,   411,    41,    42,   397,
+     625,   933,   620,   764,   327,   726,  1101,  1234,   719,   719,
+     727,  1238,  1034,   399,   400,   531,   472,   532,   409,   533,
+     534,  1153,   878,   411,   880,   432,   721,   407,   244,   401,
+     402,   403,   722,   426,   114,   345,   523,   404,   523,   750,
+     750,   523,   405,  1156,   523,   601,   845,   500,  1158,   230,
+     601,   598,   427,   231,   711,  1476,   235,  1477,   237,   814,
+     713,   603,   964,   213,   450,   246,   775,   776,   777,   778,
+    1373,  -288,   965,   966,   927,   408,  -364,   213,     8,     9,
+      10,    11,    12,   571,     2,   207,     4,     5,     6,     7,
+     731,   625,  1241,   625,   411,   999,   732,   680,   625,   345,
+    1161,  -393,   602,   570,  1425,   411,   111,    31,   140,   141,
+    1523,    45,    46,   229,   602,   111,   342,    41,    42,   484,
+    1436,   461,   746,   706,   462,   714,    41,    42,   747,    77,
+       8,     9,    10,    11,    12,    34,    37,   892,   804,   504,
+      40,   253,   329,   747,   292,   864,   911,    41,    42,    35,
+     894,    36,   163,   806,  1330,    77,   747,   980,   508,    31,
+     520,   972,   513,   981,   307,   520,   195,   525,   520,   218,
+     213,   527,   228,   812,   562,   601,  1168,   814,   603,   993,
+    1182,    45,    46,    63,   563,   705,   625,    34,   554,   555,
+    1494,  1436,   230,   114,   345,   907,   111,   907,     2,   207,
+       4,     5,     6,     7,   714,   664,  1232,    41,    42,   114,
+     910,   564,   578,   711,   691,  1356,   565,   749,    69,   411,
+     142,   747,   933,   933,    56,    45,    46,   719,   568,   570,
+      37,   411,   114,   307,    40,  1332,   338,    45,    46,    70,
+    -437,    41,    42,   952,  1357,   586,  1105,   952,   952,   589,
+     747,   163,   932,   665,   601,    48,   113,   750,   912,    -3,
+      45,    46,   657,    35,   374,    36,  1359,    43,  1508,   552,
+     553,   814,   747,   242,   245,    45,    46,   638,     8,     9,
+      10,    11,    12,   603,   113,   113,  1227,    48,  1364,   345,
+     163,   658,  1106,   659,   747,   560,   561,    37,    48,   184,
+     185,    40,   713,   111,    48,   140,   141,    31,    41,    42,
+     625,   625,    48,   163,    41,    42,   661,  1126,    48,   984,
+     981,    48,    77,   890,    48,   444,  1121,   253,   329,   411,
+     307,   230,   897,   235,   186,    34,   899,   662,   113,   113,
+     107,   666,    45,    46,  1284,  1285,    37,  1287,  1132,   472,
+      40,   663,  1132,  1426,  1292,  1444,  1294,    41,    42,  1423,
+     668,   747,    48,  1323,  1083,    48,   911,   442,  1490,   327,
+     114,   258,    48,   692,  1491,   907,  1546,   749,   693,   411,
+     907,   695,   578,   718,  1189,    45,    46,   329,   411,   933,
+      56,    45,    46,   737,   215,   738,   603,   267,   739,  1369,
+    1370,   743,  1132,    48,   547,    70,  1418,   981,   107,  1398,
+    1399,    48,   625,   771,   772,    37,    48,   184,   185,    40,
+     342,   230,   419,   660,   411,   845,    41,    42,   779,   780,
+    1351,   374,   773,   774,   457,   697,   345,  -235,   481,   329,
+     411,    48,    48,   733,   744,   510,   215,   748,   756,   691,
+    1380,   807,   266,   873,  1380,   711,   808,    48,   811,  -289,
+      45,    46,   828,   329,   601,    48,     8,     9,    10,    11,
+      12,  1295,  1296,  1297,    48,   822,   867,    48,   272,   114,
+    1331,  1333,  1334,   893,   113,   -12,   -13,   866,    77,   215,
+     895,   896,   900,   220,   903,    31,   921,   114,  -414,   113,
+    -520,   307,   936,   113,   943,   722,   107,    48,   113,   374,
+     117,   945,  1404,   956,   130,   625,   131,   132,   133,   114,
+      63,    48,    48,    34,   950,    41,    42,   957,    48,   958,
+     959,   960,   961,  1105,   711,    48,   988,   989,   211,   221,
+     990,   977,  1005,  1006,   911,  1007,  1008,  1009,  1010,   911,
+     215,  1459,  1079,   213,  1011,    69,  1022,  1421,   160,  -402,
+    -401,    56,  1036,  1058,   625,   625,  1071,  1534,  1094,   906,
+     644,  1073,  1096,   272,  1097,  1095,    70,  1103,   307,  1106,
+    1113,   747,  1114,    48,  1115,  1120,  1122,   971,   215,  1123,
+    1124,   702,  1125,   215,  1128,  1131,  1151,   472,  1174,  1175,
+    1172,  1173,  1176,    48,    48,     8,     9,    10,    11,    12,
+     691,   114,  1190,   399,   400,   259,  1191,  1132,  1132,  1132,
+      48,  1193,  1194,   160,    48,  1105,   407,  1202,  1206,   401,
+     402,   403,  1189,   441,    31,   643,  -290,   404,    56,  1207,
+    1209,    -3,   405,     8,     9,    10,    11,    12,   442,  1214,
+     664,    48,  1219,    70,  1224,   107,   323,   493,  1222,    77,
+    1507,    48,    34,  1228,   703,   339,  1233,   922,   267,  1235,
+    1237,  1106,    31,  1240,   408,  1250,  1246,   107,   215,    48,
+    1252,   724,  1254,   728,   625,    48,  1256,    48,  1257,  1258,
+    1262,  1259,  1420,  1260,  1269,   107,  1278,  1279,   665,    37,
+      34,   175,   176,    40,   932,  1203,   601,  1286,  1307,   114,
+      41,    42,    45,    46,    37,   430,   175,   176,    40,   434,
+    1289,  1290,   113,  1105,  1291,    41,    42,    48,  1293,  1301,
+    1314,   114,  1192,  1320,  1322,    48,    77,  1328,   114,    48,
+     114,  1324,   114,    48,  1329,  1358,   113,  1335,   113,   323,
+     472,   372,  1336,  1338,   107,  1132,  1132,   472,   985,   215,
+     150,  1344,   151,   152,  1345,  1346,  1347,  1297,  1365,  1106,
+    1354,  1506,   214,  1355,  1366,  1383,   114,  1374,   114,  1375,
+    1376,   434,   233,   113,   488,  1189,  1392,   107,   113,   114,
+    1393,    56,  1189,  1460,  -403,  1506,  1506,   702,    56,  1396,
+    1407,   215,  1415,   162,   521,   307,    70,  1411,   472,  1413,
+     528,   529,   530,    70,  1416,  1417,   160,  1422,  1430,    37,
+    1506,   175,   176,    40,   214,  1431,  1432,   373,  1433,  1435,
+      41,    42,   865,  1349,   531,  1029,   532,   113,   533,  1305,
+    1440,  1445,  1449,  1189,    48,  1451,  1447,  1453,  1455,    56,
+     587,  1509,  1457,  1462,   593,    48,   376,    48,  1463,  1464,
+    1517,  1475,  1492,  1485,    70,  1487,  1500,   214,  1493,  1489,
+     703,  1515,  1516,   626,  1520,  1527,    48,   630,   922,  1529,
+     339,   918,  1531,   920,  1544,   107,  1545,   457,  1208,    77,
+    1537,   783,    48,   781,  1130,   784,    77,   113,   782,   785,
+    1058,  1306,  1495,  1410,  1547,  1368,    48,   107,   113,    48,
+     113,  1239,  1384,  1478,   107,  1088,   702,   216,   901,  1213,
+     902,  1221,   215,   922,  1092,   924,   702,   800,   214,  1127,
+    1035,   872,   938,  1315,   243,   323,   323,  1102,   790,   716,
+     702,   327,    48,   946,   791,   792,   113,    77,   113,     0,
+     215,  1367,   113,     0,     0,   215,     0,     0,  1138,     0,
+     113,     0,     0,   687,   479,   107,   214,     0,     0,   216,
+       0,   214,     0,    48,    48,     0,   117,     0,     0,     0,
+    1482,     0,  1482,     0,     0,     0,   499,    48,     0,   703,
+       0,     0,     0,  1372,     0,     0,     0,     0,     0,   703,
+       0,   488,     0,   323,     0,   488,     0,     0,     0,  1029,
+       0,     0,   216,   703,     0,   521,  1482,   521,  1482,     0,
+     521,     0,   323,   521,     0,     0,   215,   177,     0,     8,
+       9,    10,    11,    12,   339,     0,     0,     0,     0,    37,
+     215,   184,   185,    40,     0,  1397,     0,     0,  1405,     0,
+      41,    42,     0,     0,     0,     0,   214,   644,    31,     0,
+       0,     0,     0,  1039,     0,     0,     0,    48,     0,     0,
+       0,     0,     0,   216,     0,     0,   905,   177,   411,    48,
+     177,     0,     0,     0,    45,    46,    34,   323,     0,   922,
+       0,  1442,     0,     0,     0,     0,  1446,   906,   802,     0,
+       0,     0,     0,  1479,  1089,  1483,     0,     0,     0,     0,
+       0,   216,     0,     0,     0,     0,   216,     0,     0,     0,
+       0,     0,   643,     0,  1467,     0,   177,   891,   113,   843,
+       0,     0,     0,   215,   593,     0,     0,   214,     0,  1511,
+     852,  1513,    66,   118,   702,   702,     0,     0,     0,   922,
+     922,    48,     0,     0,   214,     0,     0,     0,     0,     0,
+      48,   644,    48,     0,     0,     0,     0,     0,     0,   113,
+       0,     0,     0,     0,    66,     0,     0,     0,     0,   214,
+       0,     0,     0,  1542,     0,  1543,     0,     0,     0,   177,
+       0,   161,    48,   687,     0,     0,     0,     0,  1550,  1551,
+       0,   216,   702,   702,     0,     0,     0,     0,  1535,     0,
+       0,   222,   113,     0,  1535,     0,     0,   703,   703,     0,
+       0,     0,     0,     0,     0,  1535,   643,     0,     0,  1535,
+       0,   488,     0,     0,   113,     0,     0,     0,   113,    57,
+      57,     0,     0,   177,     0,     0,   987,     0,   260,     0,
+     177,     0,     0,   339,     0,     0,   992,     0,     0,     0,
+       0,  1039,     0,     0,     0,    75,     0,     0,     0,     0,
+    1004,    57,     0,     0,     0,   703,   703,     0,     0,     0,
+       0,     0,   216,     0,     0,     0,     0,     0,   113,     0,
+     328,     0,     0,     0,     0,     0,     0,    75,   260,   350,
+     214,     0,     0,     0,     0,    57,     0,     0,    57,     0,
+       0,     0,   995,     0,     0,     0,     0,   802,   177,     0,
+       0,     0,     0,     0,   216,     0,   113,     0,   214,   406,
+     215,     0,     0,   214,   223,   177,     0,     0,     0,   177,
+      48,     0,     0,     0,   424,    48,     0,   429,   431,     0,
+    1312,     0,   161,     0,   922,     0,     0,     0,     0,     0,
+       0,     0,    48,     0,     0,     0,     0,     0,     0,     0,
+     922,     0,     0,   448,  1282,     0,     0,   451,     0,   452,
+       0,     0,   702,     0,     0,     0,     0,     0,   459,     0,
+     702,   702,   702,     0,    66,     0,   348,     0,     0,   473,
+       0,     0,   177,     0,   214,   802,     0,     0,     0,   480,
+       0,     0,   339,     0,     0,     0,     0,   431,   214,     0,
+       0,    78,   353,  1313,     0,     0,     0,     0,   687,     0,
+       0,    37,     0,   184,   185,    40,     0,     0,   499,   113,
+     922,   922,    41,    42,     0,   216,     0,     0,     0,     0,
+     488,  1107,   323,    78,   702,   703,     0,     0,     0,     0,
+       0,    57,    48,   703,   703,   703,     0,     0,   600,     0,
+     601,     0,     0,   216,  1166,  1167,    45,    46,   216,     0,
+       0,     0,     0,   260,     0,     0,     0,   594,     0,     0,
+     224,    57,     0,   622,     0,     0,   449,     0,     0,     0,
+       0,     0,     0,   113,   113,   113,   627,     0,   843,     0,
+     627,   214,     0,   260,     0,     0,   215,    75,     0,     0,
+       0,     0,    75,     0,     0,     0,     0,   703,     0,     0,
+       0,     0,  1216,  1217,     0,     0,     0,     0,     0,     0,
+      37,     0,   184,   185,    40,     0,     0,     0,     0,   216,
+       0,    41,    42,    37,     0,   184,   185,    40,     0,   177,
+     473,     0,     0,   216,    41,    42,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   350,     0,   905,   355,   411,
+     473,     0,     0,     0,     0,    45,    46,     0,   473,   687,
+    1505,   177,   411,     0,     0,     0,     0,     0,    45,    46,
+       0,     0,     0,     0,     0,     0,   698,   177,     0,   431,
+       0,   215,     0,     0,     0,     0,   223,     0,     0,     0,
+       0,   177,     0,     0,   712,     0,    66,     0,     0,     0,
+       0,   802,    48,    48,   431,     0,     0,     0,   431,     0,
+       0,   113,   113,   535,   536,   537,   538,   539,   540,   541,
+     542,   543,   544,     0,     0,     0,   216,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   260,   350,     0,
+       0,     0,   348,    78,     0,     0,     0,   545,    78,   113,
+       0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   353,     0,
+       0,     0,   177,    75,     0,     0,     0,     0,   214,     0,
+       0,    75,  1337,   793,     0,     0,   339,     0,     0,     0,
+    1339,  1340,  1341,    57,     0,     0,     0,     0,     0,   353,
+       0,   627,   805,     0,     0,     0,    48,   113,  1107,     0,
+       0,     0,     0,     0,   824,     0,   113,   353,     0,    75,
+       0,     0,     0,   283,   284,     0,   285,     0,     0,     0,
+      48,    48,   594,     0,     0,   348,     0,   594,     0,     0,
+       0,     0,   224,   627,     0,     0,   350,   350,   350,     0,
+       0,     0,   286,     0,  1385,    48,     0,     0,   287,     0,
+       0,   353,   288,     0,   350,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
+       0,     0,   698,     0,     0,     8,     9,    10,    11,    12,
+       0,     0,     0,   473,     0,   295,     0,   379,     0,   348,
+    1107,     0,     0,    45,    46,   297,   298,   299,   300,    78,
+       0,     0,     0,     0,    31,     0,   786,     0,     0,   473,
+       0,     0,   350,   216,   355,   353,     0,     0,     0,    78,
+       0,   937,     0,     0,   431,     0,   177,    78,     0,     0,
+       0,     0,    34,   348,   348,   348,     0,    37,     0,   184,
+     185,    40,     0,     0,     0,   355,   260,   712,    41,    42,
+       0,   348,   967,     0,   214,     0,     0,     0,     0,   353,
+     353,   353,     0,   355,     0,    78,     0,     8,     9,    10,
+      11,    12,     0,     0,   600,     0,   601,   353,     0,     0,
+       0,     0,    45,    46,     0,     0,     0,     0,  1107,     0,
+       0,   698,     0,     0,     0,   353,    31,     0,     0,     0,
+       0,   698,     0,   350,     0,   627,    75,   355,  1002,   348,
+     627,   805,     0,     0,     0,   698,     0,     0,     0,  1481,
+       0,  1481,     0,     0,    34,  1013,     0,     0,     0,    37,
+       0,     0,    75,    40,     0,   353,     0,     0,     0,     0,
+      41,    42,     0,     0,     0,     0,     0,     0,     0,   214,
+       0,    80,     0,     0,     0,  1481,     0,  1481,     0,     0,
+       0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
+     353,   355,     0,     0,    45,    46,    66,     0,    87,     0,
+     413,     0,     0,    80,   323,     0,     0,   421,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   627,   216,
+     348,     0,     0,     0,     0,   260,   712,     0,   348,  1085,
+      87,     0,     0,     0,   353,   355,   355,   355,     0,     0,
+     225,     0,     0,     0,   353,     0,   353,     0,     0,     0,
+       0,   223,     0,   355,   353,  1099,     0,     0,   353,     0,
+       0,     0,     0,   431,   118,     0,     0,   226,     0,     0,
+       0,   355,     0,     0,     0,     0,     0,     0,     0,   413,
+       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    57,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    78,     0,
+       0,   355,     0,     0,   216,     0,     0,     0,     0,    75,
+       0,   594,     0,     0,     0,     0,     0,     0,   356,     0,
+       0,     0,     0,   576,   429,     0,     0,     0,     0,   698,
+     698,   580,   350,   350,   583,     0,   355,     0,     0,   353,
+       0,     0,     0,     0,     0,   363,     0,   177,     0,     0,
+       0,    57,  1188,     0,     0,   206,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+     355,     0,    26,    27,    28,     0,     0,   698,   698,     0,
+     355,    31,   355,     0,     0,     0,     0,   224,   413,     0,
+     355,     0,   421,     0,   355,     0,     0,     0,     0,     0,
+       0,     0,     0,    80,     0,     0,     0,     0,    80,    34,
+       0,    35,     0,    36,    37,     0,   208,    39,    40,   348,
+     348,     0,     0,     0,   627,    41,    42,     0,     0,     0,
+      87,     0,     0,     0,     0,    87,     0,     0,     0,    57,
+       0,     0,   353,   353,     0,   353,   353,     0,   712,     0,
+       0,    43,     0,   209,     0,    78,     0,     0,     0,    45,
+      46,     0,     0,     0,     0,    75,     0,     0,     0,   413,
        0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
-       0,   353,     0,     0,     0,   594,     0,   413,     0,     0,
-     594,    31,     0,     0,   421,     0,   627,     0,     0,   350,
-     350,   350,     0,     0,    31,     0,   644,     0,   535,   536,
-     537,   538,   539,   540,   541,   542,   543,   544,   350,    34,
-       0,     0,     0,     0,     0,     0,     0,   927,   214,     0,
-       0,     0,    34,     0,   356,   916,   699,    37,     0,    78,
-     916,    40,   545,     0,    78,   353,     0,   473,    41,    42,
-       0,     0,     0,     0,     0,     0,     0,  1504,     0,  1504,
-       0,   752,     0,   411,     0,     0,   413,     0,   216,     0,
-      45,    46,     0,   473,    43,     0,   350,     0,     0,     0,
-       0,    48,    48,    45,    46,   942,     0,     0,   431,   353,
-     353,   353,   113,   113,  1504,     0,  1504,   895,     0,     0,
-       0,     0,     0,     0,     0,     0,   902,     0,   353,     0,
-     904,     0,   260,   713,     0,     0,     0,     0,   974,     0,
-     576,   993,     0,     0,     0,     0,   353,     0,   580,    80,
-     113,   583,     0,     0,    80,   703,   703,    75,   224,     0,
-       0,     0,     0,     0,     8,     9,    10,    11,    12,     0,
-       0,     0,     0,   704,   704,     0,     0,     0,   699,     0,
-       0,     0,     0,    75,     0,     0,   353,     0,   699,     0,
-     350,     0,   627,    31,     0,  1010,     0,   627,   809,     0,
-       0,     0,   699,     0,     8,     9,    10,    11,    12,     0,
-      48,   113,  1021,   703,   703,   413,     0,     0,  1037,   421,
-     113,    34,     0,   353,     0,    78,    37,     0,   184,   185,
-      40,   704,   704,    31,     0,    48,    48,    41,    42,     0,
-     355,     0,     0,     0,     0,    78,     0,     0,   225,   214,
-       0,     0,     0,    78,     0,     0,     0,     0,   112,     0,
-      48,    34,   927,  1528,    66,   411,     0,     0,   353,     0,
-       0,   355,    45,    46,     0,     0,     0,   216,   353,     0,
-     353,     0,     0,     0,     0,   223,   627,     0,   353,   355,
-       0,    78,   353,   260,   713,     0,   413,  1093,     0,     0,
-       0,     0,     0,   937,     0,   601,     0,   927,     0,   799,
-     800,     0,    45,    46,     0,    80,    37,     0,   184,   185,
-      40,     0,     0,  1107,     0,     0,     0,    41,    42,     0,
-     356,   431,   118,   355,   896,    80,     0,     0,   833,     0,
-       0,   836,   837,    80,   840,  1149,   842,   843,     0,   350,
-    1087,   844,   845,  1528,    75,   411,     0,     0,     0,     0,
-       0,   356,    45,    46,  1326,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   216,     0,     0,     0,   356,
-       0,    80,  1327,     0,   353,     0,     0,   576,   576,    57,
-      57,     0,   594,     0,     0,     0,  1037,   355,     0,   703,
-       0,     0,     0,     0,     0,   429,     0,   703,   703,   703,
-     699,   699,     0,   350,   350,     0,     0,   704,     0,     0,
-       0,    57,     0,   356,     0,   704,   704,   704,     0,     0,
-       0,     0,     0,  1199,     0,     0,     0,     0,   214,   353,
-       0,   355,   355,   355,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    57,   995,     0,    57,     0,
-     355,     0,     0,     0,     0,     0,  1000,     0,   699,   699,
-       0,     0,     0,   703,     0,   888,   927,     0,   355,   891,
-    1012,     0,     0,     0,     0,     0,     0,   356,     0,    78,
-     479,   704,   976,   977,     0,     0,     0,     0,     0,     0,
-     353,   353,     0,   353,   353,     0,  1214,     0,     0,     0,
-     465,     0,     0,     0,     0,    78,     0,   627,   355,     0,
-       0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
-       0,   356,   356,   356,     0,     0,   214,     0,     0,   927,
-     927,     0,   713,     0,    87,     0,   348,     0,     0,     0,
-     356,     0,     0,     0,     0,   355,     0,     0,   353,   353,
-       0,     0,     0,     0,     0,     0,     0,     0,   356,     8,
-       9,    10,    11,    12,     0,     0,    87,     0,     0,    80,
-       0,     0,     0,     0,     0,  1297,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   355,     0,     0,     0,     0,
+       0,  1283,     0,     0,     0,     0,     0,     0,     0,     0,
+     353,   353,   225,     0,    31,     0,     0,   177,     0,   260,
+       0,     0,     0,    66,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   698,     0,   712,     0,   226,
+       0,   118,    34,     0,     0,     0,     0,    37,     0,   184,
+     185,    40,     0,     0,     0,   127,   127,   127,    41,    42,
+       0,     0,     0,     0,     0,     0,     0,   698,     0,     0,
+     576,   576,     0,     0,     0,   698,   698,   698,     0,    80,
+       0,   353,     0,     0,   186,     0,   350,   350,     0,     0,
+       0,     0,    45,    46,   356,     0,     0,    57,    57,    80,
+    1188,     0,     0,     0,     0,     0,    87,    80,   355,   355,
+       0,   355,   355,     0,     0,     0,     0,     0,     0,     0,
+      57,   363,     0,     0,   223,   356,    87,     0,   127,     0,
+     127,    78,     0,   118,    87,     0,     0,     0,    57,   698,
+       0,     0,     0,   356,     0,    80,    75,     0,     0,     0,
+       0,     0,   363,     0,     0,   276,     0,   883,   353,     0,
+     353,   886,     0,     0,     0,     0,   355,   355,     0,     0,
+     363,     0,    87,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   348,   348,     0,     0,   356,     0,     0,
+     353,     0,    57,     0,     0,     0,     0,    57,   353,   353,
+     353,     0,     0,     0,     0,     0,   350,     0,     0,   353,
+     353,   127,     0,     0,   363,     0,     0,     0,     0,   127,
+       0,   127,   127,    75,     0,     0,   127,     0,   127,   127,
+      57,   118,     0,   168,     0,   173,     0,   355,   179,   180,
+     181,     0,   183,     0,     0,     0,     0,     0,     0,     0,
+       0,   356,     0,  1188,     0,     0,     0,   234,     0,     0,
+    1188,     0,   353,     0,     0,     0,     0,     0,     0,   249,
+     250,     0,     0,     0,   125,   128,   129,     0,   363,     0,
+     224,     0,     0,     0,     0,     0,     8,     9,    10,    11,
+      12,     0,     0,   576,     0,   356,   356,   356,   127,     0,
+       0,     0,    78,   348,     0,     0,     0,     0,     0,     0,
+       0,  1188,     0,   356,   355,    31,   355,     0,  1530,     0,
+       0,     0,   363,   363,   363,     0,     0,     0,    57,   353,
+       0,   356,     0,     0,     0,     0,     0,     0,     0,     0,
+     363,     0,    80,    34,     0,     0,   355,   255,    37,   256,
+      57,     0,    40,     0,   355,   355,   355,    57,   363,    41,
+      42,     0,     0,     0,     0,   355,   355,     0,    80,    87,
+       0,   356,     0,     0,     0,     0,    75,     0,     0,    78,
+       0,     0,     0,    75,     0,   718,     0,     0,     0,     0,
+       0,     0,     0,    45,    46,    87,     0,     0,   363,     8,
+       9,    10,    11,    12,     0,     0,   356,     0,    57,     0,
+       0,   413,     0,     0,     0,     0,     0,     0,   355,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
-     355,     0,     0,   260,     0,    80,     0,    66,   356,     0,
-     355,    57,   355,   226,   576,     0,     0,   224,     0,   699,
-     355,   713,     0,     0,   355,   118,    34,     0,     0,     0,
-       0,    37,   353,   184,   185,    40,     0,     0,     0,     0,
-       0,    57,    41,    42,     0,   356,     0,     0,     0,     0,
-       0,     0,     0,     0,   699,     0,  1098,     0,     0,     0,
-       0,     0,   699,   699,   699,     0,     0,     0,   186,     0,
-       0,     0,     0,   350,   350,   223,     0,    45,    46,     0,
-       0,     0,     0,     0,     0,     0,    78,  1199,  1177,  1178,
-     356,     0,     0,     0,     0,     0,     0,    75,     0,     0,
-     356,   363,   356,     0,     0,     0,     0,   225,     0,   353,
-     356,   353,     0,     0,   356,     0,   355,     0,     0,     0,
-     118,     0,     0,     0,   112,     0,     0,     0,   699,     0,
-       0,     0,     0,   413,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   353,     0,  1227,  1228,     0,     0,
-     927,     0,   353,   353,   353,     0,     0,     0,  1384,     0,
-       0,     0,     0,   353,   353,     0,     0,     0,   927,     0,
-     742,   355,     0,     0,     0,     0,    80,    75,     0,     0,
-       0,     0,     0,     0,     0,   763,     0,     0,   742,     0,
-     769,   742,     0,     0,     0,     0,    87,     0,   350,     0,
-       0,    87,   127,   127,   127,     0,   356,     0,     0,     0,
-       0,     0,     0,  1153,     0,     0,     0,     0,   353,     0,
-    1229,     0,   348,   118,     0,     0,     0,     0,     0,     0,
-    1165,     0,   355,   355,     0,   355,   355,     0,     0,   465,
-       0,   927,   927,     0,   168,     0,   173,  1199,     0,   179,
-     180,   181,     0,   183,  1199,    78,     0,     0,     0,     0,
-       0,   356,     0,     0,     0,     0,     0,     0,   234,     0,
-       0,     0,     0,    57,     0,   127,     0,   127,     0,     0,
-     249,   250,     0,     0,     0,     0,     0,     0,   353,     0,
-     355,   355,     0,     0,     0,   226,     0,     0,     0,     0,
-       0,     0,   276,     0,     0,     0,     0,  1199,   413,     0,
-       0,   883,     0,   885,  1553,   348,     0,  1501,     0,  1505,
-       0,     0,   356,   356,     0,   356,   356,     0,     0,     0,
-       0,     0,  1354,     0,     0,     0,     0,    75,     0,     0,
-    1356,  1357,  1358,     0,    75,    80,     0,     0,     0,     0,
-    1255,     0,  1318,     0,  1534,     0,  1536,     0,   127,     0,
-       0,     0,    87,   932,   355,     0,   127,     0,   127,   127,
-       0,     0,     0,   127,     0,   127,   127,   363,     0,   348,
-     356,   356,    87,     0,     0,     0,     0,     0,     0,     0,
-      87,     0,     0,     0,     0,     0,     0,    75,     0,  1565,
-       0,  1566,     0,     0,     0,     0,  1404,   224,   363,     8,
-       9,    10,    11,    12,  1573,  1574,     0,     0,     0,     0,
-       0,     0,     0,   348,   348,   348,   363,     0,    87,    78,
-       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
-       0,   355,   348,   355,     0,   127,     0,     0,     8,     9,
-      10,    11,    12,     0,   356,     0,     0,     0,     0,     0,
+     396,     0,     0,   363,    75,     0,     0,     0,     0,     0,
+     415,   416,     0,     0,     0,   420,     0,   422,   423,     0,
+     356,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+     356,    37,   356,   184,   185,    40,     0,   225,     0,     0,
+     356,     0,    41,    42,   356,     0,     0,   363,     0,     8,
+       9,    10,    11,    12,     0,   355,     0,   363,  1142,   363,
+       0,     0,     0,     0,   226,     0,     0,   363,   905,     0,
+     411,   363,     0,     0,     0,  1154,    45,    46,    31,     0,
+       0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
+       0,     0,     0,     0,   591,     0,   599,     0,     0,     0,
+       0,     0,    78,     0,     0,    80,    34,   623,   624,    78,
+      31,    37,     0,   184,   185,    40,     0,     0,     0,     0,
+       0,     0,    41,    42,     0,     0,     0,     0,     0,     0,
+       0,     0,    87,     0,     0,   356,     0,     0,    34,     0,
+       0,     0,     0,    37,     0,   184,   185,    40,  1505,     0,
+     411,     0,     0,   413,    41,    42,    45,    46,     0,     0,
+      78,     0,   363,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   127,   127,     0,     0,     0,     0,     0,
+     266,     0,     0,     0,     0,     0,     0,     0,    45,    46,
+       0,     0,     0,  1242,     0,     0,     0,     0,     0,     0,
+       0,     0,   127,     0,     0,   127,   127,     0,   127,     0,
+     127,   127,     0,     0,     0,   127,   127,     1,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,  -291,     0,    26,    27,    28,    29,   356,   356,
+      30,   356,   356,    31,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    80,     0,     0,     0,   363,   363,     0,   363,   363,
+       0,    34,     0,    35,     0,    36,     0,     0,    38,    39,
+       0,     0,  -291,     0,     0,     0,  1012,     0,    87,     8,
+       9,    10,    11,    12,     0,     0,   356,   356,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    44,   283,   284,    31,   285,
+       0,    45,    46,   363,   363,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   127,   127,   286,    34,     0,     0,     0,
+       0,   287,     0,     0,     0,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,   356,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   795,   796,     0,     0,     0,     0,   295,     0,
+     379,     0,     0,     0,   363,     0,   344,    46,   297,   298,
+     299,   300,     0,     0,     0,     0,     0,     0,     0,     0,
+     225,   829,     0,     0,   832,   833,     0,   836,     0,   838,
+     839,     0,     0,     0,   840,   841,     0,     0,     0,     0,
+       0,     0,    80,     0,     0,     0,     0,   226,     0,   925,
+       0,   926,     0,     0,   356,     0,   356,     0,   929,   930,
+       0,     0,     0,   935,     0,     0,     0,     0,     0,    87,
+       0,     0,     0,     0,     0,   940,     0,     0,     0,     0,
+     944,   363,     0,   363,     0,     0,   356,     0,     0,     0,
+       0,     0,     0,     0,   356,   356,   356,     0,     0,     0,
+       0,     0,     0,     0,     0,   356,   356,     0,   978,     0,
+     127,     0,     0,   363,     0,   127,     0,     0,     0,    80,
+       0,   363,   363,   363,     0,     0,     0,     0,     0,     0,
+       0,     0,   363,   363,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    87,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   356,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     166,     0,   969,   970,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   363,     0,   219,     0,     0,
+    1162,     0,     0,     8,     9,    10,    11,    12,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1023,  1024,  1025,
+    1026,     0,  1028,     0,     0,     0,     0,     0,     0,     0,
+     283,   284,    31,   285,     0,   356,     0,  1072,     0,     0,
+       0,     0,     0,     0,     0,   166,     0,     0,     0,   273,
+       0,  1078,     0,     0,     0,     0,     0,     0,     0,   286,
+      34,     0,   363,     0,     0,   287,     0,     0,     0,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,   166,   293,
+     294,     0,    80,     0,     0,     0,   127,     0,   369,    80,
+       0,  1098,   375,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   295,     0,   379,     0,     0,     0,     0,    87,
+    1163,    46,   297,   298,   299,   300,    87,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,  1129,    26,    27,    28,
+      80,   166,  1136,     0,  1090,     0,    31,  1140,     0,     0,
+       0,     0,  1144,   219,  1145,     0,     0,     0,  1147,     0,
+    1148,  1149,     0,     0,  1152,     0,     0,    87,     0,     0,
+       0,   166,     0,  1164,    34,     0,     0,     0,     0,     0,
+       0,   208,    39,     0,     0,     0,     0,     0,     0,     0,
+       0,  1179,  1180,     0,     0,     0,   375,     0,     0,     0,
+       0,     0,     0,   166,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   127,     0,     0,  1210,     0,
+       0,  1212,     0,     0,    45,    46,   524,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   166,     0,
+       0,     0,     0,     0,   212,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   232,     0,   236,     0,   238,     0,
+       0,     0,     0,     0,  1226,   247,     0,     0,     0,     0,
+    1230,  1231,     0,     0,     0,     0,   597,     0,     0,     0,
+       0,   621,     0,     0,     0,     0,     0,     0,     0,     0,
+    1247,     0,     0,  1251,     0,     0,   212,  1253,   236,   238,
+     247,     0,     0,     0,     0,  1218,     0,     0,     0,     0,
+    1261,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1268,     0,  1270,  1271,  1272,  1273,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
+       0,  1280,     0,  1281,     0,     0,     0,   173,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   166,   166,     0,
+       0,     0,     0,     0,   369,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1309,  1310,     0,     0,
+       0,     0,     0,     0,     0,   524,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     212,     0,   236,   238,   247,     0,     0,     0,     0,     0,
+       0,     0,     0,   715,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   166,  1342,  1343,     0,     0,
+       0,     0,     0,     0,  1304,     0,  1353,   524,   212,   524,
+       0,     0,   524,   212,   166,   524,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   369,   497,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,  -291,     0,    26,    27,    28,  1388,     0,  1389,
+    1390,  1391,     0,    31,     0,     0,   212,     0,     0,   166,
+       0,  1395,     0,     0,     0,     0,     0,     0,     0,     0,
+    1406,   369,     0,     0,     0,   810,     0,     0,   212,     0,
+       0,    34,     0,   236,   238,     0,    37,     0,   336,   337,
+      40,   247,  -291,     0,     0,  1427,     0,    41,    42,     0,
+       0,   597,     0,     0,   321,     0,   597,     0,     0,     0,
+       0,     0,     0,     0,   346,   369,   369,   369,     0,   157,
+       0,     0,     0,   634,     0,   338,   382,   382,     0,     0,
+       0,    45,    46,   369,   212,     0,     0,     0,  1465,  1466,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1471,   212,     0,     0,     0,     0,   212,  1471,   212,
+     283,   284,     0,   285,     0,   524,     0,   252,     0,     0,
+       0,     0,     0,     0,     0,     0,   212,   257,     0,   212,
+     212,     0,     0,     0,     0,     0,     0,   212,     0,   286,
+    1504,   369,     0,   934,  1510,   287,     0,   321,     0,   288,
+       0,   212,   289,   290,   291,   292,    41,    42,   212,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   478,  1532,     0,  1533,     0,   715,     0,     0,     0,
+       0,     0,   295,   157,   379,     0,     0,   380,     0,     0,
+      45,    46,   297,   298,   299,   300,     0,   386,     0,     0,
+       0,     0,  1548,  1549,     0,     0,     0,     0,     0,     0,
+    1552,  1553,     0,     0,     0,     0,     0,     0,     0,     0,
+     418,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   369,     0,   433,     0,   621,     0,     0,     0,
+     369,     0,     0,   438,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   446,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   283,   284,     0,   285,     0,     0,
+       0,     0,   212,     0,     0,     0,     0,     0,   464,     0,
+       0,     0,     0,   474,     0,     0,     0,   382,     0,     0,
+       0,     0,     0,   286,     0,     0,   482,     0,     0,   287,
+     212,     0,   492,   288,   496,   212,   289,   290,   291,   292,
+      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
+       0,   526,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   715,   295,     0,   379,     0,
+       0,     0,     0,   757,    45,    46,   297,   298,   299,   300,
+     524,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   585,     0,     0,     0,     0,   590,     0,
+       0,     0,     0,     0,   166,     0,   212,     0,     0,     0,
+       0,   709,     0,     0,     0,     0,     0,     0,     0,     0,
+     212,     0,     0,     0,     0,     0,     0,   635,     0,     0,
+       0,   636,   637,     0,   639,     0,     0,     0,     0,     0,
+     497,   650,   651,     0,   652,   653,     0,   654,     0,   655,
+     741,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     597,     0,     0,   758,     0,     0,   585,     0,   741,     0,
+       0,   741,     0,     0,   670,     0,     0,     0,     0,     0,
+       0,   369,   369,   767,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   681,
+       0,   212,     0,     0,     0,   788,     0,     0,     0,     0,
+       0,     0,     0,   212,     0,   797,     0,     0,     0,     0,
+       0,     0,   346,     0,     0,   707,     0,   758,     0,     0,
+       0,   710,   212,     0,     0,     0,   464,     0,     0,     0,
+       0,   524,     0,     0,     0,     0,   206,     2,   207,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,   745,    26,    27,    28,   862,     0,     0,     0,
+       0,     0,    31,     0,   382,     0,     0,   763,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   715,     0,     0,
+      34,     0,    35,     0,    36,     0,     0,   208,    39,     0,
+       0,     0,     0,   283,   284,   789,   285,     0,     0,     0,
+       0,     0,     0,     0,   799,     0,     0,     0,     0,     0,
+       0,   801,     0,     0,     0,   212,     0,   809,     0,   219,
+       0,     0,   286,     0,   209,     0,   823,     0,   287,     0,
+      45,    46,   288,     0,     0,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,   212,     0,     0,     0,     0,
+       0,     0,   758,     0,   963,     0,   715,     0,     0,   341,
+     364,     0,     0,     0,   974,   295,   863,   379,     0,     0,
+     982,     0,     0,    45,    46,   297,   298,   299,   300,     0,
+     212,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   212,     0,   414,     0,     0,     0,     0,     0,     0,
+     414,     0,   809,     0,     0,   369,   369,     0,     0,     0,
+     904,     0,  1000,  1001,   219,     0,   346,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   507,
+     346,   509,   512,     0,     0,     0,     0,     0,     0,   515,
+     516,   252,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   941,   942,   509,   509,     0,     0,     0,     0,     0,
+       0,     0,     0,   212,     0,     0,     0,     0,     0,     0,
+    1031,     0,   414,     0,   382,     0,     0,   212,     0,     0,
+       0,     0,     0,     0,   979,     0,     0,     0,     0,   983,
+       0,   509,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,   346,    26,    27,    28,     0,     0,     0,     0,     0,
+       0,    31,   684,     0,     0,   369,   414,   509,     0,     0,
+       0,     0,     0,     0,   414,   581,     0,   414,   584,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   364,    34,
+     321,     0,   613,  1017,     0,     0,    38,    39,     0,     0,
+    1018,     0,     0,     0,     0,     0,   212,     0,     0,     0,
+       0,   631,     0,  1020,   341,  1021,     0,     0,   382,     0,
+       0,   524,     0,   524,   974,     0,     0,     0,   741,  1033,
+       0,     0,     0,   685,     0,  1037,     0,   686,     0,    45,
+      46,   414,     0,     0,     0,   414,     0,  1075,     0,  1150,
+    1076,     0,     0,     0,     0,     0,     0,   524,     0,   524,
+    1165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   364,     0,     0,     0,
+       0,     0,   382,     0,  1183,     0,   166,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   974,
+     974,   212,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+    1215,     0,   414,     0,     0,   364,     0,   590,     0,     0,
+       0,    31,     0,     0,     0,   509,   509,   509,   509,   509,
+     509,   509,   509,   509,   509,   509,   509,   509,   509,   509,
+     509,   509,   509,     0,     0,     0,     0,   283,   284,    34,
+     285,     0,  1146,     0,   414,     0,     0,     0,   341,   364,
+       0,     0,     0,     0,     0,   974,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   286,     0,     0,     0,
+       0,     0,   287,   862,     0,     0,   288,     0,     0,   289,
+     290,   291,   292,    41,    42,     0,   293,   294,  1266,  1267,
+       0,     0,     0,   414,   414,     0,     0,     0,     0,     0,
+     526,     0,     0,     0,     0,     0,  1211,     0,     0,   295,
+       0,   379,   803,   364,   971,     0,     0,    45,    46,   297,
+     298,   299,   300,   613,     0,   613,   613,     0,     0,     0,
+       0,     0,   613,     0,     0,     0,     0,     0,     0,     0,
+    1223,     0,   842,   364,     0,  1225,     0,     0,   364,     0,
+       0,     0,     0,  1229,     0,     0,     0,   364,   364,   364,
+       0,   509,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   364,     0,     0,     0,     0,
+     414,   884,     0,     0,   414,   887,  1255,     0,     0,     0,
+       0,   889,     0,     0,     0,     0,     0,     0,  1263,     0,
+       0,  1264,     0,  1265,     0,     0,     0,     0,     0,     0,
+     414,     0,     0,     0,     0,     0,     0,  1274,  1275,     0,
+       0,     0,   509,     0,     0,     0,     0,     0,   212,  1371,
+       0,     0,   741,   364,   613,     0,     0,     0,     0,  1288,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   509,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   341,   364,     0,
+       0,     0,   414,   414,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1327,     0,     0,     0,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,  -291,
+       0,    26,    27,    28,     0,     0,   414,     0,     0,     0,
+      31,     0,     0,     0,   364,     0,     0,     0,     0,     0,
+       0,   803,   364,     0,     0,   613,     0,   613,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   613,    34,     0,
+       0,     0,     0,    37,     0,   336,   337,    40,     0,  -291,
+       0,  1377,     0,  1378,    41,    42,     0,     0,     0,     0,
+       0,     0,   509,     0,     0,  1386,     0,  1387,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   338,     0,  1394,     0,     0,     0,    45,    46,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1412,  1414,     0,     0,     0,     0,     0,   509,     0,   803,
+       0,  1419,     0,     0,  1229,     0,   341,   364,   414,     0,
+     414,     0,     0,     0,   414,     0,     0,     0,     0,     0,
+       0,     0,   321,     0,     0,  1441,     0,     0,     0,     0,
+       0,     0,   509,     0,  1448,   613,   613,  1450,     0,  1452,
+    1454,  1456,     0,     0,     0,   509,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,  -291,     0,     0,     0,     0,     0,
+     414,     0,     0,     0,     0,    31,     0,     0,     0,  1486,
+       0,  1488,     0,  1229,     0,     0,   509,     0,     0,     0,
+       0,   414,  1143,     0,     0,     0,     0,     0,  1499,     0,
+       0,     0,   364,    34,     0,     0,     0,     0,   414,  1155,
+       0,   613,   613,  1160,  -291,     0,     0,     0,     0,     0,
+       0,     0,     0,   364,   364,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     1,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,   509,    26,    27,    28,    29,     0,     0,
+      30,   283,   284,    31,   285,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   414,     0,   414,     0,
+       0,     0,     0,   414,     0,     0,     0,     0,     0,     0,
+     286,    34,   613,    35,     0,    36,   287,     0,    38,    39,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,   509,   509,   803,   414,  1243,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   295,     0,  1055,     0,     0,     0,   364,
+       0,    45,    46,   297,   298,   299,   300,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  -126,     0,     1,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
+       0,    30,   283,   284,    31,  1040,  1041,     0,  1042,     0,
+     341,  1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,
+       0,     0,  1051,     0,     0,     0,  1052,  1053,   364,    33,
+       0,   286,    34,     0,    35,     0,    36,  1054,     0,    38,
+      39,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,  1055,   364,   364,   172,
+       0,     0,    45,    46,   297,   298,   299,   300,     0,     0,
+       0,     0,  1056,     0,     0,     0,     0,  -126,     0,     0,
+       0,     0,     1,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,   509,    26,
+      27,    28,    29,     0,     0,    30,   283,   284,    31,   285,
+       0,     0,     0,     0,   509,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   286,    34,     0,    35,     0,
+      36,   287,     0,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   364,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   295,     0,
+      44,     0,     0,     0,   509,   509,    45,    46,   297,   298,
+     299,   300,     0,     2,   207,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   283,   284,    31,   285,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,  -292,     0,     0,   414,   286,    34,     0,    35,     0,
+      36,   287,    31,    38,    39,   288,     0,     0,   289,   290,
+     291,   292,    41,    42,     0,   293,   294,     0,   414,   414,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,     0,   295,     0,
+     343,  -292,     0,   414,     0,   757,   344,    46,   297,   298,
+     299,   300,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,     0,     0,   283,   284,    31,   285,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,   286,    34,     0,    35,    31,    36,
+     287,     0,    38,    39,   288,     0,     0,   289,   290,   291,
+     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
-     363,    37,     0,   184,   185,    40,   355,    31,     0,     0,
-       0,     0,    41,    42,   355,   355,   355,     0,     0,     0,
-       0,     0,     0,     0,     0,   355,   355,   225,     0,     0,
-     348,     0,     0,     0,     0,    34,     0,     0,   266,    78,
-      37,     0,     0,     0,    40,     0,     0,    45,    46,    80,
-       0,    41,    42,     0,     0,     0,     0,     0,     0,     0,
-       0,   356,     0,   356,   363,   591,     0,   599,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   719,   623,   624,
-     355,     0,     0,     0,     0,     0,    45,    46,     0,     0,
-       0,     0,     0,     0,     0,     0,   356,     0,     0,     0,
-       0,     0,     0,     0,   356,   356,   356,     0,   363,   363,
-     363,     0,     0,     0,     0,   356,   356,     0,     0,     0,
-       0,     0,     0,     0,   348,     0,     0,   363,     0,    80,
-       0,     0,   348,     0,     0,  1020,     0,     0,     8,     9,
-      10,    11,    12,     0,     0,   363,     0,     0,     0,  1129,
-     355,     0,     0,     0,     0,     0,    87,     0,     0,     0,
-       0,     0,     0,     0,     0,   283,   284,    31,   285,     0,
-     356,     0,     0,  1142,     0,     0,   742,     0,  1142,     0,
-       0,     0,    87,     0,     0,   363,     0,     0,     0,     0,
-       0,     0,     0,     0,   286,    34,     0,     0,    57,    78,
-     287,     0,     0,     0,   288,     0,    78,   289,   290,   291,
-     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
-       0,     0,   363,     0,     0,     0,     0,     0,  1142,     0,
-       0,     0,     0,     0,     0,     0,     0,   295,     0,   379,
-     356,     0,     0,     0,     0,     0,   344,    46,   297,   298,
-     299,   300,     0,     0,     0,     0,     0,     0,     0,    78,
-       0,     0,     0,     0,     0,     0,    57,   363,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   363,     0,   363,
-     127,   127,     0,   348,   226,     0,     0,   363,     0,    80,
-       0,   363,   283,   284,     0,   285,    80,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   127,
-       0,     0,   127,   127,     0,   127,     0,   127,   127,     0,
-       0,   286,   127,   127,     0,     0,     0,   640,     0,   140,
-     141,   288,     0,     0,   289,   641,   291,   292,    41,    42,
-       0,   293,   294,     0,     0,     0,     0,   348,   348,    80,
-       0,     0,     0,    87,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   295,     0,   642,    57,   643,   380,
-       0,     0,     0,    45,    46,   297,   298,   299,   300,     0,
-       0,     0,     0,   363,     0,     0,     0,     0,     0,   206,
+       0,   111,     0,    38,    39,     0,     0,   295,     0,   962,
+       0,     0,    41,    42,   757,   344,    46,   297,   298,   299,
+     300,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,     0,     0,   283,   284,    31,   285,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,   286,    34,     0,    35,    31,    36,   287,
+       0,    38,    39,   288,     0,     0,   289,   290,   291,   292,
+      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+       0,     0,    38,    39,     0,     0,   295,     0,   962,     0,
+       0,     0,     0,   757,    45,    46,   297,   298,   299,   300,
        2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,   930,     0,   931,     0,    31,     0,     0,     0,     0,
-     934,   935,     0,     0,     0,   940,     0,     0,   363,     0,
-       0,     0,     0,     0,     0,     0,     0,   945,  1142,  1142,
-    1142,     0,   949,    34,     0,    35,     0,    36,    37,     0,
-     208,    39,    40,   127,   127,     0,     0,     0,     0,    41,
-      42,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   985,     0,     0,     0,     0,     0,   283,   284,
-       0,   285,     0,     0,     0,    43,     0,   209,     0,   363,
-     363,     0,   363,   363,    45,    46,   742,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   286,    57,    57,
-       0,     0,    87,   287,     0,     0,     0,   288,     0,     0,
-     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
-       0,    57,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   363,   363,    57,
-     295,     0,   379,     0,     0,   380,     0,     0,     0,    45,
-      46,   297,   298,   299,   300,     0,     0,   166,     0,     0,
-       0,     0,  1031,  1032,  1033,  1034,     0,  1036,     0,     0,
-       0,     0,  1142,  1142,   219,     0,     0,     0,     0,     0,
-       0,     0,     0,  1080,     0,     0,     0,   348,   348,     0,
-       0,     0,     0,     0,     0,     0,    57,  1086,     0,     0,
-       0,    57,   127,     0,     0,     0,     0,   127,     0,     0,
-    1481,   363,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   166,     0,     0,     0,   273,     0,     0,     0,
-       0,     0,     0,     0,    57,     0,     0,  1106,     0,     0,
+       0,     0,     0,   283,   284,    31,   285,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,   286,    34,     0,    35,    31,    36,   287,     0,
+      38,    39,   288,     0,     0,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,     0,     0,     0,     0,
+       0,   208,    39,     0,     0,   295,     0,   343,     0,     0,
+       0,     0,     0,   344,    46,   297,   298,   299,   300,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,   283,   284,    31,   285,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   226,   166,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   369,     0,     0,     0,   375,
-       0,  1532,     0,     0,     0,     0,    87,     0,     0,     0,
-    1540,     0,     0,     0,  1139,     0,     0,     0,   363,     0,
-     363,  1147,     0,     0,     0,     0,  1151,     0,     0,     0,
-       0,  1155,     0,  1156,     0,     0,     0,  1158,     0,  1159,
-    1160,     0,   348,  1163,     0,     0,     0,     0,   166,     0,
-       0,     0,  1175,   363,     0,     0,     0,     0,     0,     0,
-     219,   363,   363,   363,     0,     0,     0,    57,     0,     0,
-    1190,  1191,   363,   363,     0,     0,     0,     0,   166,     0,
-       0,     0,     0,     0,     0,     0,    87,     0,     0,     0,
-       0,    57,     0,     0,     0,     0,     0,  1221,    57,     0,
-    1223,   127,     0,   375,     0,     0,     0,     0,     0,     0,
-     166,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   363,     0,     0,
-       0,     0,     0,   524,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1237,     0,   166,     0,     0,     0,  1241,
-    1242,    57,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1253,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1260,     0,     0,  1264,     0,  1265,     0,     0,  1267,
-       0,     0,     0,   597,     0,     0,     0,     0,   621,     0,
-       0,     0,  1275,     0,     0,     0,     0,   363,     0,     0,
-       0,     0,     0,     0,     0,  1282,     0,  1284,  1285,  1286,
-    1287,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1294,     0,  1295,     0,     0,     0,   173,
-       0,     0,     0,   127,     0,   212,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   232,    87,   236,     0,   238,
-       0,     0,     0,    87,     0,     0,   247,     0,  1323,  1324,
-       0,     0,     0,     0,   166,   166,     0,     0,     0,     0,
-       0,   369,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   212,     0,   236,
-     238,   247,   524,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    87,     0,     0,     0,
-       0,  1359,  1360,     0,     0,     0,     0,     0,     0,     0,
-     716,  1370,     0,     0,     0,     0,     0,     0,     0,     0,
-     212,     0,   166,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   524,     0,   524,     0,     0,   524,
-       0,   166,   524,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   369,     0,     0,     0,     0,     0,
-       0,     0,  1402,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1407,     0,  1408,  1409,  1410,
-       0,   212,     0,   236,   238,   247,     0,     0,     0,  1414,
-       0,     0,     0,     0,     0,     0,     0,     0,  1425,     0,
-       0,     0,     0,     0,     0,     0,   166,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   369,   212,
-       0,     0,   814,     0,   212,  1448,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   497,
-       0,     0,     0,     0,     0,     0,     0,     0,   597,     0,
-       0,     0,     0,   597,     0,     0,     0,     0,     0,     0,
-       0,     0,   369,   369,   369,     0,     0,     0,     0,     0,
-    1487,  1488,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   369,     0,  1493,     0,     0,     0,   212,     0,     0,
-    1493,     0,     0,     0,   157,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
-       0,     0,     0,   524,   236,   238,     0,     0,     0,     0,
-       0,     0,   247,  1527,     0,     0,     0,  1533,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   369,
-    1173,   939,   252,     8,     9,    10,    11,    12,     0,     0,
-       0,     0,   257,     0,     0,     0,  1555,     0,  1556,     0,
-       0,     0,     0,     0,     0,   212,     0,     0,     0,     0,
-     283,   284,    31,   285,     0,     0,   716,     0,     0,     0,
-       0,     0,     0,   212,     0,     0,  1571,  1572,   212,     0,
-     212,     0,     0,     0,  1575,  1576,     0,     0,     0,   286,
-      34,     0,     0,     0,     0,   287,     0,   212,   157,   288,
-     212,   212,   289,   290,   291,   292,    41,    42,   212,   293,
-     294,     0,   386,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   212,   369,     0,     0,     0,   621,     0,   212,
-       0,   369,   295,     0,   379,   418,     0,     0,     0,     0,
-       0,  1174,    46,   297,   298,   299,   300,     0,     0,   433,
-       0,     0,     0,     0,     0,     0,     0,     0,   438,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   446,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   283,
-     284,     0,   285,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   464,     0,     0,     0,     0,   474,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   286,     0,
-       0,   482,     0,     0,   287,     0,     0,   492,   288,   496,
-       0,   289,   290,   291,   292,    41,    42,   716,   293,   294,
-       0,     0,     0,     0,     0,     0,   526,     0,     0,     0,
-       0,     0,   524,   212,     0,     0,     0,     0,     0,     0,
-       0,   295,     0,   379,     0,     0,     0,     0,     0,   790,
-      45,    46,   297,   298,   299,   300,   166,     0,     0,     0,
-       0,   212,     0,     0,     0,     0,   212,     0,   585,     0,
-       0,     0,   369,   590,     0,     0,   206,     2,   207,     4,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   286,    34,     0,    35,     0,    36,   287,     0,   208,
+      39,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   997,     0,     0,     0,
+       0,     0,   998,    46,   297,   298,   299,   300,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
+       0,   283,   284,    31,   285,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     286,    34,     0,    35,     0,    36,   287,     0,    38,    39,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   295,     0,   962,     0,     0,     0,     0,
+       0,   344,    46,   297,   298,   299,   300,     2,   207,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,   635,    26,    27,    28,   636,   637,     0,   639,
-       0,     0,    31,     0,     0,   597,   651,   652,     0,   653,
-     654,     0,   655,     0,   656,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   369,   369,   212,     0,
-      34,   585,    35,     0,    36,     0,     0,   208,    39,   671,
-       0,     0,   212,     0,     0,     0,     0,     0,     0,     0,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+     283,   284,    31,   285,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     283,   284,   497,   285,   682,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   209,     0,     0,     0,     0,     0,
-       0,    45,    46,     0,     0,     0,   524,     0,     0,   286,
-     708,     0,     0,     0,     0,   287,   711,     0,     0,   288,
-       0,   464,   289,   290,   291,   292,    41,    42,     0,   293,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   286,
+      34,     0,    35,     0,    36,   287,     0,   208,    39,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
      294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   212,     0,     0,     0,
-       0,     0,   295,     0,   379,     0,     0,   748,   212,   760,
-       0,    45,    46,   297,   298,   299,   300,     0,     0,     0,
-       0,     0,   767,     0,     0,   716,  -519,   212,     0,     1,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   295,     0,   379,     0,     0,     0,     0,     0,
+      45,    46,   297,   298,   299,   300,  -515,     0,     0,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,     0,     0,    26,    27,    28,    29,
-     793,     0,    30,     0,     0,    31,    32,   219,     0,   803,
-       0,   341,   364,     0,     0,     0,   805,     0,   283,   284,
-       0,   285,   813,     0,     0,     0,     0,     0,     0,     0,
-      33,   827,     0,    34,     0,    35,     0,    36,    37,     0,
-      38,    39,    40,     0,   716,   414,     0,   286,     0,    41,
-      42,     0,   414,   287,     0,     0,     0,   288,     0,     0,
-     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
-       0,     0,   867,     0,     0,    43,     0,    44,     0,     0,
-       0,   212,     0,     0,    45,    46,     0,     0,     0,     0,
-     295,     0,   379,     0,     0,   978,   369,   369,     0,    45,
-      46,   297,   298,   299,   300,   219,     0,     0,   813,     0,
-       0,     0,     0,   212,     0,     0,   909,     0,     0,     0,
-       0,     0,     0,     0,   414,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,  -294,     0,     0,     0,   252,     0,   212,
-       0,     0,     0,     0,    31,     0,     0,   946,   947,     0,
-     212,     0,     0,     0,     0,     0,   283,   284,     0,   285,
-       0,   964,     0,     0,   321,     0,     0,     0,   414,     0,
-       0,     0,    34,     0,   346,     0,   414,   581,     0,   414,
-     584,     0,   986,  -294,   987,   286,   382,   382,   991,     0,
-     364,   287,     0,     0,   613,   288,     0,     0,   289,   290,
-     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
-       0,   369,     0,   631,     0,     0,   341,     0,     0,     0,
-       0,     0,   212,     0,     0,     0,     0,     0,   295,     0,
-     379,     0,     0,     0,     0,     0,   212,    45,    46,   297,
-     298,   299,   300,   414,     0,     0,     0,   414,     0,     0,
-       0,     0,  1025,     0,     0,     0,     0,   321,     0,  1026,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   524,
-       0,   524,  1028,     0,  1029,     0,     0,     0,   364,     0,
-       0,   478,     0,     0,     0,     0,     0,     0,  1041,     0,
-       0,     0,     0,     0,     0,  1045,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   524,  1083,   524,     0,
-    1084,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   414,     0,     0,   364,   212,     0,
-       0,     0,     0,     0,     0,     0,   166,     2,   207,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,   414,     0,     0,     0,
-     341,   364,    31,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   590,
-       0,     0,     0,     0,     0,     0,     0,   382,     0,     0,
-      34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
-       0,     0,     0,     0,     0,   414,   414,     0,     0,     0,
-       0,     0,     0,     0,     0,  1157,   212,     0,     0,     0,
-       0,     0,     0,     0,   807,   364,     0,     0,     0,     0,
-       0,     0,     0,  -402,   678,   613,     0,   613,   613,     0,
-       0,    45,    46,     0,   613,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   846,   364,     0,     0,     0,     0,
-     364,     0,     0,     0,     0,     0,     0,     0,     0,   364,
-     364,   364,     0,   526,     0,     0,     0,     0,     0,  1222,
-       0,   710,     0,     0,     0,     0,     0,     0,   364,     0,
-       0,     0,     0,   414,   889,     0,     0,   414,   892,     0,
-       0,     0,     0,     0,   894,     0,     0,     0,     0,     0,
-       0,     0,     0,  1234,     0,     0,     0,     0,  1236,     0,
-     744,     0,     0,   414,     0,     0,  1240,     0,     0,     0,
-       0,     0,     0,   761,     0,     0,     0,     0,   744,     0,
-       0,   744,     0,     0,     0,     0,   364,   613,     0,     0,
-       0,     0,     0,   771,     0,     0,     0,     0,     0,     0,
-       0,     0,  1269,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1277,   792,     0,  1278,     0,  1279,
-       0,     0,   341,   364,     0,   801,     0,   414,   414,     0,
-       0,     0,   346,  1288,  1289,     0,     0,   761,     0,     0,
+       0,     0,    30,     0,     0,    31,    32,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1302,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   414,     0,     0,     0,     0,     0,     0,     0,
-     364,     0,     0,     0,     0,     0,   866,   807,   364,     0,
-       0,   613,     0,   613,     0,   382,     0,     0,     0,     0,
-       0,     0,     0,   613,  1343,     0,     0,     0,     0,     0,
-       0,     0,   212,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     1,     2,   207,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,    29,     0,     0,    30,     0,     0,    31,     0,
+      33,     0,     0,    34,     0,    35,     0,    36,    37,     0,
+      38,    39,    40,     0,     0,     0,     0,     0,     0,    41,
+      42,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   807,     0,     0,     0,
-    1394,     0,  1395,   341,   364,   414,    34,   414,    35,     0,
-      36,   414,     0,    38,    39,   761,  1405,   970,  1406,     0,
-       0,     0,     0,     0,     0,     0,     0,   981,     0,     0,
-       0,     0,   613,   613,   990,     0,  1413,     0,     0,     0,
+       0,     0,     0,     0,     0,    43,     0,    44,     0,     0,
+       0,     0,     0,    45,    46,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,    29,     0,     0,    30,     0,
+       0,    31,    32,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      44,     0,  1431,  1433,     0,     0,     0,    45,    46,   364,
-       0,     0,     0,  1438,     0,     0,  1240,     0,     0,   414,
-       0,     0,     0,     0,     0,     0,  1008,  1009,     0,     0,
-     346,     0,     0,     0,     0,     0,     0,     0,     0,  1462,
-       0,   414,  1154,     0,   346,     0,     0,     0,  1469,     0,
-       0,  1471,   364,  1473,  1475,  1477,     0,     0,   414,  1166,
-       0,   613,   613,  1171,     0,     0,     0,     0,     0,   507,
-       0,   509,   512,   364,   364,   283,   284,     0,   285,   515,
-     516,     0,     0,     0,  1039,     0,     0,     0,   382,     0,
-       0,     0,     0,   509,   509,  1508,     0,  1510,     0,  1240,
-       0,     0,     0,     0,   286,     0,     0,     0,     0,     0,
-     287,     0,     0,     0,   288,  1522,     0,   289,   290,   291,
-     292,    41,    42,     0,   293,   294,   346,     0,     0,     0,
-       0,   509,     0,     0,     0,     0,   414,     0,   414,     0,
-       0,     0,     0,   414,     0,     0,     0,   295,     0,   379,
-       0,     0,   613,     0,     0,     0,   709,    46,   297,   298,
-     299,   300,     0,     0,     0,   321,     0,   509,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   807,   414,  1256,
-       0,  1130,  1131,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   382,     0,     0,     0,     0,
-       0,   981,   364,     0,  1145,     0,   744,     0,     8,     9,
+       0,     0,     0,     0,     0,     0,    33,     0,     0,    34,
+       0,    35,     0,    36,    37,     0,    38,    39,    40,     0,
+       0,     0,     0,     0,     0,    41,    42,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    43,     0,    44,     0,     0,     0,  -519,     0,    45,
+      46,     1,     2,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,  -294,  1161,    26,    27,
-      28,     0,     0,     0,     0,     0,     0,    31,  1176,     0,
-     283,   284,     0,   285,     0,     0,     0,     0,     0,     0,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,    29,     0,     0,    30,     0,     0,    31,    32,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     382,     0,  1194,   341,     0,    34,     0,     0,     0,   286,
-       0,     0,    38,    39,     0,   640,  -294,   981,   981,   288,
-       0,   364,   289,   290,   291,   292,    41,    42,     0,   293,
-     294,     0,     0,     0,     0,     0,     0,     0,  1226,     0,
-       0,     0,     0,     0,     0,     0,     0,   634,     0,   338,
-       0,     0,   295,     0,   764,     0,    45,    46,     0,     0,
-       0,    45,    46,   297,   298,   299,   300,     0,     0,     0,
-       0,     0,     0,   364,   364,   509,   509,   509,   509,   509,
-     509,   509,   509,   509,   509,   509,   509,   509,   509,   509,
-     509,   509,   509,     0,     0,   981,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   866,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,  1280,
-    1281,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     1,     2,
+       0,     0,    33,     0,     0,    34,     0,    35,     0,    36,
+      37,     0,    38,    39,    40,     0,     0,     0,     0,     0,
+       0,    41,    42,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    43,     0,    44,
+       0,     0,     0,     0,     0,    45,    46,     1,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,    29,     0,     0,
+      30,     0,     0,    31,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,    35,     0,    36,     0,     0,    38,    39,
+       0,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,     0,     0,     0,    44,    31,     0,     0,     0,
+       0,    45,    46,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,    35,     0,    36,    37,
+       0,   208,    39,    40,     0,     0,     0,     0,     0,     0,
+      41,    42,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    43,     0,   209,     0,
+       0,     0,     0,     0,    45,    46,     2,   207,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
+       0,    31,     0,     0,     0,     0,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,     0,    26,    27,    28,    34,
+       0,    35,     0,    36,     0,    31,    38,    39,     0,     2,
      207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
-       0,    30,   283,   284,    31,   285,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   364,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   981,
-       0,   286,    34,     0,    35,     0,    36,   287,     0,    38,
-      39,   288,   509,     0,   289,   290,   291,   292,    41,    42,
-       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
+      23,    24,    25,    34,     0,    26,    27,    28,     0,     0,
+      38,    39,  -399,   677,    31,     0,     0,     0,     0,    45,
+      46,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   295,     0,  1063,     0,     0,     0,
-       0,     0,     0,    45,    46,   297,   298,   299,   300,     0,
-       0,     0,     0,  1388,     0,     0,   744,  -129,     0,     0,
-       0,     0,     0,     0,     0,   509,     0,     0,   414,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,   414,   414,     0,   509,     0,    31,     0,
+       0,     0,    34,     0,    35,   634,    36,   338,     0,    38,
+      39,     0,     0,    45,    46,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   414,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
-       0,     0,     0,   208,    39,     0,     0,     0,     0,     0,
-    1447,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     1,     2,   207,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    45,    46,    26,
-      27,    28,    29,     0,     0,    30,   283,   284,    31,  1048,
-    1049,     0,  1050,     0,     0,  1051,  1052,  1053,  1054,  1055,
-    1056,  1057,  1058,     0,     0,     0,  1059,     0,     0,     0,
-    1060,  1061,     0,    33,     0,   286,    34,   509,    35,     0,
-      36,  1062,  1514,    38,    39,   288,     0,     0,   289,   290,
-     291,   292,    41,    42,     0,   293,   294,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,  -295,     0,     0,   295,     0,
-    1063,     0,   509,   172,     0,     0,    31,    45,    46,   297,
-     298,   299,   300,     0,     0,   321,     0,  1064,     0,     0,
-       0,  -129,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,     0,     0,     0,     0,
-     509,     0,     0,     0,     0,  -295,     0,     0,     0,     0,
-       0,     0,     0,   509,     0,     0,     0,     0,     0,     0,
-       0,     0,     1,     2,   207,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,    29,     0,   509,    30,   283,   284,    31,   285,
+       0,  1350,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   677,     0,     0,     0,
+       0,     0,    45,    46,     2,   207,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
-      26,    27,    28,     0,     0,   286,    34,     0,    35,    31,
-      36,   287,     0,    38,    39,   288,     0,     0,   289,   290,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,    34,     0,    35,
+       0,    36,    31,   684,    38,    39,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1352,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
+       0,   677,     0,     0,     0,     0,     0,    45,    46,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,   685,    26,    27,    28,  1091,     0,
+      45,    46,     0,     0,    31,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,   208,
+      39,     0,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,     0,     0,     0,   271,    31,     0,     0,
+       0,     0,    45,    46,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
+       0,     0,    38,    39,     0,     2,   207,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,     0,     0,     0,     0,     0,   677,
+      31,     0,     0,     0,     0,    45,    46,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+      35,     0,    36,     0,     0,    38,    39,     0,     2,   207,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
+       0,     0,   592,    31,     0,     0,     0,     0,    45,    46,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,    35,     0,    36,     0,     0,   208,    39,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,   283,   284,    31,
+     285,     0,     0,     0,     0,   209,     0,     0,     0,     0,
+       0,    45,    46,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   286,    34,     0,     0,
+       0,     0,   287,     0,    38,    39,   288,     0,     0,   289,
+     290,   291,   292,    41,    42,     0,   293,   294,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   295,
+       0,   517,     0,     0,   172,     0,     0,    45,    46,   297,
+     298,   299,   300,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+     283,   284,    31,   285,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,   286,
+      34,     0,     0,    31,     0,   287,     0,    38,    39,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    34,     0,     0,     0,     0,    37,     0,   336,   337,
+      40,     0,   295,   -35,   296,     0,     0,    41,    42,     0,
+      45,    46,   297,   298,   299,   300,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,   338,    26,    27,    28,     0,
+       0,    45,    46,   283,   284,    31,   285,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+       0,     0,   286,    34,     0,     0,    31,     0,   287,     0,
+      38,    39,   288,     0,     0,   289,   290,   291,   292,    41,
+      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,     0,     0,     0,   111,
+       0,    38,    39,     0,     0,   295,     0,   296,     0,     0,
+      41,    42,     0,    45,    46,   297,   298,   299,   300,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,    44,    26,
+      27,    28,     0,     0,    45,    46,   283,   284,    31,   285,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,   286,    34,     0,     0,    31,
+     684,   287,     0,    38,    39,   288,     0,     0,   289,   290,
      291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
-       0,     0,   111,     0,    38,    39,     0,     0,   295,     0,
-      44,   509,     0,    41,    42,     0,     0,    45,    46,   297,
-     298,   299,   300,     2,   207,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,   283,   284,    31,   285,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   509,   509,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   286,    34,     0,    35,     0,
-      36,   287,     0,    38,    39,   288,     0,     0,   289,   290,
-     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   295,     0,
-     343,     0,     0,     0,     0,   760,     0,   344,    46,   297,
-     298,   299,   300,     2,   207,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,   283,   284,    31,   285,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
-      26,    27,    28,     0,     0,   286,    34,     0,    35,    31,
-      36,   287,     0,    38,    39,   288,     0,     0,   289,   290,
-     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
-       0,     0,    37,     0,    38,    39,    40,     0,   295,     0,
-     969,     0,     0,    41,    42,   760,     0,   344,    46,   297,
-     298,   299,   300,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
-       0,   158,     0,     0,     0,   509,     0,     0,    45,    46,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   509,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     2,   207,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+       0,     0,     0,     0,    38,    39,     0,     0,   295,     0,
+     158,     0,     0,     0,     0,     0,    45,    46,   297,   298,
+     299,   300,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-       0,     0,    26,    27,    28,     0,     0,     0,     0,   283,
+       0,   685,    26,    27,    28,  1220,     0,    45,    46,   283,
      284,    31,   285,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,   509,   509,   286,    34,
-       0,    35,    31,    36,   287,     0,    38,    39,   288,     0,
+      25,     0,     0,    26,    27,    28,     0,     0,   286,    34,
+       0,     0,    31,     0,   287,     0,    38,    39,   288,     0,
        0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
-       0,   295,     0,   969,     0,     0,     0,     0,   760,     0,
-      45,    46,   297,   298,   299,   300,     2,   207,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-       0,     0,    26,    27,    28,     0,     0,     0,     0,   283,
-     284,    31,   285,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,   286,    34,
-       0,    35,    31,    36,   287,     0,    38,    39,   288,     0,
-       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,   208,    39,     0,
-       0,   295,     0,   343,     0,     0,     0,     0,     0,     0,
-     344,    46,   297,   298,   299,   300,     2,   207,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-       0,     0,    26,    27,    28,     0,     0,     0,     0,   283,
-     284,    31,   285,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,     0,     0,     0,     0,     0,   286,    34,
-       0,    35,    31,    36,   287,     0,   208,    39,   288,     0,
-       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   295,     0,  1005,     0,     0,     0,     0,     0,     0,
-    1006,    46,   297,   298,   299,   300,     2,   207,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-       0,     0,    26,    27,    28,     0,     0,     0,     0,   283,
-     284,    31,   285,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   286,    34,
-       0,    35,     0,    36,   287,     0,    38,    39,   288,     0,
-       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   295,     0,   969,     0,     0,     0,     0,     0,     0,
-     344,    46,   297,   298,   299,   300,     2,   207,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-       0,     0,    26,    27,    28,     0,     0,     0,     0,   283,
-     284,    31,   285,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   286,    34,
-       0,    35,     0,    36,   287,     0,   208,    39,   288,     0,
-       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   295,     0,   379,     0,     0,     0,     0,     0,     0,
-      45,    46,   297,   298,   299,   300,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,    29,     0,     0,    30,
-       0,     0,    31,    32,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    33,     0,     0,
-      34,     0,    35,     0,    36,    37,     0,    38,    39,    40,
-       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    43,     0,    44,     0,     0,     0,  -523,     0,
-       0,    45,    46,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
-      26,    27,    28,    29,     0,     0,    30,     0,     0,    31,
-      32,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    33,     0,     0,    34,     0,    35,
-       0,    36,    37,     0,    38,    39,    40,     0,     0,     0,
-       0,     0,     0,    41,    42,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
-       0,    44,     0,     0,     0,     0,     0,     0,    45,    46,
-       1,     2,   207,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,  -294,     0,    26,    27,    28,
-      29,     0,     0,    30,     0,     0,    31,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
-       0,    38,    39,     0,     0,  -294,     2,   207,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-       0,     0,    26,    27,    28,     0,     0,     0,    44,     0,
-       0,    31,     0,     0,     0,    45,    46,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
-       0,    35,     0,    36,    37,     0,   208,    39,    40,     0,
-       0,     0,     0,     0,     0,    41,    42,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    43,     0,   209,     0,     0,     0,     0,     0,     0,
-      45,    46,     2,   207,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
-      28,     0,     0,     0,     0,     0,     0,    31,     0,     0,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,     0,    34,     0,    35,     0,    36,
-      31,     0,    38,    39,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1367,     0,     0,     0,    34,     0,
-       0,     0,     0,    37,     0,   336,   337,    40,     0,   678,
-       0,     0,     0,     0,    41,    42,    45,    46,     2,   207,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,   338,     0,    26,    27,    28,     0,     0,    45,
-      46,     0,     0,    31,     0,     0,     0,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-       0,    34,     0,    35,     0,    36,    31,     0,    38,    39,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1369,     0,     0,     0,    34,     0,     0,     0,     0,   111,
-       0,    38,    39,     0,     0,   678,     0,     0,     0,     0,
-      41,    42,    45,    46,     2,   207,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    44,     0,
-      26,    27,    28,     0,     0,    45,    46,     0,     0,    31,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
-       0,    36,     0,     0,   208,    39,     0,     2,   207,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,   271,    31,     0,     0,     0,     0,     0,    45,    46,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
-       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
-       0,     0,     0,     0,   678,    31,     0,     0,     0,     0,
-       0,    45,    46,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
-      38,    39,     0,     2,   207,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,     0,   592,    31,     0,
-       0,     0,     0,     0,    45,    46,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
-      36,     0,     0,   208,    39,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-       0,     0,   283,   284,    31,   285,     0,     0,     0,     0,
-     209,     0,     0,     0,     0,     0,     0,    45,    46,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   286,    34,     0,     0,     0,     0,   287,     0,    38,
-      39,   288,     0,     0,   289,   290,   291,   292,    41,    42,
-       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   295,     0,   517,     0,     0,   172,
-       0,     0,     0,    45,    46,   297,   298,   299,   300,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,   283,   284,    31,   285,
-       0,     0,     0,     0,     0,     0,     0,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,   286,    34,    26,    27,    28,
-       0,   640,     0,    38,    39,   288,    31,     0,   289,   290,
-     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,     0,     0,   295,   -35,
-     741,    38,    39,     0,     0,     0,     0,    45,    46,   297,
-     298,   299,   300,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,   634,     0,   338,     0,
-     283,   284,    31,   285,     0,    45,    46,     0,     0,     0,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,   286,
-      34,    26,    27,    28,     0,   287,     0,    38,    39,   288,
-      31,     0,   289,   290,   291,   292,    41,    42,     0,   293,
-     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
-       0,     0,   295,     0,   296,    38,    39,     0,     0,     0,
-       0,    45,    46,   297,   298,   299,   300,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-       0,     0,   258,     0,   283,   284,    31,   285,     0,    45,
-      46,     0,     0,     0,     0,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,   286,    34,    26,    27,    28,     0,   287,
-       0,    38,    39,   288,    31,     0,   289,   290,   291,   292,
-      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,     0,     0,   295,     0,   158,    38,
-      39,     0,     0,     0,     0,    45,    46,   297,   298,   299,
-     300,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,     0,     0,   158,     0,   283,   284,
-      31,   285,     0,    45,    46,     0,     0,     0,     0,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,   286,    34,    26,
-      27,    28,     0,   287,     0,    38,    39,   288,    31,     0,
-     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
-     295,     0,   592,   208,    39,     0,     0,     0,     0,    45,
+       0,   295,     0,   592,     0,     0,     0,     0,     0,    45,
       46,   297,   298,   299,   300,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
-     271,     0,   283,   284,    31,   285,     0,    45,    46,     0,
+      23,    24,    25,     0,   258,    26,    27,    28,     0,     0,
+      45,    46,   283,   284,    31,   285,     0,     0,     0,     0,
        0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
@@ -2722,1104 +2699,1089 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       34,     0,     0,     0,   295,     0,   379,    38,    39,     0,
-       0,     0,     0,    45,    46,   297,   298,   299,   300,   467,
-       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
+       0,     0,    45,    46,   297,   298,   299,   300,   467,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,   158,    26,    27,    28,     0,     0,
+      45,    46,     0,     0,    31,     0,     0,     0,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,    34,     0,    35,     0,    36,    31,     0,    38,
+      39,     0,     0,     0,     0,     0,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,   338,     0,    26,    27,    28,     0,
-       0,    45,    46,     0,     0,    31,     0,     0,     0,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,  -294,     0,    26,
-      27,    28,     0,    34,     0,    35,     0,    36,    31,     0,
-      38,    39,     0,     0,     0,     0,     0,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,  -294,    34,    26,    27,    28,
-       0,    37,     0,   336,   337,    40,    31,  -294,     0,     0,
-      -3,     0,    41,    42,     0,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,    34,    26,    27,    28,   634,    37,
-     338,   336,   337,    40,    31,  -294,     0,    45,    46,     0,
-      41,    42,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,    34,    26,    27,    28,     0,    37,   338,    38,
-      39,    40,    31,     0,     0,    45,    46,     0,    41,    42,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      22,    23,    24,    25,     0,    34,    26,    27,    28,     0,
+      37,     0,    38,    39,    40,    31,     0,     0,     0,    -3,
+       0,    41,    42,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,    34,    26,    27,    28,    43,    37,   158,
+      38,    39,    40,    31,     0,    45,    46,     0,     0,    41,
+      42,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,    34,    26,    27,    28,    43,    37,    44,   208,    39,
+      40,    31,     0,    45,    46,     0,     0,    41,    42,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,  -291,    34,
+      26,    27,    28,    43,    37,   271,   336,   337,    40,    31,
+       0,    45,    46,     0,     0,    41,    42,     0,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,  -291,    34,    26,    27,
+      28,   634,     0,   338,    38,    39,     0,    31,  -291,    45,
+      46,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-      34,    26,    27,    28,    43,    37,    44,   208,    39,    40,
-      31,     0,     0,    45,    46,     0,    41,    42,     0,     8,
+       0,    26,    27,    28,     0,    34,     0,     0,     0,   634,
+      31,   338,    38,    39,     0,     0,  -291,    45,    46,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,     0,    34,    26,
-      27,    28,    43,    37,   271,   336,   337,    40,    31,   685,
-       0,    45,    46,     0,    41,    42,     0,     8,     9,    10,
+      27,    28,     0,     0,     0,   208,    39,     0,    31,   338,
+       0,     0,     0,     0,     0,    45,    46,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,  -294,    34,    26,    27,    28,
-     634,     0,   338,    38,    39,     0,    31,     0,     0,    45,
-      46,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,     0,     0,     0,     0,
-     686,    38,    39,     0,   687,  -294,     0,    45,    46,     0,
+      21,    22,    23,    24,    25,     0,    34,    26,    27,    28,
+       0,     0,   271,    38,    39,     0,    31,     0,    45,    46,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
-      26,    27,    28,     0,     0,     0,     0,     0,   338,    31,
-     685,     0,     0,     0,     0,    45,    46,     0,     8,     9,
+      26,    27,    28,     0,    34,     0,     0,     0,     0,    31,
+     338,    38,    39,     0,     0,     0,    45,    46,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,     0,    34,    26,    27,
-      28,     0,     0,     0,    38,    39,     0,    31,   685,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,    34,     0,     0,    31,     0,
-       0,   686,    38,    39,     0,  1099,     0,     0,    45,    46,
+      28,     0,     0,     0,    38,    39,     0,    31,   685,     0,
+       0,     0,     0,     0,    45,    46,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
-       0,     0,     0,    38,    39,     0,     0,     0,     0,   686,
-       0,     0,     0,  1231,     0,     0,    45,    46,     0,     0,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-     686,    26,    27,    28,     0,     0,     0,    45,    46,     0,
-      31,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
-       0,    26,    27,    28,     0,     0,     0,     0,    34,     0,
-      31,     0,     0,     0,     0,    38,    39,     0,     0,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,    34,    26,
-      27,    28,   485,   486,   487,    38,    39,     0,    31,     0,
-       0,     0,   592,     0,     0,     0,     0,     0,     0,    45,
-      46,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
-       0,     0,    44,    38,    39,     0,     0,     0,     0,    45,
-      46,     2,   207,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
-       0,     0,     0,     0,     0,     0,    31,     0,   283,   284,
-       0,   285,  1049,     0,  1050,     0,     0,  1051,  1052,  1053,
-    1054,  1055,  1056,  1057,  1058,     0,     0,  1547,  1059,     0,
-       0,     0,  1060,  1061,    34,    33,    35,   286,    36,     0,
-       0,    38,    39,  1062,     0,     0,     0,   288,     0,     0,
-     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+       0,   592,    38,    39,     0,     0,     0,    45,    46,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,    44,
+       0,     0,     0,     0,    31,    45,    46,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  -415,     0,     0,
-     295,     0,   379,     0,     0,   172,     0,     0,     0,    45,
-      46,   297,   298,   299,   300,     0,     0,     0,     0,  1064,
-       0,   283,   284,  -129,   285,  1049,     0,  1050,     0,     0,
-    1051,  1052,  1053,  1054,  1055,  1056,  1057,  1058,     0,     0,
-       0,  1059,     0,     0,     0,  1060,  1061,     0,    33,     0,
-     286,     0,     0,     0,     0,     0,  1062,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,    38,
+      39,   283,   284,     0,   285,  1041,     0,  1042,     0,     0,
+    1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,     0,
+    1524,  1051,     0,     0,     0,  1052,  1053,     0,    33,     0,
+     286,     0,     0,     0,     0,  -412,  1054,     0,     0,     0,
      288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
      293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   295,     0,   379,     0,     0,   172,     0,
+       0,    45,    46,   297,   298,   299,   300,     0,     0,   283,
+     284,  1056,   285,  1041,     0,  1042,  -126,     0,  1043,  1044,
+    1045,  1046,  1047,  1048,  1049,  1050,     0,     0,     0,  1051,
+       0,     0,     0,  1052,  1053,     0,    33,     0,   286,     0,
+       0,     0,     0,     0,  1054,     0,     0,     0,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   295,     0,   379,     0,     0,   172,     0,     0,    45,
+      46,   297,   298,   299,   300,     0,     0,     0,     0,  1056,
+       0,     0,     0,     0,  -126,     2,   207,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
+      31,     0,   283,   284,     0,   285,  1041,     0,  1042,  1398,
+    1399,  1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,
+       0,  1524,  1051,     0,     0,     0,  1052,  1053,    34,    33,
+      35,   286,    36,     0,     0,    38,    39,  1054,     0,     0,
+       0,   288,     0,     0,   289,   290,   291,   292,    41,    42,
+       0,   293,   294,     0,     0,     0,     0,  1311,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   379,     0,     0,   172,
        0,     0,    45,    46,   297,   298,   299,   300,     0,     0,
-       0,     0,  1064,     0,     0,     0,  -129,     2,   207,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
-       0,     0,    31,     0,   283,   284,     0,   285,  1049,     0,
-    1050,  1417,  1418,  1051,  1052,  1053,  1054,  1055,  1056,  1057,
-    1058,     0,     0,  1547,  1059,     0,     0,     0,  1060,  1061,
-      34,    33,    35,   286,    36,     0,     0,    38,    39,  1062,
-       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
-      41,    42,     0,   293,   294,     0,     0,     0,     0,  1325,
+     283,   284,  1056,   285,  1041,     0,  1042,  1398,  1399,  1043,
+    1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,     0,     0,
+    1051,     0,     0,     0,  1052,  1053,     0,    33,     0,   286,
+       0,     0,     0,     0,     0,  1054,     0,     0,     0,   288,
+       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   295,     0,   379,     0,
-       0,   172,     0,     0,     0,    45,    46,   297,   298,   299,
-     300,     0,     0,   283,   284,  1064,   285,  1049,     0,  1050,
-    1417,  1418,  1051,  1052,  1053,  1054,  1055,  1056,  1057,  1058,
-       0,     0,     0,  1059,     0,     0,     0,  1060,  1061,     0,
-      33,     0,   286,     0,     0,     0,     0,     0,  1062,     0,
-       0,     0,   288,     0,     0,   289,   290,   291,   292,    41,
-      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
+       0,     0,   295,     0,   379,     0,     0,   172,     0,     0,
+      45,    46,   297,   298,   299,   300,     0,     0,   283,   284,
+    1056,   285,  1041,     0,  1042,     0,     0,  1043,  1044,  1045,
+    1046,  1047,  1048,  1049,  1050,     0,     0,     0,  1051,     0,
+       0,     0,  1052,  1053,     0,    33,     0,   286,     0,     0,
+       0,     0,     0,  1054,     0,     0,     0,   288,     0,     0,
+     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,     0,     0,     0,     0,   283,   284,     0,   285,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   295,     0,   379,     0,     0,
-     172,     0,     0,     0,    45,    46,   297,   298,   299,   300,
-       0,     0,   283,   284,  1064,   285,  1049,     0,  1050,     0,
-       0,  1051,  1052,  1053,  1054,  1055,  1056,  1057,  1058,     0,
-       0,     0,  1059,     0,     0,     0,  1060,  1061,     0,    33,
-       0,   286,     0,     0,     0,     0,     0,  1062,     0,     0,
+     295,     0,   379,     0,     0,   172,     0,     0,    45,    46,
+     297,   298,   299,   300,   286,     0,     0,     0,  1056,     0,
+     640,     0,   140,   141,   288,     0,     0,   289,   290,   291,
+     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
+       0,     0,   283,   284,     0,   285,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   295,     0,   641,
+       0,   642,   380,     0,     0,    45,    46,   297,   298,   299,
+     300,   286,     0,     0,     0,     0,     0,   287,     0,     0,
        0,   288,     0,     0,   289,   290,   291,   292,    41,    42,
-       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
-     283,   284,     0,   285,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   295,     0,   379,     0,     0,   172,
-       0,     0,     0,    45,    46,   297,   298,   299,   300,   286,
-       0,     0,     0,  1064,     0,   287,     0,     0,     0,   288,
-       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
-     294,     0,     0,     0,     0,     0,     0,     0,   283,   284,
-       0,   285,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   295,     0,   379,     0,     0,   283,   284,     0,
-     285,   344,    46,   297,   298,   299,   300,   286,     0,     0,
+       0,   293,   294,     0,     0,     0,     0,     0,     0,   283,
+     284,     0,   285,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   295,     0,   379,     0,   283,   284,
+       0,   285,   708,    46,   297,   298,   299,   300,   286,     0,
+       0,     0,     0,     0,   287,     0,     0,     0,   288,     0,
+       0,   289,   290,   291,   292,    41,    42,   286,   293,   294,
        0,     0,     0,   287,     0,     0,     0,   288,     0,     0,
-     289,   290,   291,   292,    41,    42,   286,   293,   294,     0,
-       0,     0,   287,     0,     0,     0,   288,     0,     0,   289,
-     290,   291,   292,    41,    42,     0,   293,   294,     0,     0,
-     506,     0,     0,     0,     0,   283,   284,     0,   285,    45,
-      46,   297,   298,   299,   300,     0,     0,     0,     0,   295,
-       0,     0,     0,     0,   283,   284,     0,   285,    45,    46,
+     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
+       0,   295,     0,   379,     0,   283,   284,     0,   285,   344,
+      46,   297,   298,   299,   300,     0,     0,     0,     0,     0,
+     506,     0,     0,     0,   283,   284,     0,   285,    45,    46,
      297,   298,   299,   300,   286,     0,     0,     0,     0,     0,
      287,     0,     0,     0,   288,     0,     0,   289,   290,   291,
      292,    41,    42,   286,   293,   294,     0,     0,     0,   287,
        0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
-      41,    42,     0,   293,   294,     0,     0,   511,     0,     0,
-       0,     0,     0,     0,     0,     0,    45,    46,   297,   298,
-     299,   300,     0,     0,     0,     0,   514,     0,     0,     0,
-       0,     0,     0,     0,     0,    45,    46,   297,   298,   299,
-     300,     2,   207,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+      41,    42,     0,   293,   294,     0,     0,   295,     0,     0,
+       0,   283,   284,     0,   285,    45,    46,   297,   298,   299,
+     300,     0,     0,     0,     0,     0,   511,     0,     0,     0,
+       0,     0,     0,     0,    45,    46,   297,   298,   299,   300,
+     286,     0,     0,     0,     0,     0,   287,     0,     0,     0,
+     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
+     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   514,     0,     0,     0,     0,     0,     0,
+       0,    45,    46,   297,   298,   299,   300,     2,   207,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,    35,     0,    36,    37,
-       0,   175,   176,    40,     0,     0,     0,     0,     0,     0,
-      41,    42,   206,     2,   207,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
-      27,    28,     0,     0,     0,     0,     0,     0,    31,     0,
+      34,     0,    35,     0,    36,    37,     0,   175,   176,    40,
+       0,     0,     0,     0,     0,     0,    41,    42,   206,     2,
+     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
-      36,     0,     0,   208,    39,   467,     2,   207,     4,     5,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,   208,
+      39,   467,     2,   207,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,     0,     0,     0,     0,    31,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
+       0,     0,    38,    39,     2,   207,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,   485,   486,   487,    34,     0,    35,
+      31,    36,     0,     0,   208,    39,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+       0,     0,     0,     0,     0,    38,    39
+};
+
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-1310))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
+static const yytype_int16 yycheck[] =
+{
+       0,     1,   240,   205,   186,   186,   117,     0,    43,   534,
+      43,    43,   600,   756,   646,     1,   749,   187,   521,     0,
+     186,   186,   186,   157,   169,   170,   749,   749,   186,   106,
+     220,   602,    32,   186,   345,   349,     0,   188,   280,    32,
+     157,   513,   600,    43,   874,    43,   603,   874,   349,    49,
+     620,    32,   609,   733,     0,   983,    49,   600,   492,   571,
+       0,     1,   496,    63,   602,   187,    66,    32,    32,    69,
+      63,   692,    43,    66,    64,     0,    69,  1040,    39,   156,
+       1,   600,    57,    69,   266,   266,    32,    43,    51,  1398,
+     364,   202,    32,    63,   368,  1321,   418,   267,    82,   600,
+     266,   266,   266,  1052,  1053,  1033,   106,    32,   266,   600,
+     600,   262,   263,   266,   114,    72,   438,   117,   118,   109,
+     282,    72,  1402,    96,   446,    39,    66,   695,    39,    69,
+      28,   109,   107,    39,    39,   110,    95,    39,    82,   128,
+      39,    66,   131,  1021,    82,   267,   109,   147,   148,   122,
+     111,   186,    11,   186,   186,   148,   156,   157,     0,   295,
+    1469,   161,   132,  1020,  1021,   109,    44,    45,   161,     0,
+     129,   482,   905,   109,   488,   132,     0,     1,    72,  1128,
+      78,   132,   905,   905,   687,    49,   186,   187,   186,   109,
+      32,   257,   130,  1419,   187,   109,   109,   111,   109,   718,
+     111,    32,   202,   109,   109,   111,   111,   109,    32,   111,
+     210,   131,    43,  1040,    72,   186,  1496,   210,    49,    82,
+     410,  1501,   222,   117,   812,    83,    84,   718,   718,   222,
+     186,   266,    63,   266,   266,    66,   406,   115,    69,  1452,
+     240,  1521,    85,   986,   219,    69,   112,   110,  1528,    82,
+     114,   109,   252,   824,   812,   116,   107,   814,   114,   252,
+     260,    44,    45,     3,   341,   265,   266,   267,   490,   812,
+     113,   252,   272,  1486,   267,  1488,   257,    82,   111,   900,
+     131,   793,   222,   147,   406,   396,   824,   252,   252,    49,
+     426,   427,   924,   812,   371,   295,     3,   222,   273,   433,
+      96,   602,  1501,   116,   109,   280,   252,   307,     0,   620,
+     480,   812,   252,   424,   625,   589,   433,   148,   110,   430,
+     112,   812,   812,   323,   116,  1288,   122,   252,   328,  1528,
+     161,   114,   253,    44,    45,   328,     0,    82,   906,   131,
+     132,   341,   504,   110,   932,   345,   210,  1225,   482,   349,
+     350,   109,   418,   111,   114,   186,   187,   631,   480,   681,
+     109,   116,   933,   130,   364,   110,    90,    91,   368,  1049,
+     506,   371,   438,   348,   932,   511,   240,   132,   514,   210,
+     446,  1211,   604,   951,  1211,   130,   608,   426,   427,   932,
+     365,   222,   526,    72,   369,   112,   396,  1275,   116,   116,
+     285,   125,   126,   114,    83,    84,   406,   629,   272,   526,
+     252,   633,   130,   406,  1472,   257,   110,  1274,  1275,    55,
+    1478,   252,   307,   308,   424,   350,   426,   427,   252,   999,
+     430,   567,   111,   433,   745,   266,   130,   418,   112,   116,
+    1498,   110,   116,   307,   111,  1503,   113,   116,   525,  1501,
+     210,  1008,  1009,   130,   454,   494,   590,   438,  1386,  1387,
+     345,  1288,    98,   130,   967,   446,   635,   636,   131,  1521,
+     229,   112,   472,   590,   513,   116,  1528,   116,  1441,   110,
+     480,   345,   482,   652,   484,  1448,   116,   480,   488,   248,
+     732,   484,   110,   132,   494,  1127,   381,   328,   116,   116,
+     130,   482,   647,   484,   666,   656,   506,   941,   508,   981,
+     824,   511,   272,   513,   514,   132,  1394,   687,   349,   109,
+     484,   521,   109,   824,   116,   525,   526,   109,  1099,   803,
+     109,   111,   111,   113,   808,   295,  1499,  1394,   484,   578,
+     132,   710,   109,   654,   484,   116,   467,   307,   473,  1117,
+     130,     4,     5,     6,     7,     8,     9,   116,   194,   484,
+     110,   132,   426,   427,   116,   687,   116,   116,   116,   116,
+     570,   571,   116,   132,   736,   406,   418,   109,   578,   116,
+     132,   217,  1085,   132,   132,   132,   109,  1090,   132,   589,
+     590,   227,   117,   904,   594,   132,   438,   116,   123,   124,
+     600,   116,   602,   109,   446,   111,   110,   528,  1288,  1177,
+    1178,   745,   533,   132,  1441,   681,    69,   132,    71,   110,
+     620,  1448,   896,   937,   846,   625,    72,   627,    74,    75,
+     494,   631,   801,   110,   634,   635,   636,    83,    84,    72,
+     110,   707,   484,   112,   590,   110,   621,   116,   112,   513,
+      83,    84,   652,   484,   654,   109,   910,   488,   912,   295,
+     484,   582,   637,   109,   549,   550,   551,   744,   114,   112,
+     109,   861,  1499,   116,    72,   809,   651,   115,    72,   132,
+      74,    75,  1362,   109,   684,    83,    84,   687,   999,    83,
+      84,   881,   809,   109,   454,   111,    72,   622,    74,    75,
+     681,    85,    86,    87,   109,   943,   111,    83,    84,   132,
+     710,   711,   712,   111,   578,   109,   938,  1115,   718,   719,
+     114,  1119,   867,   905,   905,   109,   707,   111,    64,   113,
+     114,   109,   653,   111,   655,   112,   110,   907,   114,   905,
+     905,   905,   116,   109,   744,   745,   506,   905,   508,   749,
+     750,   511,   905,   109,   514,   111,   620,   732,   109,    70,
+     111,   625,   109,    74,   745,  1445,    77,  1447,    79,   600,
+     904,   602,  1505,   698,   132,    86,   556,   557,   558,   559,
+    1305,     3,  1505,  1505,   705,   907,   114,   712,    10,    11,
+      12,    13,    14,   793,     4,     5,     6,     7,     8,     9,
+     110,   801,   109,   803,   111,   805,   116,   443,   808,   809,
+    1012,   114,   812,   109,  1382,   111,    72,    39,    74,    75,
+    1500,   117,   118,    33,   824,    72,   903,    83,    84,   114,
+    1398,   132,   110,   469,   132,  1146,    83,    84,   116,   681,
+      10,    11,    12,    13,    14,    67,    72,   110,  1122,   109,
+      76,   109,   110,   116,    82,   111,   687,    83,    84,    69,
+     110,    71,    49,   809,   111,   707,   116,   110,   109,    39,
+     506,   756,   109,   116,   874,   511,    63,   112,   514,    66,
+     805,    82,    69,   109,   118,   111,  1020,   718,   719,   110,
+    1035,   117,   118,   874,   127,   116,   896,    67,    88,    89,
+    1468,  1469,   213,   903,   904,   905,    72,   907,     4,     5,
+       6,     7,     8,     9,  1225,  1085,   110,    83,    84,   919,
+    1090,   128,   116,   904,   684,   110,    94,   109,   874,   111,
+      30,   116,   932,   933,   874,   117,   118,   937,   131,   109,
+      72,   111,   942,   943,    76,   111,   111,   117,   118,   874,
+     109,    83,    84,  1115,   110,   109,   942,  1119,  1120,   112,
+     116,   148,   109,  1085,   111,     0,     1,   967,  1090,   112,
+     117,   118,   110,    69,   161,    71,   110,   109,  1481,   119,
+     120,   812,   116,    83,    84,   117,   118,   112,    10,    11,
+      12,    13,    14,   824,    29,    30,  1107,    32,   110,   999,
+     187,   110,   942,   110,   116,    92,    93,    72,    43,    74,
+      75,    76,  1146,    72,    49,    74,    75,    39,    83,    84,
+    1020,  1021,    57,   210,    83,    84,   110,  1530,    63,   115,
+     116,    66,   874,   669,    69,   222,   957,   109,   110,   111,
+    1040,   352,   678,   354,   109,    67,   682,   110,    83,    84,
+     874,   109,   117,   118,  1190,  1191,    72,  1193,   979,  1040,
+      76,   110,   983,   110,  1200,   110,  1202,    83,    84,   116,
+     112,   116,   107,  1235,   905,   110,   907,  1002,   110,   943,
+    1080,   111,   117,   114,   116,  1085,   110,   109,   116,   111,
+    1090,   131,   116,   109,  1040,   117,   118,   110,   111,  1099,
+    1040,   117,   118,   506,    66,   508,   937,  1107,   511,    58,
+      59,   514,  1033,   148,   999,  1040,   115,   116,   942,    44,
+      45,   156,  1122,   552,   553,    72,   161,    74,    75,    76,
+    1207,   442,   109,   110,   111,   999,    83,    84,   560,   561,
+    1274,   328,   554,   555,   244,   114,  1146,   114,   109,   110,
+     111,   186,   187,   109,   112,  1040,   118,   110,   110,   919,
+    1322,   112,   109,    29,  1326,  1146,   112,   202,   112,     3,
+     117,   118,   109,   110,   111,   210,    10,    11,    12,    13,
+      14,    58,    59,    60,   219,   112,   116,   222,  1188,  1189,
+    1248,  1249,  1250,   110,   229,   130,   130,   130,  1040,   161,
+     110,   112,   114,  1189,   112,    39,   115,  1207,   110,   244,
+     115,  1211,   115,   248,   109,   116,  1040,   252,   253,   406,
+       1,   110,  1358,   110,    72,  1225,    74,    75,    76,  1229,
+    1211,   266,   267,    67,   132,    83,    84,   116,   273,   110,
+     110,   110,   110,  1229,  1225,   280,   110,   110,  1188,  1189,
+     110,   116,   110,   110,  1085,   110,   110,   110,   110,  1090,
+     222,  1423,   898,  1188,   110,  1211,   110,  1378,    49,   110,
+     110,  1211,   115,   874,  1274,  1275,    29,  1515,   110,   130,
+     380,   131,   112,  1283,   112,   116,  1211,   110,  1288,  1229,
+     110,   116,   110,   328,   130,   116,   112,   114,   260,   110,
+     110,   464,   110,   265,   116,   112,   110,  1288,   110,   110,
+     116,   116,   112,   348,   349,    10,    11,    12,    13,    14,
+    1080,  1321,   109,  1505,  1505,   106,   109,  1248,  1249,  1250,
+     365,   109,   109,   114,   369,  1321,  1506,   109,   130,  1505,
+    1505,  1505,  1288,  1283,    39,   380,     3,  1505,  1288,   112,
+     132,   115,  1505,    10,    11,    12,    13,    14,  1283,   110,
+    1530,   396,   110,  1288,   110,  1189,   147,   128,   115,  1211,
+    1481,   406,    67,   115,   464,   156,   114,   695,  1378,   112,
+     132,  1321,    39,   110,  1506,   116,   112,  1211,   350,   424,
+     112,   491,   110,   493,  1394,   430,   110,   432,   110,   112,
+     110,   112,  1377,   112,   112,  1229,   112,   112,  1530,    72,
+      67,    74,    75,    76,   109,  1051,   111,    47,   115,  1419,
+      83,    84,   117,   118,    72,   206,    74,    75,    76,   210,
+     132,   132,   467,  1419,   132,    83,    84,   472,   132,   132,
+     110,  1441,  1043,   115,   130,   480,  1288,   115,  1448,   484,
+    1450,   110,  1452,   488,   112,   109,   491,   112,   493,   240,
+    1441,   109,   112,   112,  1288,  1386,  1387,  1448,   786,   431,
+    1505,   112,  1505,  1505,   112,   110,   110,    60,   109,  1419,
+     112,  1481,    66,   112,   109,   132,  1486,   110,  1488,   110,
+     114,   272,    76,   528,   275,  1441,   112,  1321,   533,  1499,
+     112,  1441,  1448,  1424,   110,  1505,  1506,   670,  1448,   112,
+     110,   473,   109,  1506,   295,  1515,  1441,    96,  1499,    96,
+      85,    86,    87,  1448,   109,   132,   307,   115,   110,    72,
+    1530,    74,    75,    76,   118,   110,   110,  1530,   110,    42,
+      83,    84,   642,   116,   109,   863,   111,   582,   113,   114,
+     130,   132,   110,  1499,   589,   110,   132,    96,    96,  1499,
+     341,  1482,   132,   110,   345,   600,   109,   602,   132,   110,
+    1491,   132,   112,   110,  1499,   110,   132,   161,   112,   115,
+     670,   109,   132,   364,   115,   115,   621,   368,   906,   110,
+     371,   691,   110,   693,   110,  1419,   110,   697,  1056,  1441,
+     132,   564,   637,   562,   977,   565,  1448,   642,   563,   566,
+    1211,  1211,  1469,  1364,  1540,  1298,   651,  1441,   653,   654,
+     655,  1120,  1326,  1448,  1448,   912,   789,    66,   684,  1071,
+     684,  1090,   594,   951,   920,   697,   799,   582,   222,   971,
+     867,   648,   722,  1229,    83,   426,   427,   939,   570,   484,
+     813,  1515,   687,   732,   570,   570,   691,  1499,   693,    -1,
+     622,  1297,   697,    -1,    -1,   627,    -1,    -1,   986,    -1,
+     705,    -1,    -1,   454,  1505,  1499,   260,    -1,    -1,   118,
+      -1,   265,    -1,   718,   719,    -1,   467,    -1,    -1,    -1,
+    1450,    -1,  1452,    -1,    -1,    -1,   280,   732,    -1,   789,
+      -1,    -1,    -1,  1304,    -1,    -1,    -1,    -1,    -1,   799,
+      -1,   492,    -1,   494,    -1,   496,    -1,    -1,    -1,  1037,
+      -1,    -1,   161,   813,    -1,   506,  1486,   508,  1488,    -1,
+     511,    -1,   513,   514,    -1,    -1,   698,    57,    -1,    10,
+      11,    12,    13,    14,   525,    -1,    -1,    -1,    -1,    72,
+     712,    74,    75,    76,    -1,  1356,    -1,    -1,  1359,    -1,
+      83,    84,    -1,    -1,    -1,    -1,   350,   867,    39,    -1,
+      -1,    -1,    -1,   873,    -1,    -1,    -1,   812,    -1,    -1,
+      -1,    -1,    -1,   222,    -1,    -1,   109,   107,   111,   824,
+     110,    -1,    -1,    -1,   117,   118,    67,   578,    -1,  1117,
+      -1,  1402,    -1,    -1,    -1,    -1,  1407,   130,   589,    -1,
+      -1,    -1,    -1,  1449,   914,  1451,    -1,    -1,    -1,    -1,
+      -1,   260,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,
+      -1,    -1,   867,    -1,  1435,    -1,   156,   670,   873,   620,
+      -1,    -1,    -1,   805,   625,    -1,    -1,   431,    -1,  1485,
+     631,  1487,     0,     1,  1017,  1018,    -1,    -1,    -1,  1177,
+    1178,   896,    -1,    -1,   448,    -1,    -1,    -1,    -1,    -1,
+     905,   971,   907,    -1,    -1,    -1,    -1,    -1,    -1,   914,
+      -1,    -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,   473,
+      -1,    -1,    -1,  1529,    -1,  1531,    -1,    -1,    -1,   219,
+      -1,    49,   937,   684,    -1,    -1,    -1,    -1,  1544,  1545,
+      -1,   350,  1075,  1076,    -1,    -1,    -1,    -1,  1519,    -1,
+      -1,    69,   957,    -1,  1525,    -1,    -1,  1017,  1018,    -1,
+      -1,    -1,    -1,    -1,    -1,  1536,   971,    -1,    -1,  1540,
+      -1,   722,    -1,    -1,   979,    -1,    -1,    -1,   983,     0,
+       1,    -1,    -1,   273,    -1,    -1,   789,    -1,   106,    -1,
+     280,    -1,    -1,   744,    -1,    -1,   799,    -1,    -1,    -1,
+      -1,  1071,    -1,    -1,    -1,     0,    -1,    -1,    -1,    -1,
+     813,    32,    -1,    -1,    -1,  1075,  1076,    -1,    -1,    -1,
+      -1,    -1,   431,    -1,    -1,    -1,    -1,    -1,  1033,    -1,
+     148,    -1,    -1,    -1,    -1,    -1,    -1,    32,   156,   157,
+     594,    -1,    -1,    -1,    -1,    66,    -1,    -1,    69,    -1,
+      -1,    -1,   803,    -1,    -1,    -1,    -1,   808,   348,    -1,
+      -1,    -1,    -1,    -1,   473,    -1,  1071,    -1,   622,   187,
+    1002,    -1,    -1,   627,    69,   365,    -1,    -1,    -1,   369,
+    1085,    -1,    -1,    -1,   202,  1090,    -1,   205,   206,    -1,
+    1223,    -1,   210,    -1,  1382,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1398,    -1,    -1,   231,  1184,    -1,    -1,   235,    -1,   237,
+      -1,    -1,  1255,    -1,    -1,    -1,    -1,    -1,   246,    -1,
+    1263,  1264,  1265,    -1,   252,    -1,   157,    -1,    -1,   257,
+      -1,    -1,   432,    -1,   698,   896,    -1,    -1,    -1,   267,
+      -1,    -1,   903,    -1,    -1,    -1,    -1,   275,   712,    -1,
+      -1,     0,   157,  1223,    -1,    -1,    -1,    -1,   919,    -1,
+      -1,    72,    -1,    74,    75,    76,    -1,    -1,   732,  1184,
+    1468,  1469,    83,    84,    -1,   594,    -1,    -1,    -1,    -1,
+     941,   942,   943,    32,  1327,  1255,    -1,    -1,    -1,    -1,
+      -1,   222,  1207,  1263,  1264,  1265,    -1,    -1,   109,    -1,
+     111,    -1,    -1,   622,  1017,  1018,   117,   118,   627,    -1,
+      -1,    -1,    -1,   341,    -1,    -1,    -1,   345,    -1,    -1,
+      69,   252,    -1,   351,    -1,    -1,   231,    -1,    -1,    -1,
+      -1,    -1,    -1,  1248,  1249,  1250,   364,    -1,   999,    -1,
+     368,   805,    -1,   371,    -1,    -1,  1188,   252,    -1,    -1,
+      -1,    -1,   257,    -1,    -1,    -1,    -1,  1327,    -1,    -1,
+      -1,    -1,  1075,  1076,    -1,    -1,    -1,    -1,    -1,    -1,
+      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,   698,
+      -1,    83,    84,    72,    -1,    74,    75,    76,    -1,   589,
+     418,    -1,    -1,   712,    83,    84,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   433,    -1,   109,   157,   111,
+     438,    -1,    -1,    -1,    -1,   117,   118,    -1,   446,  1080,
+     109,   621,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
+      -1,    -1,    -1,    -1,    -1,    -1,   464,   637,    -1,   467,
+      -1,  1283,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,
+      -1,   651,    -1,    -1,   482,    -1,   484,    -1,    -1,    -1,
+      -1,  1122,  1377,  1378,   492,    -1,    -1,    -1,   496,    -1,
+      -1,  1386,  1387,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,    -1,    -1,    -1,   805,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   525,   526,    -1,
+      -1,    -1,   433,   252,    -1,    -1,    -1,   131,   257,  1424,
+      -1,    -1,    -1,   418,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,
+      -1,    -1,   732,   438,    -1,    -1,    -1,    -1,  1002,    -1,
+      -1,   446,  1255,   571,    -1,    -1,  1207,    -1,    -1,    -1,
+    1263,  1264,  1265,   484,    -1,    -1,    -1,    -1,    -1,   464,
+      -1,   589,   590,    -1,    -1,    -1,  1481,  1482,  1229,    -1,
+      -1,    -1,    -1,    -1,   602,    -1,  1491,   482,    -1,   484,
+      -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,
+    1505,  1506,   620,    -1,    -1,   526,    -1,   625,    -1,    -1,
+      -1,    -1,   351,   631,    -1,    -1,   634,   635,   636,    -1,
+      -1,    -1,    66,    -1,  1327,  1530,    -1,    -1,    72,    -1,
+      -1,   526,    76,    -1,   652,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   670,    -1,    -1,    10,    11,    12,    13,    14,
+      -1,    -1,    -1,   681,    -1,   109,    -1,   111,    -1,   590,
+    1321,    -1,    -1,   117,   118,   119,   120,   121,   122,   418,
+      -1,    -1,    -1,    -1,    39,    -1,   130,    -1,    -1,   707,
+      -1,    -1,   710,  1002,   433,   590,    -1,    -1,    -1,   438,
+      -1,   719,    -1,    -1,   722,    -1,   896,   446,    -1,    -1,
+      -1,    -1,    67,   634,   635,   636,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    -1,   464,   744,   745,    83,    84,
+      -1,   652,   750,    -1,  1188,    -1,    -1,    -1,    -1,   634,
+     635,   636,    -1,   482,    -1,   484,    -1,    10,    11,    12,
+      13,    14,    -1,    -1,   109,    -1,   111,   652,    -1,    -1,
+      -1,    -1,   117,   118,    -1,    -1,    -1,    -1,  1419,    -1,
+      -1,   789,    -1,    -1,    -1,   670,    39,    -1,    -1,    -1,
+      -1,   799,    -1,   801,    -1,   803,   681,   526,   806,   710,
+     808,   809,    -1,    -1,    -1,   813,    -1,    -1,    -1,  1450,
+      -1,  1452,    -1,    -1,    67,   823,    -1,    -1,    -1,    72,
+      -1,    -1,   707,    76,    -1,   710,    -1,    -1,    -1,    -1,
+      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1283,
+      -1,     0,    -1,    -1,    -1,  1486,    -1,  1488,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
+     745,   590,    -1,    -1,   117,   118,   874,    -1,     0,    -1,
+     190,    -1,    -1,    32,  1515,    -1,    -1,   197,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   896,  1188,
+     801,    -1,    -1,    -1,    -1,   903,   904,    -1,   809,   907,
+      32,    -1,    -1,    -1,   789,   634,   635,   636,    -1,    -1,
+      69,    -1,    -1,    -1,   799,    -1,   801,    -1,    -1,    -1,
+      -1,   806,    -1,   652,   809,   933,    -1,    -1,   813,    -1,
+      -1,    -1,    -1,   941,   942,    -1,    -1,    69,    -1,    -1,
+      -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   269,
+      -1,    -1,   681,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   874,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   707,    -1,
+      -1,   710,    -1,    -1,  1283,    -1,    -1,    -1,    -1,   874,
+      -1,   999,    -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,
+      -1,    -1,    -1,   323,  1012,    -1,    -1,    -1,    -1,  1017,
+    1018,   331,  1020,  1021,   334,    -1,   745,    -1,    -1,   904,
+      -1,    -1,    -1,    -1,    -1,   157,    -1,  1207,    -1,    -1,
+      -1,   942,  1040,    -1,    -1,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+     789,    -1,    30,    31,    32,    -1,    -1,  1075,  1076,    -1,
+     799,    39,   801,    -1,    -1,    -1,    -1,   806,   398,    -1,
+     809,    -1,   402,    -1,   813,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   252,    -1,    -1,    -1,    -1,   257,    67,
+      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,  1020,
+    1021,    -1,    -1,    -1,  1122,    83,    84,    -1,    -1,    -1,
+     252,    -1,    -1,    -1,    -1,   257,    -1,    -1,    -1,  1040,
+      -1,    -1,  1017,  1018,    -1,  1020,  1021,    -1,  1146,    -1,
+      -1,   109,    -1,   111,    -1,   874,    -1,    -1,    -1,   117,
+     118,    -1,    -1,    -1,    -1,  1040,    -1,    -1,    -1,   479,
+      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
+      -1,    -1,    -1,    -1,    -1,   904,    -1,    -1,    -1,    -1,
+      -1,  1189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1075,  1076,   351,    -1,    39,    -1,    -1,  1377,    -1,  1207,
+      -1,    -1,    -1,  1211,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1223,    -1,  1225,    -1,   351,
+      -1,  1229,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    -1,    26,    27,    28,    83,    84,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1255,    -1,    -1,
+     570,   571,    -1,    -1,    -1,  1263,  1264,  1265,    -1,   418,
+      -1,  1146,    -1,    -1,   109,    -1,  1274,  1275,    -1,    -1,
+      -1,    -1,   117,   118,   433,    -1,    -1,  1188,  1189,   438,
+    1288,    -1,    -1,    -1,    -1,    -1,   418,   446,  1017,  1018,
+      -1,  1020,  1021,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1211,   433,    -1,    -1,  1189,   464,   438,    -1,    99,    -1,
+     101,  1040,    -1,  1321,   446,    -1,    -1,    -1,  1229,  1327,
+      -1,    -1,    -1,   482,    -1,   484,  1211,    -1,    -1,    -1,
+      -1,    -1,   464,    -1,    -1,   126,    -1,   657,  1223,    -1,
+    1225,   661,    -1,    -1,    -1,    -1,  1075,  1076,    -1,    -1,
+     482,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1274,  1275,    -1,    -1,   526,    -1,    -1,
+    1255,    -1,  1283,    -1,    -1,    -1,    -1,  1288,  1263,  1264,
+    1265,    -1,    -1,    -1,    -1,    -1,  1394,    -1,    -1,  1274,
+    1275,   182,    -1,    -1,   526,    -1,    -1,    -1,    -1,   190,
+      -1,   192,   193,  1288,    -1,    -1,   197,    -1,   199,   200,
+    1321,  1419,    -1,    53,    -1,    55,    -1,  1146,    58,    59,
+      60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   590,    -1,  1441,    -1,    -1,    -1,    77,    -1,    -1,
+    1448,    -1,  1327,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    -1,    -1,    -1,    26,    27,    28,    -1,   590,    -1,
+    1189,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
+      14,    -1,    -1,   793,    -1,   634,   635,   636,   269,    -1,
+      -1,    -1,  1211,  1394,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1499,    -1,   652,  1223,    39,  1225,    -1,  1506,    -1,
+      -1,    -1,   634,   635,   636,    -1,    -1,    -1,  1419,  1394,
+      -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     652,    -1,   681,    67,    -1,    -1,  1255,    99,    72,   101,
+    1441,    -1,    76,    -1,  1263,  1264,  1265,  1448,   670,    83,
+      84,    -1,    -1,    -1,    -1,  1274,  1275,    -1,   707,   681,
+      -1,   710,    -1,    -1,    -1,    -1,  1441,    -1,    -1,  1288,
+      -1,    -1,    -1,  1448,    -1,   109,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   117,   118,   707,    -1,    -1,   710,    10,
+      11,    12,    13,    14,    -1,    -1,   745,    -1,  1499,    -1,
+      -1,   911,    -1,    -1,    -1,    -1,    -1,    -1,  1327,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
+     182,    -1,    -1,   745,  1499,    -1,    -1,    -1,    -1,    -1,
+     192,   193,    -1,    -1,    -1,   197,    -1,   199,   200,    -1,
+     789,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+     799,    72,   801,    74,    75,    76,    -1,   806,    -1,    -1,
+     809,    -1,    83,    84,   813,    -1,    -1,   789,    -1,    10,
+      11,    12,    13,    14,    -1,  1394,    -1,   799,   988,   801,
+      -1,    -1,    -1,    -1,   806,    -1,    -1,   809,   109,    -1,
+     111,   813,    -1,    -1,    -1,  1005,   117,   118,    39,    -1,
+      -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   344,    -1,   346,    -1,    -1,    -1,
+      -1,    -1,  1441,    -1,    -1,   874,    67,   357,   358,  1448,
+      39,    72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,
+      -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   874,    -1,    -1,   904,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    72,    -1,    74,    75,    76,   109,    -1,
+     111,    -1,    -1,  1083,    83,    84,   117,   118,    -1,    -1,
+    1499,    -1,   904,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   574,   575,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,
+      -1,    -1,    -1,  1123,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   603,    -1,    -1,   606,   607,    -1,   609,    -1,
+     611,   612,    -1,    -1,    -1,   616,   617,     3,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-       0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
-       0,    31,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
-       0,    35,     0,    36,     0,     0,    38,    39,     2,   207,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      26,    27,    28,    -1,    30,    31,    32,    33,  1017,  1018,
+      36,  1020,  1021,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1040,    -1,    -1,    -1,  1017,  1018,    -1,  1020,  1021,
+      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
+      -1,    -1,    78,    -1,    -1,    -1,     7,    -1,  1040,    10,
+      11,    12,    13,    14,    -1,    -1,  1075,  1076,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   111,    37,    38,    39,    40,
+      -1,   117,   118,  1075,  1076,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   754,   755,    66,    67,    -1,    -1,    -1,
+      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,  1146,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   574,   575,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,  1146,    -1,   117,   118,   119,   120,
+     121,   122,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1189,   603,    -1,    -1,   606,   607,    -1,   609,    -1,   611,
+     612,    -1,    -1,    -1,   616,   617,    -1,    -1,    -1,    -1,
+      -1,    -1,  1211,    -1,    -1,    -1,    -1,  1189,    -1,   699,
+      -1,   701,    -1,    -1,  1223,    -1,  1225,    -1,   708,   709,
+      -1,    -1,    -1,   713,    -1,    -1,    -1,    -1,    -1,  1211,
+      -1,    -1,    -1,    -1,    -1,   725,    -1,    -1,    -1,    -1,
+     730,  1223,    -1,  1225,    -1,    -1,  1255,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1263,  1264,  1265,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1274,  1275,    -1,   758,    -1,
+     911,    -1,    -1,  1255,    -1,   916,    -1,    -1,    -1,  1288,
+      -1,  1263,  1264,  1265,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1274,  1275,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1288,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1327,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      49,    -1,   754,   755,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1327,    -1,    66,    -1,    -1,
+       7,    -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   857,   858,   859,
+     860,    -1,   862,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      37,    38,    39,    40,    -1,  1394,    -1,   877,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,   118,
+      -1,   891,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
+      67,    -1,  1394,    -1,    -1,    72,    -1,    -1,    -1,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,   147,    86,
+      87,    -1,  1441,    -1,    -1,    -1,  1077,    -1,   157,  1448,
+      -1,   931,   161,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,  1441,
+     117,   118,   119,   120,   121,   122,  1448,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,   976,    30,    31,    32,
+    1499,   210,   982,    -1,   916,    -1,    39,   987,    -1,    -1,
+      -1,    -1,   992,   222,   994,    -1,    -1,    -1,   998,    -1,
+    1000,  1001,    -1,    -1,  1004,    -1,    -1,  1499,    -1,    -1,
+      -1,   240,    -1,  1013,    67,    -1,    -1,    -1,    -1,    -1,
+      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1031,  1032,    -1,    -1,    -1,   265,    -1,    -1,    -1,
+      -1,    -1,    -1,   272,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1206,    -1,    -1,  1058,    -1,
+      -1,  1061,    -1,    -1,   117,   118,   295,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,    -1,
+      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    76,    -1,    78,    -1,    80,    -1,
+      -1,    -1,    -1,    -1,  1104,    87,    -1,    -1,    -1,    -1,
+    1110,  1111,    -1,    -1,    -1,    -1,   345,    -1,    -1,    -1,
+      -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1130,    -1,    -1,  1133,    -1,    -1,   118,  1137,   120,   121,
+     122,    -1,    -1,    -1,    -1,  1077,    -1,    -1,    -1,    -1,
+    1150,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1163,    -1,  1165,  1166,  1167,  1168,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   161,
+      -1,  1181,    -1,  1183,    -1,    -1,    -1,  1187,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   426,   427,    -1,
+      -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1216,  1217,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   454,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     222,    -1,   224,   225,   226,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   482,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   494,  1266,  1267,    -1,    -1,
+      -1,    -1,    -1,    -1,  1206,    -1,  1276,   506,   260,   508,
+      -1,    -1,   511,   265,   513,   514,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   526,   280,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    -1,    30,    31,    32,  1337,    -1,  1339,
+    1340,  1341,    -1,    39,    -1,    -1,   328,    -1,    -1,   578,
+      -1,  1351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1360,   590,    -1,    -1,    -1,   594,    -1,    -1,   350,    -1,
+      -1,    67,    -1,   355,   356,    -1,    72,    -1,    74,    75,
+      76,   363,    78,    -1,    -1,  1385,    -1,    83,    84,    -1,
+      -1,   620,    -1,    -1,   147,    -1,   625,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   157,   634,   635,   636,    -1,    44,
+      -1,    -1,    -1,   109,    -1,   111,   169,   170,    -1,    -1,
+      -1,   117,   118,   652,   406,    -1,    -1,    -1,  1428,  1429,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1441,   424,    -1,    -1,    -1,    -1,   429,  1448,   431,
+      37,    38,    -1,    40,    -1,   684,    -1,    92,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   448,   102,    -1,   451,
+     452,    -1,    -1,    -1,    -1,    -1,    -1,   459,    -1,    66,
+    1480,   710,    -1,   712,  1484,    72,    -1,   240,    -1,    76,
+      -1,   473,    79,    80,    81,    82,    83,    84,   480,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   264,  1512,    -1,  1514,    -1,   745,    -1,    -1,    -1,
+      -1,    -1,   109,   158,   111,    -1,    -1,   114,    -1,    -1,
+     117,   118,   119,   120,   121,   122,    -1,   172,    -1,    -1,
+      -1,    -1,  1542,  1543,    -1,    -1,    -1,    -1,    -1,    -1,
+    1550,  1551,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     195,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   801,    -1,   209,    -1,   805,    -1,    -1,    -1,
+     809,    -1,    -1,   218,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   228,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,
+      -1,    -1,   594,    -1,    -1,    -1,    -1,    -1,   253,    -1,
+      -1,    -1,    -1,   258,    -1,    -1,    -1,   380,    -1,    -1,
+      -1,    -1,    -1,    66,    -1,    -1,   271,    -1,    -1,    72,
+     622,    -1,   277,    76,   279,   627,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
+      -1,   296,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   904,   109,    -1,   111,    -1,
+      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
+     919,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   338,    -1,    -1,    -1,    -1,   343,    -1,
+      -1,    -1,    -1,    -1,   943,    -1,   698,    -1,    -1,    -1,
+      -1,   474,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     712,    -1,    -1,    -1,    -1,    -1,    -1,   372,    -1,    -1,
+      -1,   376,   377,    -1,   379,    -1,    -1,    -1,    -1,    -1,
+     732,   386,   387,    -1,   389,   390,    -1,   392,    -1,   394,
+     513,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     999,    -1,    -1,   526,    -1,    -1,   411,    -1,   531,    -1,
+      -1,   534,    -1,    -1,   419,    -1,    -1,    -1,    -1,    -1,
+      -1,  1020,  1021,   546,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   444,
+      -1,   793,    -1,    -1,    -1,   568,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   805,    -1,   578,    -1,    -1,    -1,    -1,
+      -1,    -1,   585,    -1,    -1,   470,    -1,   590,    -1,    -1,
+      -1,   476,   824,    -1,    -1,    -1,   481,    -1,    -1,    -1,
+      -1,  1080,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,   517,    30,    31,    32,   639,    -1,    -1,    -1,
+      -1,    -1,    39,    -1,   647,    -1,    -1,   532,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1146,    -1,    -1,
+      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
+      -1,    -1,    -1,    37,    38,   570,    40,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   579,    -1,    -1,    -1,    -1,    -1,
+      -1,   586,    -1,    -1,    -1,   937,    -1,   592,    -1,  1188,
+      -1,    -1,    66,    -1,   111,    -1,   601,    -1,    72,    -1,
+     117,   118,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,   967,    -1,    -1,    -1,    -1,
+      -1,    -1,   745,    -1,   747,    -1,  1225,    -1,    -1,   156,
+     157,    -1,    -1,    -1,   757,   109,   641,   111,    -1,    -1,
+     763,    -1,    -1,   117,   118,   119,   120,   121,   122,    -1,
+    1002,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1013,    -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,
+     197,    -1,   677,    -1,    -1,  1274,  1275,    -1,    -1,    -1,
+     685,    -1,   805,   806,  1283,    -1,   809,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   283,
+     823,   285,   286,    -1,    -1,    -1,    -1,    -1,    -1,   293,
+     294,   716,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   726,   727,   307,   308,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1085,    -1,    -1,    -1,    -1,    -1,    -1,
+     863,    -1,   269,    -1,   867,    -1,    -1,  1099,    -1,    -1,
+      -1,    -1,    -1,    -1,   759,    -1,    -1,    -1,    -1,   764,
+      -1,   345,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,   904,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
+      -1,    39,    40,    -1,    -1,  1394,   323,   381,    -1,    -1,
+      -1,    -1,    -1,    -1,   331,   332,    -1,   334,   335,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   345,    67,
+     943,    -1,   349,   828,    -1,    -1,    74,    75,    -1,    -1,
+     835,    -1,    -1,    -1,    -1,    -1,  1188,    -1,    -1,    -1,
+      -1,   368,    -1,   848,   371,   850,    -1,    -1,   971,    -1,
+      -1,  1450,    -1,  1452,   977,    -1,    -1,    -1,   981,   864,
+      -1,    -1,    -1,   111,    -1,   870,    -1,   115,    -1,   117,
+     118,   398,    -1,    -1,    -1,   402,    -1,   882,    -1,  1002,
+     885,    -1,    -1,    -1,    -1,    -1,    -1,  1486,    -1,  1488,
+    1013,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,
+      -1,    -1,  1035,    -1,  1037,    -1,  1515,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1052,
+    1053,  1283,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+    1073,    -1,   479,    -1,    -1,   482,    -1,   962,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,   549,   550,   551,   552,   553,
+     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
+     564,   565,   566,    -1,    -1,    -1,    -1,    37,    38,    67,
+      40,    -1,   997,    -1,   521,    -1,    -1,    -1,   525,   526,
+      -1,    -1,    -1,    -1,    -1,  1128,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
+      -1,    -1,    72,  1146,    -1,    -1,    76,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    -1,    86,    87,  1161,  1162,
+      -1,    -1,    -1,   570,   571,    -1,    -1,    -1,    -1,    -1,
+    1055,    -1,    -1,    -1,    -1,    -1,  1061,    -1,    -1,   109,
+      -1,   111,   589,   590,   114,    -1,    -1,   117,   118,   119,
+     120,   121,   122,   600,    -1,   602,   603,    -1,    -1,    -1,
+      -1,    -1,   609,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1095,    -1,   619,   620,    -1,  1100,    -1,    -1,   625,    -1,
+      -1,    -1,    -1,  1108,    -1,    -1,    -1,   634,   635,   636,
+      -1,   695,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   652,    -1,    -1,    -1,    -1,
+     657,   658,    -1,    -1,   661,   662,  1141,    -1,    -1,    -1,
+      -1,   668,    -1,    -1,    -1,    -1,    -1,    -1,  1153,    -1,
+      -1,  1156,    -1,  1158,    -1,    -1,    -1,    -1,    -1,    -1,
+     687,    -1,    -1,    -1,    -1,    -1,    -1,  1172,  1173,    -1,
+      -1,    -1,   756,    -1,    -1,    -1,    -1,    -1,  1530,  1302,
+      -1,    -1,  1305,   710,   711,    -1,    -1,    -1,    -1,  1194,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   786,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   744,   745,    -1,
+      -1,    -1,   749,   750,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1241,    -1,    -1,    -1,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      -1,    30,    31,    32,    -1,    -1,   793,    -1,    -1,    -1,
+      39,    -1,    -1,    -1,   801,    -1,    -1,    -1,    -1,    -1,
+      -1,   808,   809,    -1,    -1,   812,    -1,   814,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   824,    67,    -1,
+      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    78,
+      -1,  1316,    -1,  1318,    83,    84,    -1,    -1,    -1,    -1,
+      -1,    -1,   906,    -1,    -1,  1330,    -1,  1332,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   111,    -1,  1349,    -1,    -1,    -1,   117,   118,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1365,  1366,    -1,    -1,    -1,    -1,    -1,   951,    -1,   896,
+      -1,  1376,    -1,    -1,  1379,    -1,   903,   904,   905,    -1,
+     907,    -1,    -1,    -1,   911,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1515,    -1,    -1,  1400,    -1,    -1,    -1,    -1,
+      -1,    -1,   986,    -1,  1409,   932,   933,  1412,    -1,  1414,
+    1415,  1416,    -1,    -1,    -1,   999,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
-       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    34,     0,    35,     0,    36,     0,     0,   208,    39
-};
-
-#define yypact_value_is_default(yystate) \
-  ((yystate) == (-1315))
-
-#define yytable_value_is_error(yytable_value) \
-  YYID (0)
-
-static const yytype_int16 yycheck[] =
-{
-       0,     1,   240,   186,   205,     0,   734,     0,    43,    43,
-      43,   534,   752,   186,     1,   752,   752,   187,   106,   186,
-     117,   280,   169,   170,   513,   364,   349,   186,   220,   368,
-     186,   349,    32,   186,   620,   186,   991,    32,  1029,    32,
-     521,   345,   602,    43,   187,   879,   984,   759,   647,    49,
-     492,   418,     0,     0,   496,   879,    49,   600,   188,   571,
-     602,    43,   600,    63,   600,   600,    66,    32,   156,    69,
-      63,   438,   600,    66,   600,   282,    69,   693,    49,   446,
-     600,    72,    69,   266,    32,    32,  1041,   696,    39,  1335,
-     634,   635,   636,   266,   426,   427,    57,   267,    43,   266,
-    1028,  1029,     0,  1417,    43,   202,   106,   266,  1048,   653,
-     266,  1060,  1061,   266,   114,   266,    39,   117,   118,   603,
-      72,   635,   636,   482,   267,   609,    39,    51,    95,    44,
-      45,    85,   262,   263,    32,   229,    39,    96,    64,   653,
-      28,   132,    39,   114,    63,    72,   107,   147,   148,   110,
-     257,   186,   186,   186,   248,   148,   156,   157,   109,   113,
-     111,   161,   494,   130,   123,   488,   118,   711,   161,   110,
-     910,    82,    39,   910,   910,   116,   147,  1491,   482,    44,
-      45,   513,    82,   109,   719,   109,   186,   187,   111,  1138,
-      78,   719,  1438,   719,   187,   156,   109,   711,   111,   490,
-     115,    30,   202,    82,   186,   132,   109,   688,   111,    72,
-     210,   111,   109,   132,   111,  1123,    82,   210,   410,  1127,
-      83,    84,   222,    72,  1048,    74,    75,   107,    82,   222,
-      11,   266,   266,   266,    83,    84,   406,    82,   117,   210,
-     240,   186,   109,   109,   111,  1236,   578,   186,   111,   114,
-     589,   131,   252,   341,    83,    84,   110,   252,   219,   252,
-     260,   805,   111,   406,   109,   265,   266,   267,   828,   240,
-       1,  1473,   272,   816,   267,   634,   635,   636,   816,  1421,
-     816,   816,   994,   371,   602,   797,   828,   252,   816,   905,
-     816,   805,   631,    96,   653,   295,   816,   504,  1289,   396,
-     109,   272,   911,   109,   252,   252,  1508,   307,  1510,   257,
-     480,   418,   273,   604,  1252,   682,   620,   608,    49,   280,
-     123,   625,   131,   323,  1524,    44,    45,   424,   328,  1057,
-     929,   438,   116,   430,   818,   328,   307,   480,   629,   446,
-    1494,   341,   633,   109,  1544,   345,  1500,   956,   132,   349,
-     350,  1551,   711,    39,   252,    90,    91,   285,    72,   257,
-    1288,  1289,  1302,  1524,   364,    82,   109,  1521,   368,    83,
-      84,   371,  1526,    72,   345,   106,   112,  1519,   938,   307,
-     308,    57,  1524,   114,    83,    84,   114,   348,  1222,   748,
-    1551,   126,   127,   110,   937,   114,   396,   111,  1222,   937,
-     117,   937,  1544,   110,   365,   110,   406,   110,   369,  1551,
-     117,   116,   111,   406,   117,   244,   147,   345,   116,   115,
-     116,  1007,  1413,     3,   424,   156,   426,   427,   131,   116,
-     430,   107,   116,   433,   110,   131,   116,   525,    10,    11,
-      12,    13,    14,     3,   748,   132,   805,    72,   132,     0,
-    1405,  1406,   132,   381,   454,   426,   427,   118,    83,    84,
-     667,   116,   110,   124,   125,     0,     1,    39,   807,   117,
-     418,   432,   472,   812,   733,   206,   116,   132,  1302,   210,
-     480,    32,   482,   116,   484,  1413,   111,   480,   488,   484,
-     438,   484,   132,   974,   494,    67,   116,    32,   446,   132,
-     989,   648,   116,   116,   946,   828,   506,     0,   508,   240,
-     828,   511,   132,   513,   514,    66,  1125,     0,   688,   132,
-     418,   521,  1462,   494,   112,   525,   526,   657,   116,  1469,
-     737,    66,  1016,  1017,    69,   109,   484,   484,  1137,   116,
-     438,   272,   513,   219,   275,   688,   131,  1107,   446,   110,
-     909,   380,   116,   116,    72,   132,    74,    75,   655,   850,
-     110,    72,   901,   109,   295,    83,    84,   116,   132,   132,
-     570,   571,    83,    84,  1302,   682,   307,   109,   578,  1188,
-    1189,   112,  1522,   132,   482,   116,   484,   116,   112,   589,
-     590,   109,   116,    80,   594,   590,   114,   273,   109,   109,
-     600,   708,   602,   132,   280,   909,   109,   578,   111,   109,
-     341,    80,  1093,   109,   345,   118,   119,  1098,   109,   942,
-     620,   549,   550,   551,   111,   625,   113,   627,   589,   110,
-     117,   631,   110,   364,   634,   635,   636,   368,  1462,   112,
-     371,   112,   111,   116,   113,  1469,    72,   110,   117,   620,
-     110,  1379,   943,   653,   625,   655,   116,    83,    84,   747,
-     621,   110,   491,    72,   493,    74,    75,   116,   129,  1028,
-     131,   222,   348,   865,    83,    84,   637,   110,    66,     4,
-       5,     6,     7,     8,     9,   685,   110,   222,   688,   365,
-     109,   652,   116,   369,   886,   426,   427,   109,  1522,   111,
-     109,   252,   112,  1007,   109,   114,   116,     0,     1,   110,
-     948,   711,   712,   713,   109,   116,   110,   252,   115,   719,
-     720,   132,   116,   454,   871,   295,   110,   910,    64,   110,
-     118,   109,   116,   111,   682,   116,   467,   910,  1466,    32,
-    1468,   109,   912,   910,    69,   109,    71,   747,   748,   110,
-     110,   910,   752,   753,   910,   116,   116,   910,   112,   910,
-     708,   492,   110,   494,   110,   496,   112,   132,   116,   912,
-     116,   114,   733,   161,   114,   506,    69,   508,   109,   110,
-     511,   110,   513,   514,   682,   131,   132,   116,  1528,   109,
-    1399,  1528,  1528,  1132,   525,  1523,  1319,   797,  1157,   350,
-     110,   556,   557,   558,   559,   805,   116,   807,  1417,   809,
-     708,   132,   812,   813,   643,   109,   816,   111,   813,  1020,
-     908,   110,   114,   110,   118,   119,    70,   116,   828,   116,
-      74,   759,   110,    77,   222,    79,   132,    72,   116,    74,
-      75,    76,    86,    72,    82,    74,    75,   578,    83,    84,
-     748,   120,   121,  1157,    83,    84,   426,   427,   589,    72,
-     109,    74,    75,   692,    72,   694,    74,    75,    76,   698,
-      83,    84,   260,   109,   109,    83,    84,   265,   109,   879,
-     111,  1490,  1491,    82,   879,   114,   110,   118,   119,   620,
-     112,   109,   116,   111,   625,    72,  1043,    74,    75,    76,
-     631,   901,   109,   110,   111,    49,    83,    84,   908,   909,
-     910,   109,   912,   111,   119,    72,  1123,    74,    75,    76,
-    1127,  1128,   473,  1093,   924,   128,    83,    84,  1098,  1288,
-      94,   879,  1236,   484,    88,    89,   506,   937,   938,   129,
-     901,   511,   942,   131,   514,   621,   111,   947,   948,   484,
-    1093,   109,   109,   111,   685,  1098,   109,     0,     1,   252,
-     947,   637,   350,   506,   964,   508,   112,   110,   511,   213,
-     114,   514,   109,   116,   974,   110,   652,   948,   109,   110,
-     111,   879,    92,    93,    72,    49,    29,    30,    76,    32,
-     112,   109,   723,   111,   110,    83,    84,   567,   112,    63,
-      43,   109,    66,   111,   110,    69,    49,  1007,   109,   110,
-     111,   909,   110,    72,    57,   110,   747,    76,  1115,   110,
-      63,   109,  1503,    66,    83,    84,    69,   109,  1028,  1029,
-     118,   119,   109,   110,   111,   109,  1007,   111,   111,  1246,
-      83,    84,   871,   431,    58,    59,    60,   112,  1048,   878,
-     109,   114,   111,  1048,    85,    86,    87,   733,   116,   118,
-     119,  1261,  1262,  1263,   107,   131,   210,   110,   109,   114,
-     111,   622,  1553,   915,   117,   917,   807,   114,   109,  1007,
-     111,   812,   113,   114,   148,   473,   115,   116,  1088,   109,
-     919,   116,   117,  1093,   110,   111,   117,   161,  1098,   112,
-    1048,    58,    59,   115,   116,   148,   110,  1107,   352,   110,
-     354,   116,   117,   156,   112,  1115,   116,   117,   161,   112,
-    1048,    44,    45,   187,   552,   553,   560,   561,   272,  1336,
-    1218,   112,  1132,  1340,   554,   555,   112,     4,     5,     6,
-       7,     8,     9,   186,   187,   117,   210,   117,   699,   978,
-    1048,   295,   116,    29,    85,    86,    87,  1157,   222,   202,
-     110,   110,   713,   307,   112,   112,   132,   210,   114,   110,
-     901,   115,   115,   115,   110,   109,   219,   908,   109,   222,
-     111,   116,   113,   114,   110,   110,   229,   116,   110,   117,
-     110,   484,   110,   924,   110,   116,   110,   110,   442,  1199,
-    1200,   244,    69,   110,    71,   248,   594,   110,   110,   252,
-     253,   110,     0,  1200,   110,   946,   947,   948,  1218,   110,
-     110,   110,  1222,   266,   267,   110,   110,  1222,   115,    29,
-     273,   131,   110,   116,   622,  1442,  1236,   280,   117,   627,
-    1240,   112,   112,   116,    32,   110,   110,   110,   117,   117,
-    1079,   112,   112,  1240,   116,    43,   114,  1218,   809,  1157,
-     110,    49,   110,   110,   328,   132,     4,     5,     6,     7,
-       8,     9,   116,   110,  1222,    63,  1007,   116,    66,   110,
-     116,    69,   110,   112,   109,   328,   109,   109,  1288,  1289,
-     109,   109,   112,   110,   132,    33,   110,  1297,  1395,   115,
-    1538,   110,  1302,   115,    72,   348,   349,  1302,    76,   115,
-     454,   699,   114,   112,   129,    83,    84,    10,    11,    12,
-      13,    14,   365,   110,  1222,   713,   369,   132,   879,   112,
-     116,    69,   116,    71,   112,  1335,   110,   380,  1236,   110,
-     110,   109,   406,   112,   879,  1528,    39,   112,  1335,   112,
-     118,   119,   110,   396,  1302,  1528,   112,  1088,   112,  1529,
-     148,  1528,   506,   406,   508,   112,  1195,   511,    47,  1528,
-     514,   132,  1528,   161,    67,  1528,   115,  1528,   110,   132,
-     132,   424,   132,  1553,   132,   115,  1529,   430,   117,   432,
-     110,   879,   115,   112,    66,  1395,   112,   112,   186,   187,
-     112,  1132,   112,   112,  1302,   112,  1503,   112,   110,   110,
-    1553,    83,   947,  1413,   112,   112,   109,   109,   111,   109,
-     109,   809,   210,    60,   467,   118,   119,   110,   110,   472,
-     114,   117,   132,  1394,   222,   112,   112,   480,  1438,   110,
-      96,   484,   112,   110,    96,   488,   118,     3,   491,   109,
-     493,  1438,   109,   115,    10,    11,    12,    13,    14,  1010,
-     110,   112,  1462,   132,   252,   110,   110,  1462,   110,  1469,
-     513,  1471,    42,  1473,  1469,   116,   110,   117,   266,   132,
-     110,    96,    96,    39,   132,   528,   132,  1218,   531,   161,
-     533,   534,   110,  1528,  1528,  1528,   132,  1048,   117,   110,
-     132,   110,   110,  1503,   132,   115,   112,   112,  1508,  1240,
-    1510,    67,   109,  1048,  1462,   132,   115,   115,   110,   110,
-     132,  1469,  1522,   110,   110,  1064,   562,  1522,  1528,  1529,
-     563,   565,   564,  1222,  1491,  1381,  1529,  1563,  1538,   582,
-     328,   685,   566,  1312,  1128,  1340,   589,  1469,   917,  1079,
-     222,   685,   685,  1553,  1098,    66,   698,   600,   925,   602,
-    1553,   349,   978,  1051,  1462,    76,   871,  1538,   649,   944,
-    1240,  1469,   582,   723,  1522,   484,   570,   733,   621,   570,
-      72,   570,    74,    75,    76,    -1,   879,    -1,   260,    -1,
-      -1,    83,    84,   265,   637,    -1,    -1,    -1,    -1,    -1,
-     643,    -1,    -1,    -1,  1335,    -1,    -1,   118,    -1,   652,
-      -1,   654,   655,   656,    -1,    -1,    -1,   109,   406,   111,
-      -1,    -1,  1010,    -1,  1522,   117,   118,   119,    -1,    -1,
-      -1,  1201,  1202,    -1,  1204,     0,     1,    -1,    -1,    -1,
-      -1,  1211,    -1,  1213,    -1,   688,    -1,    -1,  1199,   692,
-     161,   694,    -1,    -1,   947,   698,    -1,    10,    11,    12,
-      13,    14,    -1,   706,  1199,  1200,    -1,    32,    -1,    -1,
-      -1,  1222,     3,    -1,    -1,    -1,   719,   720,   350,    10,
-      11,    12,    13,    14,    49,    -1,    39,  1222,    -1,    -1,
-     733,    72,    -1,    74,    75,    76,   484,    -1,    -1,    -1,
-     488,    -1,    83,    84,    69,  1240,    -1,  1438,    39,    -1,
-      -1,   222,    -1,    -1,    67,    -1,    -1,    -1,  1394,    72,
-      -1,    74,    75,    76,    -1,     0,    -1,    -1,   109,    -1,
-      83,    84,    -1,    -1,  1222,    -1,    67,   118,   119,    -1,
-    1471,   106,  1473,    -1,    -1,    -1,  1297,    -1,    -1,   260,
-      -1,  1302,    55,    -1,   265,  1048,   109,    32,   111,   431,
-      -1,    -1,  1297,    -1,    -1,   118,   119,  1302,    -1,   280,
-      -1,    -1,    -1,   816,    -1,    -1,    -1,  1508,    -1,  1510,
-     924,    -1,    -1,   148,    -1,   828,    72,    -1,    74,    75,
-      76,   156,   157,    -1,    69,    98,    -1,    83,    84,    -1,
-    1335,   473,    -1,    -1,    -1,  1375,    -1,  1538,    -1,    -1,
-       3,  1199,   600,    -1,   602,    -1,    -1,    10,    11,    12,
-      13,    14,   187,   109,    -1,   111,    -1,    -1,   871,    -1,
-    1318,    -1,   118,   119,    -1,   878,    -1,   202,    -1,   350,
-     205,   206,    -1,    -1,   464,   210,    39,    -1,    -1,    72,
-      -1,    74,    75,    76,    -1,    -1,    -1,    -1,   901,    -1,
-      83,    84,   464,    -1,    -1,    -1,   231,   910,    -1,   912,
-     235,    -1,   237,    -1,    67,    -1,   919,    -1,    -1,    -1,
-      -1,   246,   157,    -1,    -1,  1373,   109,   252,  1376,    -1,
-      -1,   194,   257,    -1,    -1,   118,   119,    -1,    -1,   942,
-     688,    -1,   267,  1438,    -1,    -1,    -1,  1200,    -1,  1297,
-     275,  1462,    -1,    -1,   217,    -1,    -1,    -1,  1469,   962,
-     431,    -1,   594,    -1,   227,    -1,    -1,  1462,    -1,  1222,
-      -1,   719,   720,  1421,  1469,   978,    -1,   448,  1426,    -1,
-      -1,    -1,    -1,   986,  1088,    -1,   989,  1240,   991,    -1,
-     622,    -1,    -1,    -1,    -1,   627,   231,    -1,    -1,    -1,
-      -1,    -1,   473,    -1,    -1,    -1,    -1,    -1,  1456,    -1,
-      -1,  1522,    -1,    -1,    -1,    -1,   341,   252,    -1,    -1,
-     345,    -1,   257,    -1,    -1,    -1,   351,  1522,    -1,    -1,
-      -1,    -1,   295,    -1,    -1,    -1,    -1,    -1,  1041,   364,
-      -1,    -1,    -1,   368,    -1,    -1,   371,    -1,    -1,  1302,
-      -1,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,    72,
-      -1,    74,    75,    76,    -1,    -1,    -1,   699,   816,    -1,
-      83,    84,    -1,    -1,    -1,    -1,  1079,    -1,    -1,    -1,
-     828,   713,  1335,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1093,   671,    -1,   418,  1542,  1098,   109,     0,   111,    -1,
-    1548,    -1,    -1,    -1,    -1,   118,   119,    -1,   433,   671,
-      -1,  1559,  1115,   438,    -1,  1563,   351,    -1,    -1,    -1,
-      -1,   446,    -1,   594,    99,    -1,   101,    -1,    -1,    32,
-      -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,   464,
-      -1,    -1,   467,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   622,    -1,    -1,    -1,    -1,   627,   482,    -1,   484,
-      39,    -1,   910,    -1,   912,    -1,    69,   492,    -1,    -1,
-      -1,   496,    -1,    -1,    -1,    -1,    -1,   809,    -1,    -1,
-     443,    -1,    -1,   418,    -1,  1438,    -1,     0,    67,    -1,
-      -1,    -1,  1195,    72,   942,    74,    75,    76,   433,    -1,
-     525,   526,    -1,   438,    83,    84,   469,   182,    -1,  1462,
-      -1,   446,    -1,   793,    -1,  1218,  1469,   192,   193,    32,
-      -1,    -1,   197,   803,   199,   200,    -1,    -1,   699,   464,
-     109,   793,   111,    -1,    -1,    -1,    -1,   817,    -1,   118,
-     119,   803,   713,   506,    -1,    -1,   571,   482,   511,   484,
-      -1,   514,    -1,    -1,   157,   817,    69,    -1,  1261,  1262,
-    1263,    -1,   733,    -1,   589,   590,    -1,    -1,    -1,  1522,
-      -1,    -1,    10,    11,    12,    13,    14,   602,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
-      -1,   526,    -1,    -1,    -1,   620,    -1,   190,    -1,    -1,
-     625,    39,    -1,    -1,   197,    -1,   631,    -1,    -1,   634,
-     635,   636,    -1,    -1,    39,    -1,  1319,    -1,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   653,    67,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   696,   809,    -1,
-      -1,    -1,    67,    -1,   157,  1093,   671,    72,    -1,   252,
-    1098,    76,   131,    -1,   257,   590,    -1,   682,    83,    84,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,  1473,
-      -1,   109,    -1,   111,    -1,    -1,   269,    -1,  1010,    -1,
-     118,   119,    -1,   708,   109,    -1,   711,    -1,    -1,    -1,
-      -1,  1394,  1395,   118,   119,   720,    -1,    -1,   723,   634,
-     635,   636,  1405,  1406,  1508,    -1,  1510,   670,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   679,    -1,   653,    -1,
-     683,    -1,   747,   748,    -1,    -1,    -1,    -1,   753,    -1,
-     323,   790,    -1,    -1,    -1,    -1,   671,    -1,   331,   252,
-    1443,   334,    -1,    -1,   257,  1025,  1026,   682,   351,    -1,
-      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    -1,
-      -1,    -1,    -1,  1025,  1026,    -1,    -1,    -1,   793,    -1,
-      -1,    -1,    -1,   708,    -1,    -1,   711,    -1,   803,    -1,
-     805,    -1,   807,    39,    -1,   810,    -1,   812,   813,    -1,
-      -1,    -1,   817,    -1,    10,    11,    12,    13,    14,    -1,
-    1503,  1504,   827,  1083,  1084,   398,    -1,    -1,   867,   402,
-    1513,    67,    -1,   748,    -1,   418,    72,    -1,    74,    75,
-      76,  1083,  1084,    39,    -1,  1528,  1529,    83,    84,    -1,
-     433,    -1,    -1,    -1,    -1,   438,    -1,    -1,   351,  1010,
-      -1,    -1,    -1,   446,    -1,    -1,    -1,    -1,     1,    -1,
-    1553,    67,   911,   109,   879,   111,    -1,    -1,   793,    -1,
-      -1,   464,   118,   119,    -1,    -1,    -1,  1199,   803,    -1,
-     805,    -1,    -1,    -1,    -1,   810,   901,    -1,   813,   482,
-      -1,   484,   817,   908,   909,    -1,   479,   912,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,   956,    -1,   574,
-     575,    -1,   118,   119,    -1,   418,    72,    -1,    74,    75,
-      76,    -1,    -1,   938,    -1,    -1,    -1,    83,    84,    -1,
-     433,   946,   947,   526,   671,   438,    -1,    -1,   603,    -1,
-      -1,   606,   607,   446,   609,   994,   611,   612,    -1,   964,
-     903,   616,   617,   109,   879,   111,    -1,    -1,    -1,    -1,
-      -1,   464,   118,   119,  1234,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1297,    -1,    -1,    -1,   482,
-      -1,   484,  1234,    -1,   909,    -1,    -1,   570,   571,     0,
-       1,    -1,  1007,    -1,    -1,    -1,  1045,   590,    -1,  1269,
-      -1,    -1,    -1,    -1,    -1,  1020,    -1,  1277,  1278,  1279,
-    1025,  1026,    -1,  1028,  1029,    -1,    -1,  1269,    -1,    -1,
-      -1,    32,    -1,   526,    -1,  1277,  1278,  1279,    -1,    -1,
-      -1,    -1,    -1,  1048,    -1,    -1,    -1,    -1,  1199,   964,
-      -1,   634,   635,   636,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,   793,    -1,    69,    -1,
-     653,    -1,    -1,    -1,    -1,    -1,   803,    -1,  1083,  1084,
-      -1,    -1,    -1,  1343,    -1,   658,  1125,    -1,   671,   662,
-     817,    -1,    -1,    -1,    -1,    -1,    -1,   590,    -1,   682,
-    1528,  1343,   757,   758,    -1,    -1,    -1,    -1,    -1,    -1,
-    1025,  1026,    -1,  1028,  1029,    -1,  1059,    -1,    -1,    -1,
-     253,    -1,    -1,    -1,    -1,   708,    -1,  1132,   711,    -1,
-      -1,    -1,    -1,  1048,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   634,   635,   636,    -1,    -1,  1297,    -1,    -1,  1188,
-    1189,    -1,  1157,    -1,     0,    -1,   157,    -1,    -1,    -1,
-     653,    -1,    -1,    -1,    -1,   748,    -1,    -1,  1083,  1084,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   671,    10,
-      11,    12,    13,    14,    -1,    -1,    32,    -1,    -1,   682,
-      -1,    -1,    -1,    -1,    -1,  1200,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
-     793,    -1,    -1,  1218,    -1,   708,    -1,  1222,   711,    -1,
-     803,   222,   805,    69,   797,    -1,    -1,   810,    -1,  1234,
-     813,  1236,    -1,    -1,   817,  1240,    67,    -1,    -1,    -1,
-      -1,    72,  1157,    74,    75,    76,    -1,    -1,    -1,    -1,
-      -1,   252,    83,    84,    -1,   748,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1269,    -1,   921,    -1,    -1,    -1,
-      -1,    -1,  1277,  1278,  1279,    -1,    -1,    -1,   109,    -1,
-      -1,    -1,    -1,  1288,  1289,  1200,    -1,   118,   119,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   879,  1302,  1025,  1026,
-     793,    -1,    -1,    -1,    -1,    -1,    -1,  1222,    -1,    -1,
-     803,   157,   805,    -1,    -1,    -1,    -1,   810,    -1,  1234,
-     813,  1236,    -1,    -1,   817,    -1,   909,    -1,    -1,    -1,
-    1335,    -1,    -1,    -1,   467,    -1,    -1,    -1,  1343,    -1,
-      -1,    -1,    -1,   916,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1269,    -1,  1083,  1084,    -1,    -1,
-    1399,    -1,  1277,  1278,  1279,    -1,    -1,    -1,  1311,    -1,
-      -1,    -1,    -1,  1288,  1289,    -1,    -1,    -1,  1417,    -1,
-     513,   964,    -1,    -1,    -1,    -1,   879,  1302,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   528,    -1,    -1,   531,    -1,
-     533,   534,    -1,    -1,    -1,    -1,   252,    -1,  1413,    -1,
-      -1,   257,    26,    27,    28,    -1,   909,    -1,    -1,    -1,
-      -1,    -1,    -1,   996,    -1,    -1,    -1,    -1,  1343,    -1,
-    1085,    -1,   433,  1438,    -1,    -1,    -1,    -1,    -1,    -1,
-    1013,    -1,  1025,  1026,    -1,  1028,  1029,    -1,    -1,   582,
-      -1,  1490,  1491,    -1,    53,    -1,    55,  1462,    -1,    58,
-      59,    60,    -1,    62,  1469,  1048,    -1,    -1,    -1,    -1,
-      -1,   964,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,
-      -1,    -1,    -1,   484,    -1,    99,    -1,   101,    -1,    -1,
-      89,    90,    -1,    -1,    -1,    -1,    -1,    -1,  1413,    -1,
-    1083,  1084,    -1,    -1,    -1,   351,    -1,    -1,    -1,    -1,
-      -1,    -1,   126,    -1,    -1,    -1,    -1,  1522,  1091,    -1,
-      -1,   654,    -1,   656,  1529,   526,    -1,  1470,    -1,  1472,
-      -1,    -1,  1025,  1026,    -1,  1028,  1029,    -1,    -1,    -1,
-      -1,    -1,  1269,    -1,    -1,    -1,    -1,  1462,    -1,    -1,
-    1277,  1278,  1279,    -1,  1469,  1048,    -1,    -1,    -1,    -1,
-    1133,    -1,  1217,    -1,  1507,    -1,  1509,    -1,   182,    -1,
-      -1,    -1,   418,   706,  1157,    -1,   190,    -1,   192,   193,
-      -1,    -1,    -1,   197,    -1,   199,   200,   433,    -1,   590,
-    1083,  1084,   438,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     446,    -1,    -1,    -1,    -1,    -1,    -1,  1522,    -1,  1552,
-      -1,  1554,    -1,    -1,    -1,    -1,  1343,  1200,   464,    10,
-      11,    12,    13,    14,  1567,  1568,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   634,   635,   636,   482,    -1,   484,  1222,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
-      -1,  1234,   653,  1236,    -1,   269,    -1,    -1,    10,    11,
-      12,    13,    14,    -1,  1157,    -1,    -1,    -1,    -1,    -1,
+      24,    25,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,
+     967,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,  1454,
+      -1,  1456,    -1,  1458,    -1,    -1,  1040,    -1,    -1,    -1,
+      -1,   988,   989,    -1,    -1,    -1,    -1,    -1,  1473,    -1,
+      -1,    -1,   999,    67,    -1,    -1,    -1,    -1,  1005,  1006,
+      -1,  1008,  1009,  1010,    78,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1020,  1021,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,  1117,    30,    31,    32,    33,    -1,    -1,
+      36,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1083,    -1,  1085,    -1,
+      -1,    -1,    -1,  1090,    -1,    -1,    -1,    -1,    -1,    -1,
+      66,    67,  1099,    69,    -1,    71,    72,    -1,    74,    75,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,  1177,  1178,  1122,  1123,  1124,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,  1146,
+      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   132,    -1,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    33,    -1,
+      -1,    36,    37,    38,    39,    40,    41,    -1,    43,    -1,
+    1207,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
+      -1,    -1,    57,    -1,    -1,    -1,    61,    62,  1225,    64,
+      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
+      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,  1274,  1275,   114,
+      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
+      -1,    -1,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
+      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,  1382,    30,
+      31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
+      -1,    -1,    -1,    -1,  1398,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1394,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,  1468,  1469,   117,   118,   119,   120,
+     121,   122,    -1,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    -1,    -1,  1481,    66,    67,    -1,    69,    -1,
+      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,  1505,  1506,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    78,    -1,  1530,    -1,   116,   117,   118,   119,   120,
+     121,   122,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    66,    67,    -1,    69,    39,    71,
+      72,    -1,    74,    75,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
-     526,    72,    -1,    74,    75,    76,  1269,    39,    -1,    -1,
-      -1,    -1,    83,    84,  1277,  1278,  1279,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1288,  1289,  1200,    -1,    -1,
-     711,    -1,    -1,    -1,    -1,    67,    -1,    -1,   109,  1302,
-      72,    -1,    -1,    -1,    76,    -1,    -1,   118,   119,  1222,
-      -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1234,    -1,  1236,   590,   344,    -1,   346,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,   357,   358,
-    1343,    -1,    -1,    -1,    -1,    -1,   118,   119,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1269,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1277,  1278,  1279,    -1,   634,   635,
-     636,    -1,    -1,    -1,    -1,  1288,  1289,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   805,    -1,    -1,   653,    -1,  1302,
-      -1,    -1,   813,    -1,    -1,     7,    -1,    -1,    10,    11,
-      12,    13,    14,    -1,    -1,   671,    -1,    -1,    -1,   962,
-    1413,    -1,    -1,    -1,    -1,    -1,   682,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    37,    38,    39,    40,    -1,
-    1343,    -1,    -1,   986,    -1,    -1,   989,    -1,   991,    -1,
-      -1,    -1,   708,    -1,    -1,   711,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    66,    67,    -1,    -1,   879,  1462,
-      72,    -1,    -1,    -1,    76,    -1,  1469,    79,    80,    81,
-      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
-      -1,    -1,   748,    -1,    -1,    -1,    -1,    -1,  1041,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
-    1413,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
-     122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1522,
-      -1,    -1,    -1,    -1,    -1,    -1,   947,   793,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   803,    -1,   805,
-     574,   575,    -1,   964,   810,    -1,    -1,   813,    -1,  1462,
-      -1,   817,    37,    38,    -1,    40,  1469,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   603,
-      -1,    -1,   606,   607,    -1,   609,    -1,   611,   612,    -1,
-      -1,    66,   616,   617,    -1,    -1,    -1,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,  1028,  1029,  1522,
-      -1,    -1,    -1,   879,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,  1048,   113,   114,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
-      -1,    -1,    -1,   909,    -1,    -1,    -1,    -1,    -1,     3,
+      -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,   111,
+      -1,    -1,    83,    84,   116,   117,   118,   119,   120,   121,
+     122,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,    -1,    -1,    37,    38,    39,    40,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    66,    67,    -1,    69,    39,    71,    72,
+      -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
+      -1,    -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,
+      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,   700,    -1,   702,    -1,    39,    -1,    -1,    -1,    -1,
-     709,   710,    -1,    -1,    -1,   714,    -1,    -1,   964,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   726,  1261,  1262,
-    1263,    -1,   731,    67,    -1,    69,    -1,    71,    72,    -1,
-      74,    75,    76,   757,   758,    -1,    -1,    -1,    -1,    83,
-      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   761,    -1,    -1,    -1,    -1,    -1,    37,    38,
-      -1,    40,    -1,    -1,    -1,   109,    -1,   111,    -1,  1025,
-    1026,    -1,  1028,  1029,   118,   119,  1319,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,  1199,  1200,
-      -1,    -1,  1048,    72,    -1,    -1,    -1,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,  1222,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1083,  1084,  1240,
-     109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
-     119,   120,   121,   122,   123,    -1,    -1,    49,    -1,    -1,
-      -1,    -1,   861,   862,   863,   864,    -1,   866,    -1,    -1,
-      -1,    -1,  1405,  1406,    66,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   882,    -1,    -1,    -1,  1288,  1289,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1297,   896,    -1,    -1,
-      -1,  1302,   916,    -1,    -1,    -1,    -1,   921,    -1,    -1,
-    1443,  1157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   114,    -1,    -1,    -1,   118,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1335,    -1,    -1,   936,    -1,    -1,
+      -1,    -1,    -1,    37,    38,    39,    40,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      -1,    -1,    66,    67,    -1,    69,    39,    71,    72,    -1,
+      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,
+      -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,
+      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1200,   147,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   157,    -1,    -1,    -1,   161,
-      -1,  1504,    -1,    -1,    -1,    -1,  1222,    -1,    -1,    -1,
-    1513,    -1,    -1,    -1,   983,    -1,    -1,    -1,  1234,    -1,
-    1236,   990,    -1,    -1,    -1,    -1,   995,    -1,    -1,    -1,
-      -1,  1000,    -1,  1002,    -1,    -1,    -1,  1006,    -1,  1008,
-    1009,    -1,  1413,  1012,    -1,    -1,    -1,    -1,   210,    -1,
-      -1,    -1,  1021,  1269,    -1,    -1,    -1,    -1,    -1,    -1,
-     222,  1277,  1278,  1279,    -1,    -1,    -1,  1438,    -1,    -1,
-    1039,  1040,  1288,  1289,    -1,    -1,    -1,    -1,   240,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1302,    -1,    -1,    -1,
-      -1,  1462,    -1,    -1,    -1,    -1,    -1,  1066,  1469,    -1,
-    1069,  1085,    -1,   265,    -1,    -1,    -1,    -1,    -1,    -1,
-     272,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1343,    -1,    -1,
-      -1,    -1,    -1,   295,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1112,    -1,   307,    -1,    -1,    -1,  1118,
-    1119,  1522,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1130,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1140,    -1,    -1,  1143,    -1,  1145,    -1,    -1,  1148,
-      -1,    -1,    -1,   345,    -1,    -1,    -1,    -1,   350,    -1,
-      -1,    -1,  1161,    -1,    -1,    -1,    -1,  1413,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1174,    -1,  1176,  1177,  1178,
-    1179,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1192,    -1,  1194,    -1,    -1,    -1,  1198,
-      -1,    -1,    -1,  1217,    -1,    66,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    76,  1462,    78,    -1,    80,
-      -1,    -1,    -1,  1469,    -1,    -1,    87,    -1,  1227,  1228,
-      -1,    -1,    -1,    -1,   426,   427,    -1,    -1,    -1,    -1,
-      -1,   433,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,   120,
-     121,   122,   454,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1522,    -1,    -1,    -1,
-      -1,  1280,  1281,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     482,  1290,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     161,    -1,   494,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   506,    -1,   508,    -1,    -1,   511,
-      -1,   513,   514,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   526,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1341,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1354,    -1,  1356,  1357,  1358,
-      -1,   222,    -1,   224,   225,   226,    -1,    -1,    -1,  1368,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1377,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   578,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   590,   260,
-      -1,    -1,   594,    -1,   265,  1404,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   280,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   620,    -1,
-      -1,    -1,    -1,   625,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   634,   635,   636,    -1,    -1,    -1,    -1,    -1,
-    1449,  1450,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   653,    -1,  1462,    -1,    -1,    -1,   328,    -1,    -1,
-    1469,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   350,
-      -1,    -1,    -1,   685,   355,   356,    -1,    -1,    -1,    -1,
-      -1,    -1,   363,  1502,    -1,    -1,    -1,  1506,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   711,
-       7,   713,    92,    10,    11,    12,    13,    14,    -1,    -1,
-      -1,    -1,   102,    -1,    -1,    -1,  1535,    -1,  1537,    -1,
-      -1,    -1,    -1,    -1,    -1,   406,    -1,    -1,    -1,    -1,
-      37,    38,    39,    40,    -1,    -1,   748,    -1,    -1,    -1,
-      -1,    -1,    -1,   424,    -1,    -1,  1565,  1566,   429,    -1,
-     431,    -1,    -1,    -1,  1573,  1574,    -1,    -1,    -1,    66,
-      67,    -1,    -1,    -1,    -1,    72,    -1,   448,   158,    76,
-     451,   452,    79,    80,    81,    82,    83,    84,   459,    86,
-      87,    -1,   172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   473,   805,    -1,    -1,    -1,   809,    -1,   480,
-      -1,   813,   109,    -1,   111,   195,    -1,    -1,    -1,    -1,
-      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,   209,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   218,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   228,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,
-      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   253,    -1,    -1,    -1,    -1,   258,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
-      -1,   271,    -1,    -1,    72,    -1,    -1,   277,    76,   279,
-      -1,    79,    80,    81,    82,    83,    84,   909,    86,    87,
-      -1,    -1,    -1,    -1,    -1,    -1,   296,    -1,    -1,    -1,
-      -1,    -1,   924,   594,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
-     118,   119,   120,   121,   122,   123,   948,    -1,    -1,    -1,
-      -1,   622,    -1,    -1,    -1,    -1,   627,    -1,   338,    -1,
-      -1,    -1,   964,   343,    -1,    -1,     3,     4,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
+      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
+      -1,    -1,   117,   118,   119,   120,   121,   122,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
+      -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      66,    67,    -1,    69,    -1,    71,    72,    -1,    74,    75,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
+      -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,   372,    30,    31,    32,   376,   377,    -1,   379,
-      -1,    -1,    39,    -1,    -1,  1007,   386,   387,    -1,   389,
-     390,    -1,   392,    -1,   394,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1028,  1029,   699,    -1,
-      67,   411,    69,    -1,    71,    -1,    -1,    74,    75,   419,
-      -1,    -1,   713,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      37,    38,   733,    40,   444,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,  1088,    -1,    -1,    66,
-     470,    -1,    -1,    -1,    -1,    72,   476,    -1,    -1,    76,
-      -1,   481,    79,    80,    81,    82,    83,    84,    -1,    86,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
+      67,    -1,    69,    -1,    71,    72,    -1,    74,    75,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
       87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   797,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,   517,   809,   116,
-      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
-      -1,    -1,   532,    -1,    -1,  1157,     0,   828,    -1,     3,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
+     117,   118,   119,   120,   121,   122,     0,    -1,    -1,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    33,
-     570,    -1,    36,    -1,    -1,    39,    40,  1199,    -1,   579,
-      -1,   156,   157,    -1,    -1,    -1,   586,    -1,    37,    38,
-      -1,    40,   592,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      64,   601,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
-      74,    75,    76,    -1,  1236,   190,    -1,    66,    -1,    83,
-      84,    -1,   197,    72,    -1,    -1,    -1,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,    -1,   642,    -1,    -1,   109,    -1,   111,    -1,    -1,
-      -1,   942,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,
-     109,    -1,   111,    -1,    -1,   114,  1288,  1289,    -1,   118,
-     119,   120,   121,   122,   123,  1297,    -1,    -1,   678,    -1,
-      -1,    -1,    -1,   974,    -1,    -1,   686,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   269,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    -1,    -1,    -1,   717,    -1,  1010,
-      -1,    -1,    -1,    -1,    39,    -1,    -1,   727,   728,    -1,
-    1021,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
-      -1,   741,    -1,    -1,   147,    -1,    -1,    -1,   323,    -1,
-      -1,    -1,    67,    -1,   157,    -1,   331,   332,    -1,   334,
-     335,    -1,   762,    78,   764,    66,   169,   170,   768,    -1,
-     345,    72,    -1,    -1,   349,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,  1413,    -1,   368,    -1,    -1,   371,    -1,    -1,    -1,
-      -1,    -1,  1093,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,  1107,   118,   119,   120,
-     121,   122,   123,   398,    -1,    -1,    -1,   402,    -1,    -1,
-      -1,    -1,   832,    -1,    -1,    -1,    -1,   240,    -1,   839,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1471,
-      -1,  1473,   852,    -1,   854,    -1,    -1,    -1,   433,    -1,
-      -1,   264,    -1,    -1,    -1,    -1,    -1,    -1,   868,    -1,
-      -1,    -1,    -1,    -1,    -1,   875,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1508,   887,  1510,    -1,
-     890,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   479,    -1,    -1,   482,  1199,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1538,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,   521,    -1,    -1,    -1,
-     525,   526,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   969,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   380,    -1,    -1,
-      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
-      -1,    -1,    -1,    -1,    -1,   570,   571,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1005,  1297,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   589,   590,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   110,   111,   600,    -1,   602,   603,    -1,
-      -1,   118,   119,    -1,   609,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   619,   620,    -1,    -1,    -1,    -1,
-     625,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   634,
-     635,   636,    -1,  1063,    -1,    -1,    -1,    -1,    -1,  1069,
-      -1,   474,    -1,    -1,    -1,    -1,    -1,    -1,   653,    -1,
-      -1,    -1,    -1,   658,   659,    -1,    -1,   662,   663,    -1,
-      -1,    -1,    -1,    -1,   669,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1103,    -1,    -1,    -1,    -1,  1108,    -1,
-     513,    -1,    -1,   688,    -1,    -1,  1116,    -1,    -1,    -1,
-      -1,    -1,    -1,   526,    -1,    -1,    -1,    -1,   531,    -1,
-      -1,   534,    -1,    -1,    -1,    -1,   711,   712,    -1,    -1,
-      -1,    -1,    -1,   546,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1152,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1164,   568,    -1,  1167,    -1,  1169,
-      -1,    -1,   747,   748,    -1,   578,    -1,   752,   753,    -1,
-      -1,    -1,   585,  1183,  1184,    -1,    -1,   590,    -1,    -1,
+      -1,    -1,    36,    -1,    -1,    39,    40,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1205,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   797,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     805,    -1,    -1,    -1,    -1,    -1,   639,   812,   813,    -1,
-      -1,   816,    -1,   818,    -1,   648,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   828,  1254,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1553,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    33,    -1,    -1,    36,    -1,    -1,    39,    -1,
+      64,    -1,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
+      74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
+      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   901,    -1,    -1,    -1,
-    1330,    -1,  1332,   908,   909,   910,    67,   912,    69,    -1,
-      71,   916,    -1,    74,    75,   748,  1346,   750,  1348,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   760,    -1,    -1,
-      -1,    -1,   937,   938,   767,    -1,  1366,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     111,    -1,  1382,  1383,    -1,    -1,    -1,   118,   119,   964,
-      -1,    -1,    -1,  1393,    -1,    -1,  1396,    -1,    -1,   974,
-      -1,    -1,    -1,    -1,    -1,    -1,   809,   810,    -1,    -1,
-     813,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1419,
-      -1,   996,   997,    -1,   827,    -1,    -1,    -1,  1428,    -1,
-      -1,  1431,  1007,  1433,  1434,  1435,    -1,    -1,  1013,  1014,
-      -1,  1016,  1017,  1018,    -1,    -1,    -1,    -1,    -1,   283,
-      -1,   285,   286,  1028,  1029,    37,    38,    -1,    40,   293,
-     294,    -1,    -1,    -1,   867,    -1,    -1,    -1,   871,    -1,
-      -1,    -1,    -1,   307,   308,  1475,    -1,  1477,    -1,  1479,
-      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
-      72,    -1,    -1,    -1,    76,  1495,    -1,    79,    80,    81,
-      82,    83,    84,    -1,    86,    87,   909,    -1,    -1,    -1,
-      -1,   345,    -1,    -1,    -1,    -1,  1091,    -1,  1093,    -1,
-      -1,    -1,    -1,  1098,    -1,    -1,    -1,   109,    -1,   111,
-      -1,    -1,  1107,    -1,    -1,    -1,   118,   119,   120,   121,
-     122,   123,    -1,    -1,    -1,   948,    -1,   381,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1132,  1133,  1134,
-      -1,   964,   965,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   978,    -1,    -1,    -1,    -1,
-      -1,   984,  1157,    -1,   987,    -1,   989,    -1,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,  1010,    30,    31,
-      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,  1021,    -1,
-      37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1043,    -1,  1045,  1218,    -1,    67,    -1,    -1,    -1,    66,
-      -1,    -1,    74,    75,    -1,    72,    78,  1060,  1061,    76,
-      -1,  1236,    79,    80,    81,    82,    83,    84,    -1,    86,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1081,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
-      -1,    -1,   109,    -1,   111,    -1,   118,   119,    -1,    -1,
-      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
-      -1,    -1,    -1,  1288,  1289,   549,   550,   551,   552,   553,
-     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
-     564,   565,   566,    -1,    -1,  1138,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1157,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1172,
-    1173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    33,    -1,
-      -1,    36,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1413,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1252,
-      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
-      75,    76,   696,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
-      -1,    -1,    -1,  1316,    -1,    -1,  1319,   132,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   759,    -1,    -1,  1503,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,  1528,  1529,    -1,   790,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1553,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
-    1403,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,   118,   119,    30,
-      31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
-      41,    -1,    43,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
-      61,    62,    -1,    64,    -1,    66,    67,   911,    69,    -1,
-      71,    72,  1485,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    -1,    -1,   109,    -1,
-     111,    -1,   956,   114,    -1,    -1,    39,   118,   119,   120,
-     121,   122,   123,    -1,    -1,  1538,    -1,   128,    -1,    -1,
-      -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,
-     994,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1007,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    33,    -1,  1048,    36,    37,    38,    39,    40,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
-      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
-      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-      -1,    -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,
-     111,  1125,    -1,    83,    84,    -1,    -1,   118,   119,   120,
-     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1188,  1189,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
-      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
-     111,    -1,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
-     121,   122,   123,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
-      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
-      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-      -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
-     111,    -1,    -1,    83,    84,   116,    -1,   118,   119,   120,
-     121,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
-      -1,   111,    -1,    -1,    -1,  1399,    -1,    -1,   118,   119,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1417,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,     7,
+      -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
+      -1,    -1,    -1,   117,   118,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
-      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,  1490,  1491,    66,    67,
-      -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
-      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,
+      -1,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,    -1,
-     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
-      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
-      -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
-      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
-      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
-      -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
-      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
-      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
-      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
-      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
-      38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
-      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
-      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,   119,   120,   121,   122,   123,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,
-      -1,    -1,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,
-      67,    -1,    69,    -1,    71,    72,    -1,    74,    75,    76,
-      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,   115,    -1,
-      -1,   118,   119,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
-      30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,    39,
-      40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    64,    -1,    -1,    67,    -1,    69,
-      -1,    71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
-      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
-      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    -1,    30,    31,    32,
-      33,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
-      -1,    74,    75,    -1,    -1,    78,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    -1,    -1,   111,    -1,
-      -1,    39,    -1,    -1,    -1,   118,   119,    -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,    -1,    -1,    -1,    -1,    64,    -1,    -1,    67,
       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
       -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,   119,     4,     5,     6,     7,     8,     9,    10,    11,
+      -1,   109,    -1,   111,    -1,    -1,    -1,   115,    -1,   117,
+     118,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
-      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    67,    -1,    69,    -1,    71,
-      39,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,
+      32,    33,    -1,    -1,    36,    -1,    -1,    39,    40,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,    67,    -1,
-      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,   111,
-      -1,    -1,    -1,    -1,    83,    84,   118,   119,     4,     5,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    64,    -1,    -1,    67,    -1,    69,    -1,    71,
+      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
+      -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
+      -1,    -1,    -1,    -1,    -1,   117,   118,     3,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,   111,    -1,    30,    31,    32,    -1,    -1,   118,
-     119,    -1,    -1,    39,    -1,    -1,    -1,    10,    11,    12,
+      26,    27,    -1,    -1,    30,    31,    32,    33,    -1,    -1,
+      36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
+      -1,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    67,    -1,    69,    -1,    71,    39,    -1,    74,    75,
+      -1,    -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,
+      -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,
+      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
+      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    67,
+      -1,    69,    -1,    71,    -1,    39,    74,    75,    -1,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    67,    -1,    30,    31,    32,    -1,    -1,
+      74,    75,   110,   111,    39,    -1,    -1,    -1,    -1,   117,
+     118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    69,   109,    71,   111,    -1,    74,
+      75,    -1,    -1,   117,   118,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
+      -1,    -1,   117,   118,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    67,    -1,    69,
+      -1,    71,    39,    40,    74,    75,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,   111,    30,    31,    32,   115,    -1,
+     117,   118,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      96,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,
-      -1,    74,    75,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-      83,    84,   118,   119,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,   111,    -1,
-      30,    31,    32,    -1,    -1,   118,   119,    -1,    -1,    39,
+      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
+      75,    -1,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,    -1,
+      -1,    -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
+      -1,    -1,    74,    75,    -1,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,   111,
+      39,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      69,    -1,    71,    -1,    -1,    74,    75,    -1,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
+      -1,    -1,   111,    39,    -1,    -1,    -1,    -1,   117,   118,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
-      -1,    71,    -1,    -1,    74,    75,    -1,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,
+      40,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
+      -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,   119,
+     120,   121,   122,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,   111,    39,    -1,    -1,    -1,    -1,    -1,   118,   119,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      37,    38,    39,    40,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,
+      67,    -1,    -1,    39,    -1,    72,    -1,    74,    75,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,
+      76,    -1,   109,   110,   111,    -1,    -1,    83,    84,    -1,
+     117,   118,   119,   120,   121,   122,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
-      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
-      -1,   118,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
-      74,    75,    -1,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
-      -1,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
-      71,    -1,    -1,    74,    75,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
-      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    66,    67,    30,    31,    32,
-      -1,    72,    -1,    74,    75,    76,    39,    -1,    79,    80,
-      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,   109,   110,
-     111,    74,    75,    -1,    -1,    -1,    -1,   118,   119,   120,
-     121,   122,   123,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,   109,    -1,   111,    -1,
-      37,    38,    39,    40,    -1,   118,   119,    -1,    -1,    -1,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    66,
-      67,    30,    31,    32,    -1,    72,    -1,    74,    75,    76,
-      39,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-      -1,    -1,   109,    -1,   111,    74,    75,    -1,    -1,    -1,
-      -1,   118,   119,   120,   121,   122,   123,    10,    11,    12,
+      24,    25,    26,    27,    -1,   111,    30,    31,    32,    -1,
+      -1,   117,   118,    37,    38,    39,    40,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    -1,   111,    -1,    37,    38,    39,    40,    -1,   118,
-     119,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
+      -1,    -1,    66,    67,    -1,    -1,    39,    -1,    72,    -1,
+      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,
+      -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,
+      83,    84,    -1,   117,   118,   119,   120,   121,   122,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,   111,    30,
+      31,    32,    -1,    -1,   117,   118,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
+      40,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
+     121,   122,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,   111,    30,    31,    32,   115,    -1,   117,   118,    37,
+      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
+      -1,    -1,    39,    -1,    72,    -1,    74,    75,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
+     118,   119,   120,   121,   122,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    66,    67,    30,    31,    32,    -1,    72,
-      -1,    74,    75,    76,    39,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    67,    -1,    -1,    -1,   109,    -1,   111,    74,
-      75,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
-     123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    -1,   111,    -1,    37,    38,
-      39,    40,    -1,   118,   119,    -1,    -1,    -1,    -1,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    66,    67,    30,
-      31,    32,    -1,    72,    -1,    74,    75,    76,    39,    -1,
-      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
-     109,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,   118,
-     119,   120,   121,   122,   123,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
-     111,    -1,    37,    38,    39,    40,    -1,   118,   119,    -1,
+      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
+     117,   118,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
@@ -3829,172 +3791,174 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       67,    -1,    -1,    -1,   109,    -1,   111,    74,    75,    -1,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      -1,    -1,   117,   118,   119,   120,   121,   122,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
+     117,   118,    -1,    -1,    39,    -1,    -1,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    67,    -1,    69,    -1,    71,    39,    -1,    74,
+      75,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,   111,    -1,    30,    31,    32,    -1,
-      -1,   118,   119,    -1,    -1,    39,    -1,    -1,    -1,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    -1,    30,
-      31,    32,    -1,    67,    -1,    69,    -1,    71,    39,    -1,
-      74,    75,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    67,    30,    31,    32,
-      -1,    72,    -1,    74,    75,    76,    39,    78,    -1,    -1,
-     114,    -1,    83,    84,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    67,    30,    31,    32,   109,    72,
-     111,    74,    75,    76,    39,    78,    -1,   118,   119,    -1,
-      83,    84,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    67,    30,    31,    32,    -1,    72,   111,    74,
-      75,    76,    39,    -1,    -1,   118,   119,    -1,    83,    84,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      24,    25,    26,    27,    -1,    67,    30,    31,    32,    -1,
+      72,    -1,    74,    75,    76,    39,    -1,    -1,    -1,   114,
+      -1,    83,    84,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    67,    30,    31,    32,   109,    72,   111,
+      74,    75,    76,    39,    -1,   117,   118,    -1,    -1,    83,
+      84,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    67,    30,    31,    32,   109,    72,   111,    74,    75,
+      76,    39,    -1,   117,   118,    -1,    -1,    83,    84,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    67,
+      30,    31,    32,   109,    72,   111,    74,    75,    76,    39,
+      -1,   117,   118,    -1,    -1,    83,    84,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    67,    30,    31,
+      32,   109,    -1,   111,    74,    75,    -1,    39,    78,   117,
+     118,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      67,    30,    31,    32,   109,    72,   111,    74,    75,    76,
-      39,    -1,    -1,   118,   119,    -1,    83,    84,    -1,    10,
+      -1,    30,    31,    32,    -1,    67,    -1,    -1,    -1,   109,
+      39,   111,    74,    75,    -1,    -1,    78,   117,   118,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    -1,    67,    30,
-      31,    32,   109,    72,   111,    74,    75,    76,    39,    40,
-      -1,   118,   119,    -1,    83,    84,    -1,    10,    11,    12,
+      31,    32,    -1,    -1,    -1,    74,    75,    -1,    39,   111,
+      -1,    -1,    -1,    -1,    -1,   117,   118,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    67,    30,    31,    32,
-     109,    -1,   111,    74,    75,    -1,    39,    -1,    -1,   118,
-     119,    -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,    -1,    -1,    -1,
-     111,    74,    75,    -1,   115,    78,    -1,   118,   119,    -1,
+      23,    24,    25,    26,    27,    -1,    67,    30,    31,    32,
+      -1,    -1,   111,    74,    75,    -1,    39,    -1,   117,   118,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
-      30,    31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,
-      40,    -1,    -1,    -1,    -1,   118,   119,    -1,    10,    11,
+      30,    31,    32,    -1,    67,    -1,    -1,    -1,    -1,    39,
+     111,    74,    75,    -1,    -1,    -1,   117,   118,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    -1,    67,    30,    31,
-      32,    -1,    -1,    -1,    74,    75,    -1,    39,    40,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    67,    -1,    -1,    39,    -1,
-      -1,   111,    74,    75,    -1,   115,    -1,    -1,   118,   119,
+      32,    -1,    -1,    -1,    74,    75,    -1,    39,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,   111,
-      -1,    -1,    -1,   115,    -1,    -1,   118,   119,    -1,    -1,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
+      -1,   111,    74,    75,    -1,    -1,    -1,   117,   118,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,   111,
+      -1,    -1,    -1,    -1,    39,   117,   118,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
+      75,    37,    38,    -1,    40,    41,    -1,    43,    -1,    -1,
+      46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
+      56,    57,    -1,    -1,    -1,    61,    62,    -1,    64,    -1,
+      66,    -1,    -1,    -1,    -1,   110,    72,    -1,    -1,    -1,
+      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
+      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,
+      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    37,
+      38,   127,    40,    41,    -1,    43,   132,    -1,    46,    47,
+      48,    49,    50,    51,    52,    53,    -1,    -1,    -1,    57,
+      -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,
+      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,   117,
+     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,   127,
+      -1,    -1,    -1,    -1,   132,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-     111,    30,    31,    32,    -1,    -1,    -1,   118,   119,    -1,
-      39,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
-      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,
-      39,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    67,    30,
-      31,    32,    33,    34,    35,    74,    75,    -1,    39,    -1,
-      -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,
-     119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
-      -1,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,   118,
-     119,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
-      -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    37,    38,
-      -1,    40,    41,    -1,    43,    -1,    -1,    46,    47,    48,
-      49,    50,    51,    52,    53,    -1,    -1,    56,    57,    -1,
-      -1,    -1,    61,    62,    67,    64,    69,    66,    71,    -1,
-      -1,    74,    75,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
+      39,    -1,    37,    38,    -1,    40,    41,    -1,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
+      -1,    56,    57,    -1,    -1,    -1,    61,    62,    67,    64,
+      69,    66,    71,    -1,    -1,    74,    75,    72,    -1,    -1,
+      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    96,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
+      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
+      37,    38,   127,    40,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    -1,    -1,    -1,
+      57,    -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,
+      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,
+     117,   118,   119,   120,   121,   122,    -1,    -1,    37,    38,
+     127,    40,    41,    -1,    43,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,
+      -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
       79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,
-     109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
-     119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,   128,
-      -1,    37,    38,   132,    40,    41,    -1,    43,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
-      -1,    57,    -1,    -1,    -1,    61,    62,    -1,    64,    -1,
+     109,    -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,
+     119,   120,   121,   122,    66,    -1,    -1,    -1,   127,    -1,
+      72,    -1,    74,    75,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
+      -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
+      -1,   113,   114,    -1,    -1,   117,   118,   119,   120,   121,
+     122,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    37,
+      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    37,    38,
+      -1,    40,   117,   118,   119,   120,   121,   122,    66,    -1,
+      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    66,    86,    87,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,   109,    -1,   111,    -1,    37,    38,    -1,    40,   117,
+     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,    -1,    -1,    37,    38,    -1,    40,   117,   118,
+     119,   120,   121,   122,    66,    -1,    -1,    -1,    -1,    -1,
+      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    66,    86,    87,    -1,    -1,    -1,    72,
+      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,    -1,
+      -1,    37,    38,    -1,    40,   117,   118,   119,   120,   121,
+     122,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
       66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
       76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
       86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,
-      -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
-      -1,    -1,   128,    -1,    -1,    -1,   132,     4,     5,     6,
+      -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    -1,    37,    38,    -1,    40,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    -1,    -1,    56,    57,    -1,    -1,    -1,    61,    62,
-      67,    64,    69,    66,    71,    -1,    -1,    74,    75,    72,
-      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    96,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
-      -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,   122,
-     123,    -1,    -1,    37,    38,   128,    40,    41,    -1,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,    -1,
-      64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
-      -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
-      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
-     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
-      -1,    -1,    37,    38,   128,    40,    41,    -1,    43,    -1,
-      -1,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
-      -1,    -1,    57,    -1,    -1,    -1,    61,    62,    -1,    64,
-      -1,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
-      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
-      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
-      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    66,
-      -1,    -1,    -1,   128,    -1,    72,    -1,    -1,    -1,    76,
-      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
-      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,
-      -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   109,    -1,   111,    -1,    -1,    37,    38,    -1,
-      40,   118,   119,   120,   121,   122,   123,    66,    -1,    -1,
-      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
-      79,    80,    81,    82,    83,    84,    66,    86,    87,    -1,
-      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
-      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
-     109,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,   118,
-     119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,   109,
-      -1,    -1,    -1,    -1,    37,    38,    -1,    40,   118,   119,
-     120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,    -1,
-      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
-      82,    83,    84,    66,    86,    87,    -1,    -1,    -1,    72,
-      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
-      83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
-     122,   123,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
-     123,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
+      27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,
-      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
-      83,    84,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
-      31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
+      67,    -1,    69,    -1,    71,    72,    -1,    74,    75,    76,
+      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
-      71,    -1,    -1,    74,    75,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
-      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-      -1,    69,    -1,    71,    -1,    -1,    74,    75,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
+      75,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
+      -1,    -1,    74,    75,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    33,    34,    35,    67,    -1,    69,
+      39,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    -1,    -1,    74,    75
 };
 
@@ -4007,5 +3971,5 @@
       22,    23,    24,    25,    26,    27,    30,    31,    32,    33,
       36,    39,    40,    64,    67,    69,    71,    72,    74,    75,
-      76,    83,    84,   109,   111,   118,   119,   137,   140,   149,
+      76,    83,    84,   109,   111,   117,   118,   137,   140,   149,
      198,   212,   213,   214,   215,   216,   217,   218,   219,   220,
      221,   222,   223,   224,   225,   226,   227,   228,   229,   231,
@@ -4032,10 +3996,10 @@
      323,   111,   149,   370,   306,   230,   314,   109,   290,   109,
      109,    51,   109,    37,    38,    40,    66,    72,    76,    79,
-      80,    81,    82,    86,    87,   109,   111,   120,   121,   122,
-     123,   136,   140,   141,   142,   143,   148,   149,   150,   151,
+      80,    81,    82,    86,    87,   109,   111,   119,   120,   121,
+     122,   136,   140,   141,   142,   143,   148,   149,   150,   151,
      152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
      162,   164,   167,   225,   276,   292,   366,   371,   227,   110,
      110,   110,   110,   110,   110,   110,    74,    75,   111,   225,
-     272,   350,   368,   111,   118,   149,   164,   217,   218,   224,
+     272,   350,   368,   111,   117,   149,   164,   217,   218,   224,
      227,   231,   232,   237,   240,   241,   243,   262,   263,   267,
      268,   269,   270,   284,   350,   362,   363,   364,   365,   370,
@@ -4052,12 +4016,12 @@
      208,   222,   224,   227,   134,   311,   109,   311,   164,   319,
      227,   109,   134,   272,   114,    33,    34,    35,   225,   286,
-     287,   289,   134,   129,   131,   291,   134,   228,   234,   235,
+     287,   289,   134,   128,   131,   291,   134,   228,   234,   235,
      272,   315,   316,   317,   109,   141,   109,   148,   109,   148,
      151,   109,   148,   109,   109,   148,   148,   111,   164,   169,
      173,   225,   275,   366,   370,   112,   134,    82,    85,    86,
       87,   109,   111,   113,   114,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   131,   166,   151,   151,   118,
-     124,   125,   120,   121,    88,    89,    90,    91,   126,   127,
-      92,    93,   119,   128,   129,    94,    95,   130,   131,   373,
+     102,   103,   104,   105,   106,   131,   166,   151,   151,   117,
+     123,   124,   119,   120,    88,    89,    90,    91,   125,   126,
+      92,    93,   118,   127,   128,    94,    95,   129,   131,   373,
      109,   149,   345,   346,   347,   348,   349,   110,   116,   109,
      349,   350,   109,   349,   350,   134,   109,   225,   368,   112,
@@ -4067,98 +4031,96 @@
      149,   370,   227,   135,   135,   149,   225,   227,   363,   272,
      225,   350,   363,   272,   109,   134,   134,   134,   112,   134,
-      72,    80,   111,   113,   140,   274,   278,   279,   280,   281,
-     282,   134,   134,   134,   134,   134,   134,   309,   110,   110,
-     110,   110,   110,   110,   110,   318,   331,   109,   277,   112,
-     207,   134,   309,   169,   276,   169,   276,   309,   111,   207,
-     311,   173,   134,   207,   110,    40,   111,   115,   225,   249,
-     250,   251,   366,   114,   116,   372,   131,   259,   114,   227,
-     264,   265,   266,   269,   270,   110,   116,   173,   134,   118,
-     164,   134,   224,   227,   263,   362,   370,   303,   304,   109,
-     149,   336,   110,   116,   373,   274,   286,   109,   114,   274,
-     276,   286,   110,   116,   109,   141,   110,   117,   275,   275,
-     275,   111,   139,   145,   164,   276,   275,   112,   134,   110,
-     116,   110,   109,   149,   349,   357,   358,   359,   360,   110,
-     116,   164,   111,   139,   111,   144,   145,   134,   111,   139,
-     144,   164,   151,   151,   151,   152,   152,   153,   153,   154,
-     154,   154,   154,   155,   155,   156,   157,   158,   159,   160,
-     117,   169,   164,   134,   346,   347,   348,   227,   345,   312,
-     312,   164,   276,   134,   271,   134,   225,   350,   363,   227,
-     231,   112,   112,   134,   370,   112,   109,   134,   319,   337,
-     338,   339,   342,   352,   353,   354,   112,   134,   227,   336,
-     340,   351,   109,   312,   355,   373,   312,   312,   373,   109,
-     312,   355,   312,   312,   312,   312,   350,   225,   361,   371,
-     272,   112,   116,   112,   116,   373,   225,   363,   373,   260,
-     261,   262,   263,   260,   260,   272,   164,   134,   111,   274,
-     117,   116,   372,   278,    80,   111,   117,   282,    29,   209,
-     210,   272,   260,   139,   309,   139,   311,   109,   349,   350,
-     109,   349,   350,   141,   350,   173,   264,   110,   110,   110,
-     110,   112,   173,   207,   173,   114,   250,   251,   112,   134,
-     109,   117,   149,   252,   254,   318,   319,   331,   357,   116,
-     132,   116,   132,   274,   248,   274,   115,   162,   163,   258,
-     135,   135,   139,   222,   135,   135,   260,   109,   149,   370,
-     135,   115,   227,   287,   288,   135,   134,   134,   109,   135,
-     110,   316,   169,   170,   117,   132,   111,   141,   200,   201,
-     202,   110,   116,   110,   134,   117,   110,   110,   110,   111,
-     164,   358,   359,   360,   227,   357,   312,   312,   114,   151,
-     167,   164,   165,   168,   116,   135,   134,   134,   110,   116,
-     164,   134,   115,   162,   117,   264,   110,   110,   110,   345,
-     264,   110,   260,   225,   363,   111,   118,   149,   164,   164,
-     227,   342,   264,   110,   110,   110,   110,   110,   110,   110,
-       7,   227,   336,   340,   351,   134,   134,   373,   134,   134,
-     110,   135,   135,   135,   135,   277,   135,   162,   163,   164,
-     310,   134,   278,   280,   115,   134,   211,   274,    40,    41,
-      43,    46,    47,    48,    49,    50,    51,    52,    53,    57,
-      61,    62,    72,   111,   128,   170,   171,   172,   173,   174,
-     175,   177,   178,   190,   192,   193,   198,   212,   308,    29,
-     135,   131,   277,   134,   134,   110,   135,   173,   248,   132,
-     132,   319,   163,   227,   253,   254,   253,   274,   312,   115,
-     259,   372,   110,   116,   112,   112,   135,   227,   116,   373,
-     290,   110,   286,   215,   217,   225,   298,   299,   300,   301,
-     292,   110,   110,   117,   163,   109,   110,   117,   116,   139,
-     164,   164,   112,   110,   110,   110,   357,   279,   116,   135,
-     168,   112,   139,   146,   147,   164,   145,   135,   146,   162,
-     167,   135,   109,   349,   350,   135,   135,   134,   135,   135,
-     135,   164,   110,   135,   109,   349,   350,   109,   355,   109,
-     355,   350,   226,     7,   118,   135,   164,   264,   264,   263,
-     267,   267,   268,   116,   116,   110,   110,   112,    96,   123,
-     135,   135,   146,   278,   164,   116,   132,   212,   216,   227,
-     231,   109,   109,   171,   109,   109,    72,   132,    72,   132,
-      72,   118,   170,   109,   173,   165,   165,   117,   112,   143,
-     132,   135,   134,   135,   211,   110,   164,   264,   264,   312,
-     110,   115,   252,   115,   134,   110,   134,   135,   309,   115,
-     134,   135,   135,   110,   114,   200,   112,   163,   132,   200,
-     202,   110,   116,   135,   109,   349,   350,   372,   165,   112,
-     135,    85,   113,   116,   135,   135,   112,   135,   110,   134,
-     110,   110,   112,   112,   112,   135,   110,   134,   134,   134,
-     164,   164,   135,   112,   135,   135,   135,   135,   134,   134,
-     163,   163,   112,   112,   135,   135,   274,   227,   169,   169,
-      47,   169,   134,   132,   132,   132,   169,   132,   169,    58,
-      59,    60,   194,   195,   196,   132,    63,   132,   312,   114,
-     175,   115,   132,   135,   135,    96,   269,   270,   110,   299,
-     116,   132,   116,   132,   115,   297,   117,   141,   110,   110,
-     117,   168,   112,   134,   115,   112,   111,   147,   111,   147,
-     147,   112,   112,   112,   264,   112,   264,   264,   264,   135,
-     135,   112,   112,   110,   110,   112,   116,    96,   263,    96,
-     135,   112,   112,   110,   110,   109,   110,   170,   191,   212,
-     132,   110,   109,   109,   173,   196,    58,    59,   164,   171,
-     144,   110,   110,   114,   134,   134,   298,   141,   203,   109,
-     132,   203,   135,   117,   264,   134,   134,   135,   135,   135,
-     135,   112,   112,   134,   135,   112,   171,    44,    45,   114,
-     181,   182,   183,   169,   171,   135,   110,   170,   114,   183,
-      96,   134,    96,   134,   109,   109,   132,   115,   134,   272,
-     309,   115,   116,   117,   163,   110,   112,   164,   135,   146,
-     146,   110,   110,   110,   110,   267,    42,   163,   179,   180,
-     310,   117,   134,   171,   181,   110,   132,   171,   132,   134,
-     110,   134,   110,   134,    96,   134,    96,   134,   132,   298,
-     141,   139,   204,   110,   132,   117,   110,   135,   135,   171,
-      96,   116,   117,   135,   205,   206,   212,   132,   170,   170,
-     205,   173,   197,   225,   366,   173,   197,   110,   134,   110,
-     134,   115,   110,   116,   164,   112,   112,   163,   179,   182,
-     184,   185,   134,   132,   182,   186,   187,   135,   109,   149,
-     309,   357,   139,   135,   173,   197,   173,   197,   109,   132,
-     139,   171,   176,   115,   182,   212,   170,    56,   176,   189,
-     115,   182,   110,   227,   110,   135,   135,   292,   171,   176,
-     132,   188,   189,   176,   189,   173,   173,   110,   110,   110,
-     188,   135,   135,   173,   173,   135,   135
+      72,   111,   113,   140,   274,   278,   279,   280,   281,   282,
+     134,   134,   134,   134,   134,   134,   309,   110,   110,   110,
+     110,   110,   110,   110,   318,   331,   109,   277,   112,   207,
+     134,   309,   169,   276,   169,   276,   309,   111,   207,   311,
+     173,   134,   207,   110,    40,   111,   115,   225,   249,   250,
+     251,   366,   114,   116,   372,   131,   259,   114,   227,   264,
+     265,   266,   269,   270,   110,   116,   173,   134,   117,   164,
+     134,   224,   227,   263,   362,   370,   303,   304,   109,   149,
+     336,   110,   116,   373,   274,   286,   109,   114,   274,   276,
+     286,   110,   116,   109,   141,   110,   130,   275,   275,   275,
+     145,   164,   276,   275,   112,   134,   110,   116,   110,   109,
+     149,   349,   357,   358,   359,   360,   110,   116,   164,   111,
+     139,   144,   145,   134,   111,   139,   144,   164,   151,   151,
+     151,   152,   152,   153,   153,   154,   154,   154,   154,   155,
+     155,   156,   157,   158,   159,   160,   130,   169,   164,   134,
+     346,   347,   348,   227,   345,   312,   312,   164,   276,   134,
+     271,   134,   225,   350,   363,   227,   231,   112,   112,   134,
+     370,   112,   109,   134,   319,   337,   338,   339,   342,   352,
+     353,   354,   112,   134,   227,   336,   340,   351,   109,   312,
+     355,   373,   312,   312,   373,   109,   312,   355,   312,   312,
+     312,   312,   350,   225,   361,   371,   272,   112,   116,   112,
+     116,   373,   225,   363,   373,   260,   261,   262,   263,   260,
+     260,   272,   164,   134,   111,   274,   130,   116,   372,   278,
+     111,   130,   282,    29,   209,   210,   272,   260,   139,   309,
+     139,   311,   109,   349,   350,   109,   349,   350,   141,   350,
+     173,   264,   110,   110,   110,   110,   112,   173,   207,   173,
+     114,   250,   251,   112,   134,   109,   130,   149,   252,   254,
+     318,   319,   331,   357,   116,   132,   116,   132,   274,   248,
+     274,   115,   162,   163,   258,   135,   135,   139,   222,   135,
+     135,   260,   109,   149,   370,   135,   115,   227,   287,   288,
+     135,   134,   134,   109,   135,   110,   316,   169,   170,   130,
+     132,   111,   141,   200,   201,   202,   110,   116,   110,   110,
+     110,   110,   111,   164,   358,   359,   360,   227,   357,   312,
+     312,   114,   151,   167,   164,   165,   168,   116,   135,   134,
+     110,   116,   164,   134,   115,   162,   130,   264,   110,   110,
+     110,   345,   264,   110,   260,   225,   363,   111,   117,   149,
+     164,   164,   227,   342,   264,   110,   110,   110,   110,   110,
+     110,   110,     7,   227,   336,   340,   351,   134,   134,   373,
+     134,   134,   110,   135,   135,   135,   135,   277,   135,   162,
+     163,   164,   310,   134,   278,   280,   115,   134,   211,   274,
+      40,    41,    43,    46,    47,    48,    49,    50,    51,    52,
+      53,    57,    61,    62,    72,   111,   127,   170,   171,   172,
+     173,   174,   175,   177,   178,   190,   192,   193,   198,   212,
+     308,    29,   135,   131,   277,   134,   134,   110,   135,   173,
+     248,   132,   132,   319,   163,   227,   253,   254,   253,   274,
+     312,   115,   259,   372,   110,   116,   112,   112,   135,   227,
+     116,   373,   290,   110,   286,   215,   217,   225,   298,   299,
+     300,   301,   292,   110,   110,   130,   163,   109,   110,   130,
+     116,   139,   112,   110,   110,   110,   357,   279,   116,   135,
+     168,   112,   139,   146,   147,   145,   135,   146,   162,   167,
+     135,   109,   349,   350,   135,   135,   134,   135,   135,   135,
+     164,   110,   135,   109,   349,   350,   109,   355,   109,   355,
+     350,   226,     7,   117,   135,   164,   264,   264,   263,   267,
+     267,   268,   116,   116,   110,   110,   112,    96,   122,   135,
+     135,   146,   278,   164,   116,   132,   212,   216,   227,   231,
+     109,   109,   171,   109,   109,    72,   132,    72,   132,    72,
+     117,   170,   109,   173,   165,   165,   130,   112,   143,   132,
+     135,   134,   135,   211,   110,   164,   264,   264,   312,   110,
+     115,   252,   115,   134,   110,   134,   135,   309,   115,   134,
+     135,   135,   110,   114,   200,   112,   163,   132,   200,   202,
+     110,   109,   349,   350,   372,   165,   112,   135,    85,   113,
+     116,   135,   112,   135,   110,   134,   110,   110,   112,   112,
+     112,   135,   110,   134,   134,   134,   164,   164,   135,   112,
+     135,   135,   135,   135,   134,   134,   163,   163,   112,   112,
+     135,   135,   274,   227,   169,   169,    47,   169,   134,   132,
+     132,   132,   169,   132,   169,    58,    59,    60,   194,   195,
+     196,   132,    63,   132,   312,   114,   175,   115,   132,   135,
+     135,    96,   269,   270,   110,   299,   116,   132,   116,   132,
+     115,   297,   130,   141,   110,   110,   130,   134,   115,   112,
+     111,   147,   111,   147,   147,   112,   112,   264,   112,   264,
+     264,   264,   135,   135,   112,   112,   110,   110,   112,   116,
+      96,   263,    96,   135,   112,   112,   110,   110,   109,   110,
+     170,   191,   212,   132,   110,   109,   109,   173,   196,    58,
+      59,   164,   171,   144,   110,   110,   114,   134,   134,   298,
+     141,   203,   109,   132,   203,   264,   134,   134,   135,   135,
+     135,   135,   112,   112,   134,   135,   112,   171,    44,    45,
+     114,   181,   182,   183,   169,   171,   135,   110,   170,   114,
+     183,    96,   134,    96,   134,   109,   109,   132,   115,   134,
+     272,   309,   115,   116,   130,   163,   110,   135,   146,   146,
+     110,   110,   110,   110,   267,    42,   163,   179,   180,   310,
+     130,   134,   171,   181,   110,   132,   171,   132,   134,   110,
+     134,   110,   134,    96,   134,    96,   134,   132,   298,   141,
+     139,   204,   110,   132,   110,   135,   135,   171,    96,   116,
+     130,   135,   205,   206,   212,   132,   170,   170,   205,   173,
+     197,   225,   366,   173,   197,   110,   134,   110,   134,   115,
+     110,   116,   112,   112,   163,   179,   182,   184,   185,   134,
+     132,   182,   186,   187,   135,   109,   149,   309,   357,   139,
+     135,   173,   197,   173,   197,   109,   132,   139,   171,   176,
+     115,   182,   212,   170,    56,   176,   189,   115,   182,   110,
+     227,   110,   135,   135,   292,   171,   176,   132,   188,   189,
+     176,   189,   173,   173,   110,   110,   110,   188,   135,   135,
+     173,   173,   135,   135
 };
 
@@ -5016,5 +4978,5 @@
 /* Line 1806 of yacc.c  */
 #line 311 "parser.yy"
-    { (yyval.constant) = build_constantInteger( *(yyvsp[(1) - (1)].tok) ); }
+    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5023,5 +4985,5 @@
 /* Line 1806 of yacc.c  */
 #line 312 "parser.yy"
-    { (yyval.constant) = build_constantFloat( *(yyvsp[(1) - (1)].tok) ); }
+    { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5030,5 +4992,5 @@
 /* Line 1806 of yacc.c  */
 #line 313 "parser.yy"
-    { (yyval.constant) = build_constantChar( *(yyvsp[(1) - (1)].tok) ); }
+    { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5045,5 +5007,5 @@
 #line 340 "parser.yy"
     {
-			appendStr( (yyvsp[(1) - (2)].constant)->get_expr()->get_constant()->get_value(), (yyvsp[(2) - (2)].tok) );
+			appendStr( (yyvsp[(1) - (2)].constant)->get_constant()->get_value(), (yyvsp[(2) - (2)].tok) );
 			delete (yyvsp[(2) - (2)].tok);									// allocated by lexer
 			(yyval.constant) = (yyvsp[(1) - (2)].constant);
@@ -5055,5 +5017,5 @@
 /* Line 1806 of yacc.c  */
 #line 351 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5062,5 +5024,5 @@
 /* Line 1806 of yacc.c  */
 #line 353 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5076,5 +5038,5 @@
 /* Line 1806 of yacc.c  */
 #line 357 "parser.yy"
-    { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
+    { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
     break;
 
@@ -5083,5 +5045,5 @@
 /* Line 1806 of yacc.c  */
 #line 367 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
 
@@ -5090,5 +5052,5 @@
 /* Line 1806 of yacc.c  */
 #line 369 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
+    { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
@@ -5097,5 +5059,5 @@
 /* Line 1806 of yacc.c  */
 #line 373 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5104,5 +5066,5 @@
 /* Line 1806 of yacc.c  */
 #line 376 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5111,5 +5073,5 @@
 /* Line 1806 of yacc.c  */
 #line 379 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
@@ -5118,5 +5080,5 @@
 /* Line 1806 of yacc.c  */
 #line 381 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
@@ -5125,5 +5087,5 @@
 /* Line 1806 of yacc.c  */
 #line 383 "parser.yy"
-    { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }
+    { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
     break;
 
@@ -5135,5 +5097,5 @@
 			Token fn;
 			fn.str = new std::string( "?{}" ); // location undefined
-			(yyval.en) = new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) ) );
+			(yyval.en) = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) ) );
 		}
     break;
@@ -5153,16 +5115,9 @@
     break;
 
-  case 37:
-
-/* Line 1806 of yacc.c  */
-#line 403 "parser.yy"
-    { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
-    break;
-
   case 38:
 
 /* Line 1806 of yacc.c  */
-#line 408 "parser.yy"
-    { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
+#line 406 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
 
@@ -5170,6 +5125,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 410 "parser.yy"
-    { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( (yyvsp[(5) - (9)].en) ) ) ) ); }
+#line 411 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
+    break;
+
+  case 40:
+
+/* Line 1806 of yacc.c  */
+#line 415 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
@@ -5177,6 +5139,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 415 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+#line 417 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
@@ -5184,6 +5146,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 420 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
+#line 419 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
@@ -5191,13 +5153,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 424 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
-    break;
-
-  case 44:
-
-/* Line 1806 of yacc.c  */
-#line 426 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
+#line 421 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
@@ -5205,6 +5160,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
+#line 429 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
@@ -5212,6 +5167,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
+#line 431 "parser.yy"
+    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
+    break;
+
+  case 47:
+
+/* Line 1806 of yacc.c  */
+#line 433 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
 
@@ -5220,32 +5182,11 @@
 /* Line 1806 of yacc.c  */
 #line 438 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
-    break;
-
-  case 49:
-
-/* Line 1806 of yacc.c  */
-#line 440 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
-    break;
-
-  case 50:
-
-/* Line 1806 of yacc.c  */
-#line 442 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
-    break;
-
-  case 51:
-
-/* Line 1806 of yacc.c  */
-#line 447 "parser.yy"
     {
 			switch ( (yyvsp[(1) - (2)].op) ) {
 			  case OperKinds::AddressOf:
-				(yyval.en) = new CompositeExprNode( build_addressOf( (yyvsp[(2) - (2)].en) ) );
+				(yyval.en) = new ExpressionNode( build_addressOf( (yyvsp[(2) - (2)].en) ) );
 				break;
 			  case OperKinds::PointTo:
-				(yyval.en) = new CompositeExprNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) );
+				(yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) );
 				break;
 			  default:
@@ -5255,9 +5196,30 @@
     break;
 
+  case 49:
+
+/* Line 1806 of yacc.c  */
+#line 451 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 50:
+
+/* Line 1806 of yacc.c  */
+#line 453 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 51:
+
+/* Line 1806 of yacc.c  */
+#line 455 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
   case 52:
 
 /* Line 1806 of yacc.c  */
-#line 460 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
+#line 457 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5265,6 +5227,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 462 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
+#line 459 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
 
@@ -5272,6 +5234,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 464 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
+#line 461 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5279,6 +5241,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_sizeOf( (yyvsp[(2) - (2)].en) ) ); }
+#line 463 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
 
@@ -5286,6 +5248,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 468 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_sizeOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
+#line 465 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
 
@@ -5293,6 +5255,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 470 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_offsetOf( new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) ) ) ); }
+#line 467 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
     break;
 
@@ -5300,6 +5262,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 472 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ) ); }
+#line 469 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
@@ -5307,6 +5269,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 474 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
+#line 471 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
     break;
 
@@ -5314,6 +5276,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 476 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
+#line 477 "parser.yy"
+    { (yyval.op) = OperKinds::PointTo; }
     break;
 
@@ -5322,5 +5284,5 @@
 /* Line 1806 of yacc.c  */
 #line 478 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_alignOf( (yyvsp[(2) - (2)].en) ) ); }
+    { (yyval.op) = OperKinds::AddressOf; }
     break;
 
@@ -5328,6 +5290,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 480 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_alignOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
+#line 484 "parser.yy"
+    { (yyval.op) = OperKinds::UnPlus; }
     break;
 
@@ -5335,41 +5297,34 @@
 
 /* Line 1806 of yacc.c  */
+#line 485 "parser.yy"
+    { (yyval.op) = OperKinds::UnMinus; }
+    break;
+
+  case 64:
+
+/* Line 1806 of yacc.c  */
 #line 486 "parser.yy"
-    { (yyval.op) = OperKinds::PointTo; }
-    break;
-
-  case 64:
+    { (yyval.op) = OperKinds::Neg; }
+    break;
+
+  case 65:
 
 /* Line 1806 of yacc.c  */
 #line 487 "parser.yy"
-    { (yyval.op) = OperKinds::AddressOf; }
-    break;
-
-  case 65:
+    { (yyval.op) = OperKinds::BitNeg; }
+    break;
+
+  case 67:
 
 /* Line 1806 of yacc.c  */
 #line 493 "parser.yy"
-    { (yyval.op) = OperKinds::UnPlus; }
-    break;
-
-  case 66:
-
-/* Line 1806 of yacc.c  */
-#line 494 "parser.yy"
-    { (yyval.op) = OperKinds::UnMinus; }
-    break;
-
-  case 67:
+    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
+  case 68:
 
 /* Line 1806 of yacc.c  */
 #line 495 "parser.yy"
-    { (yyval.op) = OperKinds::Neg; }
-    break;
-
-  case 68:
-
-/* Line 1806 of yacc.c  */
-#line 496 "parser.yy"
-    { (yyval.op) = OperKinds::BitNeg; }
+    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -5377,6 +5332,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 502 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
+#line 501 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5384,13 +5339,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 504 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
-    break;
-
-  case 73:
-
-/* Line 1806 of yacc.c  */
-#line 510 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 503 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 72:
+
+/* Line 1806 of yacc.c  */
+#line 505 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5398,6 +5353,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 512 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 511 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5405,6 +5360,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 514 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 513 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5412,6 +5367,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 520 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 519 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5419,6 +5374,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 522 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 521 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5426,6 +5381,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 528 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 527 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5433,6 +5388,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 530 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 529 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 82:
+
+/* Line 1806 of yacc.c  */
+#line 531 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5440,13 +5402,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 536 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 84:
-
-/* Line 1806 of yacc.c  */
-#line 538 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 533 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5454,6 +5409,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 540 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 539 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5461,6 +5416,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 542 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 541 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5468,41 +5423,41 @@
 
 /* Line 1806 of yacc.c  */
-#line 548 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 89:
-
-/* Line 1806 of yacc.c  */
-#line 550 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 91:
-
-/* Line 1806 of yacc.c  */
-#line 556 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 93:
-
-/* Line 1806 of yacc.c  */
-#line 562 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 95:
-
-/* Line 1806 of yacc.c  */
-#line 568 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 97:
-
-/* Line 1806 of yacc.c  */
-#line 574 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
+#line 547 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 90:
+
+/* Line 1806 of yacc.c  */
+#line 553 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 92:
+
+/* Line 1806 of yacc.c  */
+#line 559 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 94:
+
+/* Line 1806 of yacc.c  */
+#line 565 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
+    break;
+
+  case 96:
+
+/* Line 1806 of yacc.c  */
+#line 571 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
+    break;
+
+  case 98:
+
+/* Line 1806 of yacc.c  */
+#line 577 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
 
@@ -5511,19 +5466,12 @@
 /* Line 1806 of yacc.c  */
 #line 580 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
-    break;
-
-  case 101:
-
-/* Line 1806 of yacc.c  */
-#line 586 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
-    break;
-
-  case 102:
-
-/* Line 1806 of yacc.c  */
-#line 589 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
+  case 100:
+
+/* Line 1806 of yacc.c  */
+#line 582 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
 
@@ -5531,13 +5479,20 @@
 
 /* Line 1806 of yacc.c  */
-#line 591 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
-    break;
-
-  case 106:
-
-/* Line 1806 of yacc.c  */
-#line 602 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 593 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 104:
+
+/* Line 1806 of yacc.c  */
+#line 595 "parser.yy"
+    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 105:
+
+/* Line 1806 of yacc.c  */
+#line 600 "parser.yy"
+    { (yyval.en) = nullptr; }
     break;
 
@@ -5545,6 +5500,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 604 "parser.yy"
-    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
+#line 605 "parser.yy"
+    { (yyval.op) = OperKinds::Assign; }
     break;
 
@@ -5552,62 +5507,69 @@
 
 /* Line 1806 of yacc.c  */
+#line 606 "parser.yy"
+    { (yyval.op) = OperKinds::MulAssn; }
+    break;
+
+  case 109:
+
+/* Line 1806 of yacc.c  */
+#line 607 "parser.yy"
+    { (yyval.op) = OperKinds::DivAssn; }
+    break;
+
+  case 110:
+
+/* Line 1806 of yacc.c  */
+#line 608 "parser.yy"
+    { (yyval.op) = OperKinds::ModAssn; }
+    break;
+
+  case 111:
+
+/* Line 1806 of yacc.c  */
 #line 609 "parser.yy"
-    { (yyval.en) = new NullExprNode; }
-    break;
-
-  case 110:
+    { (yyval.op) = OperKinds::PlusAssn; }
+    break;
+
+  case 112:
+
+/* Line 1806 of yacc.c  */
+#line 610 "parser.yy"
+    { (yyval.op) = OperKinds::MinusAssn; }
+    break;
+
+  case 113:
+
+/* Line 1806 of yacc.c  */
+#line 611 "parser.yy"
+    { (yyval.op) = OperKinds::LSAssn; }
+    break;
+
+  case 114:
+
+/* Line 1806 of yacc.c  */
+#line 612 "parser.yy"
+    { (yyval.op) = OperKinds::RSAssn; }
+    break;
+
+  case 115:
+
+/* Line 1806 of yacc.c  */
+#line 613 "parser.yy"
+    { (yyval.op) = OperKinds::AndAssn; }
+    break;
+
+  case 116:
 
 /* Line 1806 of yacc.c  */
 #line 614 "parser.yy"
-    { (yyval.op) = OperKinds::Assign; }
-    break;
-
-  case 111:
+    { (yyval.op) = OperKinds::ERAssn; }
+    break;
+
+  case 117:
 
 /* Line 1806 of yacc.c  */
 #line 615 "parser.yy"
-    { (yyval.op) = OperKinds::MulAssn; }
-    break;
-
-  case 112:
-
-/* Line 1806 of yacc.c  */
-#line 616 "parser.yy"
-    { (yyval.op) = OperKinds::DivAssn; }
-    break;
-
-  case 113:
-
-/* Line 1806 of yacc.c  */
-#line 617 "parser.yy"
-    { (yyval.op) = OperKinds::ModAssn; }
-    break;
-
-  case 114:
-
-/* Line 1806 of yacc.c  */
-#line 618 "parser.yy"
-    { (yyval.op) = OperKinds::PlusAssn; }
-    break;
-
-  case 115:
-
-/* Line 1806 of yacc.c  */
-#line 619 "parser.yy"
-    { (yyval.op) = OperKinds::MinusAssn; }
-    break;
-
-  case 116:
-
-/* Line 1806 of yacc.c  */
-#line 620 "parser.yy"
-    { (yyval.op) = OperKinds::LSAssn; }
-    break;
-
-  case 117:
-
-/* Line 1806 of yacc.c  */
-#line 621 "parser.yy"
-    { (yyval.op) = OperKinds::RSAssn; }
+    { (yyval.op) = OperKinds::OrAssn; }
     break;
 
@@ -5616,5 +5578,5 @@
 /* Line 1806 of yacc.c  */
 #line 622 "parser.yy"
-    { (yyval.op) = OperKinds::AndAssn; }
+    { (yyval.en) = new ExpressionNode( build_tuple() ); }
     break;
 
@@ -5622,6 +5584,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 623 "parser.yy"
-    { (yyval.op) = OperKinds::ERAssn; }
+#line 624 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
     break;
 
@@ -5629,6 +5591,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 624 "parser.yy"
-    { (yyval.op) = OperKinds::OrAssn; }
+#line 626 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_link( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
 
@@ -5636,13 +5598,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 631 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_tuple() ); }
-    break;
-
-  case 122:
-
-/* Line 1806 of yacc.c  */
-#line 633 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
+#line 628 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
 
@@ -5650,13 +5605,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 635 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_tuple( (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ) ); }
-    break;
-
-  case 124:
-
-/* Line 1806 of yacc.c  */
-#line 637 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( (yyvsp[(5) - (7)].en) ) ) ); }
+#line 634 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+    break;
+
+  case 125:
+
+/* Line 1806 of yacc.c  */
+#line 640 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5664,44 +5619,30 @@
 
 /* Line 1806 of yacc.c  */
-#line 643 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 128:
-
-/* Line 1806 of yacc.c  */
-#line 649 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 129:
+#line 645 "parser.yy"
+    { (yyval.en) = 0; }
+    break;
+
+  case 130:
 
 /* Line 1806 of yacc.c  */
 #line 654 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 133:
-
-/* Line 1806 of yacc.c  */
-#line 663 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
 
-  case 139:
-
-/* Line 1806 of yacc.c  */
-#line 670 "parser.yy"
+  case 136:
+
+/* Line 1806 of yacc.c  */
+#line 661 "parser.yy"
     {
 			Token fn;
 			fn.str = new std::string( "^?{}" ); // location undefined
-			(yyval.sn) = new StatementNode( StatementNode::Exp, new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ) ), 0 );
+			(yyval.sn) = new StatementNode( StatementNode::Exp, new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ) ), 0 );
 		}
     break;
 
-  case 140:
-
-/* Line 1806 of yacc.c  */
-#line 680 "parser.yy"
+  case 137:
+
+/* Line 1806 of yacc.c  */
+#line 671 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5709,9 +5650,23 @@
     break;
 
+  case 138:
+
+/* Line 1806 of yacc.c  */
+#line 678 "parser.yy"
+    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
+    break;
+
+  case 139:
+
+/* Line 1806 of yacc.c  */
+#line 685 "parser.yy"
+    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
+    break;
+
   case 141:
 
 /* Line 1806 of yacc.c  */
-#line 687 "parser.yy"
-    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
+#line 691 "parser.yy"
+    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     break;
 
@@ -5719,26 +5674,12 @@
 
 /* Line 1806 of yacc.c  */
-#line 694 "parser.yy"
-    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
-    break;
-
-  case 144:
-
-/* Line 1806 of yacc.c  */
-#line 700 "parser.yy"
-    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
-    break;
-
-  case 145:
-
-/* Line 1806 of yacc.c  */
-#line 705 "parser.yy"
+#line 696 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
-  case 146:
-
-/* Line 1806 of yacc.c  */
-#line 707 "parser.yy"
+  case 143:
+
+/* Line 1806 of yacc.c  */
+#line 698 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -5748,9 +5689,30 @@
     break;
 
+  case 144:
+
+/* Line 1806 of yacc.c  */
+#line 704 "parser.yy"
+    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
+    break;
+
   case 147:
 
 /* Line 1806 of yacc.c  */
-#line 713 "parser.yy"
-    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
+#line 711 "parser.yy"
+    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
+    break;
+
+  case 148:
+
+/* Line 1806 of yacc.c  */
+#line 716 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
+    break;
+
+  case 149:
+
+/* Line 1806 of yacc.c  */
+#line 722 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
 
@@ -5758,6 +5720,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 720 "parser.yy"
-    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
+#line 724 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
     break;
 
@@ -5765,6 +5727,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 725 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
+#line 726 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
 
@@ -5772,26 +5734,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 731 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 153:
-
-/* Line 1806 of yacc.c  */
-#line 733 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
-    break;
-
-  case 154:
-
-/* Line 1806 of yacc.c  */
-#line 735 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 155:
-
-/* Line 1806 of yacc.c  */
-#line 737 "parser.yy"
+#line 728 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
@@ -5805,15 +5746,15 @@
     break;
 
-  case 156:
-
-/* Line 1806 of yacc.c  */
-#line 747 "parser.yy"
+  case 153:
+
+/* Line 1806 of yacc.c  */
+#line 738 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
 
-  case 157:
-
-/* Line 1806 of yacc.c  */
-#line 749 "parser.yy"
+  case 154:
+
+/* Line 1806 of yacc.c  */
+#line 740 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
@@ -5822,16 +5763,37 @@
     break;
 
+  case 155:
+
+/* Line 1806 of yacc.c  */
+#line 750 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
+    break;
+
+  case 156:
+
+/* Line 1806 of yacc.c  */
+#line 752 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
   case 158:
 
 /* Line 1806 of yacc.c  */
+#line 757 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
+    break;
+
+  case 159:
+
+/* Line 1806 of yacc.c  */
 #line 759 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].en); }
-    break;
-
-  case 159:
-
-/* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
+    break;
+
+  case 160:
+
+/* Line 1806 of yacc.c  */
+#line 763 "parser.yy"
+    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
 
@@ -5839,13 +5801,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 766 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
-    break;
-
-  case 162:
-
-/* Line 1806 of yacc.c  */
-#line 768 "parser.yy"
-    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
+#line 764 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
 
@@ -5853,6 +5808,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 772 "parser.yy"
-    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
+#line 770 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
 
@@ -5860,13 +5815,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 773 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
-    break;
-
-  case 166:
+#line 774 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
+    break;
+
+  case 165:
 
 /* Line 1806 of yacc.c  */
 #line 779 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
+    { (yyval.sn) = 0; }
     break;
 
@@ -5874,5 +5829,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 783 "parser.yy"
+#line 785 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -5881,20 +5836,20 @@
 
 /* Line 1806 of yacc.c  */
-#line 788 "parser.yy"
+#line 787 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
+    break;
+
+  case 169:
+
+/* Line 1806 of yacc.c  */
+#line 792 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 170:
-
-/* Line 1806 of yacc.c  */
-#line 794 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
-    break;
-
   case 171:
 
 /* Line 1806 of yacc.c  */
-#line 796 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
+#line 798 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
 
@@ -5902,111 +5857,118 @@
 
 /* Line 1806 of yacc.c  */
-#line 801 "parser.yy"
+#line 800 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
+    break;
+
+  case 173:
+
+/* Line 1806 of yacc.c  */
+#line 802 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
+    break;
+
+  case 174:
+
+/* Line 1806 of yacc.c  */
+#line 804 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
+    break;
+
+  case 175:
+
+/* Line 1806 of yacc.c  */
+#line 809 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
+    break;
+
+  case 177:
+
+/* Line 1806 of yacc.c  */
+#line 815 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 174:
-
-/* Line 1806 of yacc.c  */
-#line 807 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
-    break;
-
-  case 175:
-
-/* Line 1806 of yacc.c  */
-#line 809 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
-    break;
-
-  case 176:
-
-/* Line 1806 of yacc.c  */
-#line 811 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
-    break;
-
-  case 177:
-
-/* Line 1806 of yacc.c  */
-#line 813 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
-    break;
-
   case 178:
 
 /* Line 1806 of yacc.c  */
-#line 818 "parser.yy"
+#line 817 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 179:
+
+/* Line 1806 of yacc.c  */
+#line 822 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
+    break;
+
+  case 180:
+
+/* Line 1806 of yacc.c  */
+#line 824 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
+    break;
+
+  case 181:
+
+/* Line 1806 of yacc.c  */
+#line 826 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
+    break;
+
+  case 182:
+
+/* Line 1806 of yacc.c  */
+#line 831 "parser.yy"
+    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
+    break;
+
+  case 183:
+
+/* Line 1806 of yacc.c  */
+#line 833 "parser.yy"
+    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
+    break;
+
+  case 184:
+
+/* Line 1806 of yacc.c  */
+#line 838 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
+    break;
+
+  case 185:
+
+/* Line 1806 of yacc.c  */
+#line 842 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 186:
+
+/* Line 1806 of yacc.c  */
+#line 845 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
+    break;
+
+  case 187:
+
+/* Line 1806 of yacc.c  */
+#line 849 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
+    break;
+
+  case 188:
+
+/* Line 1806 of yacc.c  */
+#line 852 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
 
-  case 180:
-
-/* Line 1806 of yacc.c  */
-#line 824 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 181:
-
-/* Line 1806 of yacc.c  */
-#line 826 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 182:
-
-/* Line 1806 of yacc.c  */
-#line 831 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
-    break;
-
-  case 183:
-
-/* Line 1806 of yacc.c  */
-#line 833 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
-    break;
-
-  case 184:
-
-/* Line 1806 of yacc.c  */
-#line 835 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
-    break;
-
-  case 185:
-
-/* Line 1806 of yacc.c  */
-#line 840 "parser.yy"
-    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
-    break;
-
-  case 186:
-
-/* Line 1806 of yacc.c  */
-#line 842 "parser.yy"
-    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
-    break;
-
-  case 187:
-
-/* Line 1806 of yacc.c  */
-#line 847 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 188:
-
-/* Line 1806 of yacc.c  */
-#line 851 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
-    break;
-
   case 189:
 
 /* Line 1806 of yacc.c  */
-#line 854 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
+#line 856 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
 
@@ -6015,5 +5977,5 @@
 /* Line 1806 of yacc.c  */
 #line 858 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
+    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
@@ -6021,6 +5983,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 861 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
+#line 860 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
@@ -6028,6 +5990,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 865 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
+#line 864 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
@@ -6035,6 +5997,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 867 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
+#line 866 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
     break;
 
@@ -6042,6 +6004,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 869 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
+#line 873 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
 
@@ -6049,6 +6011,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 873 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
+#line 875 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
 
@@ -6056,26 +6018,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 875 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
-    break;
-
-  case 197:
-
-/* Line 1806 of yacc.c  */
-#line 882 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
-    break;
-
-  case 198:
-
-/* Line 1806 of yacc.c  */
-#line 884 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
-    break;
-
-  case 199:
-
-/* Line 1806 of yacc.c  */
-#line 886 "parser.yy"
+#line 877 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6084,9 +6025,30 @@
     break;
 
+  case 198:
+
+/* Line 1806 of yacc.c  */
+#line 888 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
+    break;
+
+  case 199:
+
+/* Line 1806 of yacc.c  */
+#line 890 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
+    break;
+
+  case 200:
+
+/* Line 1806 of yacc.c  */
+#line 892 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
+    break;
+
   case 201:
 
 /* Line 1806 of yacc.c  */
-#line 897 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
+#line 894 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
 
@@ -6095,5 +6057,5 @@
 /* Line 1806 of yacc.c  */
 #line 899 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
+    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
 
@@ -6102,5 +6064,5 @@
 /* Line 1806 of yacc.c  */
 #line 901 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
+    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
 
@@ -6109,5 +6071,5 @@
 /* Line 1806 of yacc.c  */
 #line 903 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
+    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
 
@@ -6115,6 +6077,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 908 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
+#line 905 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
 
@@ -6123,25 +6085,4 @@
 /* Line 1806 of yacc.c  */
 #line 910 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
-  case 207:
-
-/* Line 1806 of yacc.c  */
-#line 912 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
-    break;
-
-  case 208:
-
-/* Line 1806 of yacc.c  */
-#line 914 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
-  case 209:
-
-/* Line 1806 of yacc.c  */
-#line 919 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6150,8 +6091,8 @@
     break;
 
-  case 211:
-
-/* Line 1806 of yacc.c  */
-#line 933 "parser.yy"
+  case 208:
+
+/* Line 1806 of yacc.c  */
+#line 924 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6160,15 +6101,15 @@
     break;
 
-  case 212:
-
-/* Line 1806 of yacc.c  */
-#line 938 "parser.yy"
+  case 209:
+
+/* Line 1806 of yacc.c  */
+#line 929 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 213:
-
-/* Line 1806 of yacc.c  */
-#line 940 "parser.yy"
+  case 210:
+
+/* Line 1806 of yacc.c  */
+#line 931 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6177,9 +6118,30 @@
     break;
 
+  case 212:
+
+/* Line 1806 of yacc.c  */
+#line 940 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
+    break;
+
+  case 213:
+
+/* Line 1806 of yacc.c  */
+#line 942 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
+    break;
+
+  case 214:
+
+/* Line 1806 of yacc.c  */
+#line 944 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
+    break;
+
   case 215:
 
 /* Line 1806 of yacc.c  */
-#line 949 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
+#line 946 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ); }
     break;
 
@@ -6187,6 +6149,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 951 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
+#line 948 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ); }
     break;
 
@@ -6195,5 +6157,5 @@
 /* Line 1806 of yacc.c  */
 #line 953 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
+    { (yyval.flag) = false; }
     break;
 
@@ -6202,5 +6164,5 @@
 /* Line 1806 of yacc.c  */
 #line 955 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
+    { (yyval.flag) = true; }
     break;
 
@@ -6208,20 +6170,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 957 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
-    break;
-
-  case 220:
-
-/* Line 1806 of yacc.c  */
-#line 962 "parser.yy"
-    { (yyval.flag) = false; }
-    break;
-
-  case 221:
-
-/* Line 1806 of yacc.c  */
-#line 964 "parser.yy"
-    { (yyval.flag) = true; }
+#line 960 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -6229,20 +6177,34 @@
 
 /* Line 1806 of yacc.c  */
-#line 969 "parser.yy"
+#line 967 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+    break;
+
+  case 223:
+
+/* Line 1806 of yacc.c  */
+#line 972 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_asm( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
+    break;
+
+  case 224:
+
+/* Line 1806 of yacc.c  */
+#line 974 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_asm( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
+    break;
+
+  case 225:
+
+/* Line 1806 of yacc.c  */
+#line 979 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 225:
-
-/* Line 1806 of yacc.c  */
-#line 976 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
-    break;
-
   case 226:
 
 /* Line 1806 of yacc.c  */
 #line 981 "parser.yy"
-    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
+    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
 
@@ -6251,5 +6213,5 @@
 /* Line 1806 of yacc.c  */
 #line 983 "parser.yy"
-    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
 
@@ -6258,5 +6220,5 @@
 /* Line 1806 of yacc.c  */
 #line 988 "parser.yy"
-    { (yyval.constant) = 0; }
+    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -6265,5 +6227,5 @@
 /* Line 1806 of yacc.c  */
 #line 990 "parser.yy"
-    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
+    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
 
@@ -6271,20 +6233,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 992 "parser.yy"
-    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
-    break;
-
-  case 231:
-
-/* Line 1806 of yacc.c  */
 #line 997 "parser.yy"
-    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 232:
-
-/* Line 1806 of yacc.c  */
-#line 999 "parser.yy"
-    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
+    { (yyval.decl) = 0; }
     break;
 
@@ -6292,47 +6240,40 @@
 
 /* Line 1806 of yacc.c  */
-#line 1006 "parser.yy"
+#line 1004 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 234:
+
+/* Line 1806 of yacc.c  */
+#line 1009 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 236:
-
-/* Line 1806 of yacc.c  */
-#line 1013 "parser.yy"
+  case 237:
+
+/* Line 1806 of yacc.c  */
+#line 1016 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 237:
-
-/* Line 1806 of yacc.c  */
-#line 1018 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 240:
-
-/* Line 1806 of yacc.c  */
-#line 1025 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 245:
-
-/* Line 1806 of yacc.c  */
-#line 1039 "parser.yy"
+  case 242:
+
+/* Line 1806 of yacc.c  */
+#line 1030 "parser.yy"
     {}
     break;
 
-  case 246:
-
-/* Line 1806 of yacc.c  */
-#line 1040 "parser.yy"
+  case 243:
+
+/* Line 1806 of yacc.c  */
+#line 1031 "parser.yy"
     {}
     break;
 
-  case 254:
-
-/* Line 1806 of yacc.c  */
-#line 1069 "parser.yy"
+  case 251:
+
+/* Line 1806 of yacc.c  */
+#line 1060 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6341,8 +6282,8 @@
     break;
 
-  case 255:
-
-/* Line 1806 of yacc.c  */
-#line 1076 "parser.yy"
+  case 252:
+
+/* Line 1806 of yacc.c  */
+#line 1067 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6351,8 +6292,8 @@
     break;
 
-  case 256:
-
-/* Line 1806 of yacc.c  */
-#line 1081 "parser.yy"
+  case 253:
+
+/* Line 1806 of yacc.c  */
+#line 1072 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6361,8 +6302,8 @@
     break;
 
-  case 257:
-
-/* Line 1806 of yacc.c  */
-#line 1091 "parser.yy"
+  case 254:
+
+/* Line 1806 of yacc.c  */
+#line 1082 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6371,8 +6312,8 @@
     break;
 
-  case 258:
-
-/* Line 1806 of yacc.c  */
-#line 1096 "parser.yy"
+  case 255:
+
+/* Line 1806 of yacc.c  */
+#line 1087 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6381,8 +6322,8 @@
     break;
 
-  case 259:
-
-/* Line 1806 of yacc.c  */
-#line 1101 "parser.yy"
+  case 256:
+
+/* Line 1806 of yacc.c  */
+#line 1092 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6391,8 +6332,8 @@
     break;
 
-  case 260:
-
-/* Line 1806 of yacc.c  */
-#line 1109 "parser.yy"
+  case 257:
+
+/* Line 1806 of yacc.c  */
+#line 1100 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6401,8 +6342,8 @@
     break;
 
-  case 261:
-
-/* Line 1806 of yacc.c  */
-#line 1114 "parser.yy"
+  case 258:
+
+/* Line 1806 of yacc.c  */
+#line 1105 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6411,8 +6352,8 @@
     break;
 
-  case 262:
-
-/* Line 1806 of yacc.c  */
-#line 1119 "parser.yy"
+  case 259:
+
+/* Line 1806 of yacc.c  */
+#line 1110 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6421,8 +6362,8 @@
     break;
 
-  case 263:
-
-/* Line 1806 of yacc.c  */
-#line 1124 "parser.yy"
+  case 260:
+
+/* Line 1806 of yacc.c  */
+#line 1115 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6431,8 +6372,8 @@
     break;
 
-  case 264:
-
-/* Line 1806 of yacc.c  */
-#line 1129 "parser.yy"
+  case 261:
+
+/* Line 1806 of yacc.c  */
+#line 1120 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6441,8 +6382,8 @@
     break;
 
-  case 265:
-
-/* Line 1806 of yacc.c  */
-#line 1137 "parser.yy"
+  case 262:
+
+/* Line 1806 of yacc.c  */
+#line 1128 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6450,8 +6391,8 @@
     break;
 
-  case 266:
-
-/* Line 1806 of yacc.c  */
-#line 1160 "parser.yy"
+  case 263:
+
+/* Line 1806 of yacc.c  */
+#line 1151 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6459,8 +6400,8 @@
     break;
 
-  case 267:
-
-/* Line 1806 of yacc.c  */
-#line 1164 "parser.yy"
+  case 264:
+
+/* Line 1806 of yacc.c  */
+#line 1155 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6468,22 +6409,22 @@
     break;
 
-  case 268:
+  case 265:
+
+/* Line 1806 of yacc.c  */
+#line 1162 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
+    break;
+
+  case 266:
+
+/* Line 1806 of yacc.c  */
+#line 1166 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
+    break;
+
+  case 267:
 
 /* Line 1806 of yacc.c  */
 #line 1171 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 269:
-
-/* Line 1806 of yacc.c  */
-#line 1175 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
-    break;
-
-  case 270:
-
-/* Line 1806 of yacc.c  */
-#line 1180 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6492,8 +6433,8 @@
     break;
 
-  case 271:
-
-/* Line 1806 of yacc.c  */
-#line 1185 "parser.yy"
+  case 268:
+
+/* Line 1806 of yacc.c  */
+#line 1176 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6502,8 +6443,8 @@
     break;
 
-  case 272:
-
-/* Line 1806 of yacc.c  */
-#line 1190 "parser.yy"
+  case 269:
+
+/* Line 1806 of yacc.c  */
+#line 1181 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6512,8 +6453,8 @@
     break;
 
-  case 273:
-
-/* Line 1806 of yacc.c  */
-#line 1201 "parser.yy"
+  case 270:
+
+/* Line 1806 of yacc.c  */
+#line 1192 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6522,8 +6463,8 @@
     break;
 
-  case 274:
-
-/* Line 1806 of yacc.c  */
-#line 1206 "parser.yy"
+  case 271:
+
+/* Line 1806 of yacc.c  */
+#line 1197 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6532,8 +6473,8 @@
     break;
 
-  case 275:
-
-/* Line 1806 of yacc.c  */
-#line 1211 "parser.yy"
+  case 272:
+
+/* Line 1806 of yacc.c  */
+#line 1202 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6542,8 +6483,8 @@
     break;
 
-  case 276:
-
-/* Line 1806 of yacc.c  */
-#line 1216 "parser.yy"
+  case 273:
+
+/* Line 1806 of yacc.c  */
+#line 1207 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6552,8 +6493,8 @@
     break;
 
-  case 277:
-
-/* Line 1806 of yacc.c  */
-#line 1221 "parser.yy"
+  case 274:
+
+/* Line 1806 of yacc.c  */
+#line 1212 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6562,8 +6503,8 @@
     break;
 
-  case 278:
-
-/* Line 1806 of yacc.c  */
-#line 1230 "parser.yy"
+  case 275:
+
+/* Line 1806 of yacc.c  */
+#line 1221 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6572,8 +6513,8 @@
     break;
 
-  case 279:
-
-/* Line 1806 of yacc.c  */
-#line 1235 "parser.yy"
+  case 276:
+
+/* Line 1806 of yacc.c  */
+#line 1226 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6582,8 +6523,8 @@
     break;
 
-  case 284:
-
-/* Line 1806 of yacc.c  */
-#line 1252 "parser.yy"
+  case 281:
+
+/* Line 1806 of yacc.c  */
+#line 1243 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6592,8 +6533,8 @@
     break;
 
-  case 285:
-
-/* Line 1806 of yacc.c  */
-#line 1257 "parser.yy"
+  case 282:
+
+/* Line 1806 of yacc.c  */
+#line 1248 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6602,9 +6543,16 @@
     break;
 
+  case 291:
+
+/* Line 1806 of yacc.c  */
+#line 1270 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
   case 294:
 
 /* Line 1806 of yacc.c  */
-#line 1279 "parser.yy"
-    { (yyval.decl) = 0; }
+#line 1282 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -6612,6 +6560,20 @@
 
 /* Line 1806 of yacc.c  */
-#line 1291 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+#line 1293 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+    break;
+
+  case 298:
+
+/* Line 1806 of yacc.c  */
+#line 1295 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
+    break;
+
+  case 299:
+
+/* Line 1806 of yacc.c  */
+#line 1297 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
 
@@ -6619,6 +6581,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1302 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+#line 1299 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
 
@@ -6626,6 +6588,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1304 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
+#line 1301 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
 
@@ -6633,26 +6595,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1306 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
-    break;
-
-  case 303:
-
-/* Line 1806 of yacc.c  */
-#line 1308 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
-    break;
-
-  case 304:
-
-/* Line 1806 of yacc.c  */
-#line 1310 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
-    break;
-
-  case 305:
-
-/* Line 1806 of yacc.c  */
-#line 1312 "parser.yy"
+#line 1303 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6660,8 +6601,8 @@
     break;
 
-  case 306:
-
-/* Line 1806 of yacc.c  */
-#line 1316 "parser.yy"
+  case 303:
+
+/* Line 1806 of yacc.c  */
+#line 1307 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6670,344 +6611,344 @@
     break;
 
+  case 305:
+
+/* Line 1806 of yacc.c  */
+#line 1316 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 306:
+
+/* Line 1806 of yacc.c  */
+#line 1318 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
   case 308:
 
 /* Line 1806 of yacc.c  */
-#line 1325 "parser.yy"
+#line 1329 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 309:
-
-/* Line 1806 of yacc.c  */
-#line 1327 "parser.yy"
+  case 310:
+
+/* Line 1806 of yacc.c  */
+#line 1338 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
+    break;
+
+  case 311:
+
+/* Line 1806 of yacc.c  */
+#line 1340 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
+    break;
+
+  case 312:
+
+/* Line 1806 of yacc.c  */
+#line 1342 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
+    break;
+
+  case 313:
+
+/* Line 1806 of yacc.c  */
+#line 1344 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
+    break;
+
+  case 314:
+
+/* Line 1806 of yacc.c  */
+#line 1346 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
+    break;
+
+  case 315:
+
+/* Line 1806 of yacc.c  */
+#line 1348 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
+    break;
+
+  case 316:
+
+/* Line 1806 of yacc.c  */
+#line 1350 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
+    break;
+
+  case 317:
+
+/* Line 1806 of yacc.c  */
+#line 1352 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
+    break;
+
+  case 318:
+
+/* Line 1806 of yacc.c  */
+#line 1357 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
+    break;
+
+  case 319:
+
+/* Line 1806 of yacc.c  */
+#line 1359 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
+    break;
+
+  case 320:
+
+/* Line 1806 of yacc.c  */
+#line 1361 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
+    break;
+
+  case 321:
+
+/* Line 1806 of yacc.c  */
+#line 1363 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
+    break;
+
+  case 322:
+
+/* Line 1806 of yacc.c  */
+#line 1365 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
+    break;
+
+  case 323:
+
+/* Line 1806 of yacc.c  */
+#line 1367 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
+    break;
+
+  case 324:
+
+/* Line 1806 of yacc.c  */
+#line 1369 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
+    break;
+
+  case 325:
+
+/* Line 1806 of yacc.c  */
+#line 1371 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
+    break;
+
+  case 326:
+
+/* Line 1806 of yacc.c  */
+#line 1373 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
+    break;
+
+  case 327:
+
+/* Line 1806 of yacc.c  */
+#line 1375 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
+    break;
+
+  case 328:
+
+/* Line 1806 of yacc.c  */
+#line 1377 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
+    break;
+
+  case 329:
+
+/* Line 1806 of yacc.c  */
+#line 1379 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
+    break;
+
+  case 330:
+
+/* Line 1806 of yacc.c  */
+#line 1381 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
+    break;
+
+  case 332:
+
+/* Line 1806 of yacc.c  */
+#line 1388 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 333:
+
+/* Line 1806 of yacc.c  */
+#line 1390 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 334:
+
+/* Line 1806 of yacc.c  */
+#line 1392 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 311:
-
-/* Line 1806 of yacc.c  */
-#line 1338 "parser.yy"
+  case 335:
+
+/* Line 1806 of yacc.c  */
+#line 1394 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1400 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 339:
+
+/* Line 1806 of yacc.c  */
+#line 1407 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1409 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 313:
-
-/* Line 1806 of yacc.c  */
-#line 1347 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
-    break;
-
-  case 314:
-
-/* Line 1806 of yacc.c  */
-#line 1349 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
-    break;
-
-  case 315:
-
-/* Line 1806 of yacc.c  */
-#line 1351 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
-    break;
-
-  case 316:
-
-/* Line 1806 of yacc.c  */
-#line 1353 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
-    break;
-
-  case 317:
-
-/* Line 1806 of yacc.c  */
-#line 1355 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
-    break;
-
-  case 318:
-
-/* Line 1806 of yacc.c  */
-#line 1357 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
-    break;
-
-  case 319:
-
-/* Line 1806 of yacc.c  */
-#line 1359 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
-    break;
-
-  case 320:
-
-/* Line 1806 of yacc.c  */
-#line 1361 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
-    break;
-
-  case 321:
-
-/* Line 1806 of yacc.c  */
-#line 1366 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
-    break;
-
-  case 322:
-
-/* Line 1806 of yacc.c  */
-#line 1368 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
-    break;
-
-  case 323:
-
-/* Line 1806 of yacc.c  */
-#line 1370 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
-    break;
-
-  case 324:
-
-/* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
-    break;
-
-  case 325:
-
-/* Line 1806 of yacc.c  */
-#line 1374 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
-    break;
-
-  case 326:
-
-/* Line 1806 of yacc.c  */
-#line 1376 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
-    break;
-
-  case 327:
-
-/* Line 1806 of yacc.c  */
-#line 1378 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
-    break;
-
-  case 328:
-
-/* Line 1806 of yacc.c  */
-#line 1380 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
-    break;
-
-  case 329:
-
-/* Line 1806 of yacc.c  */
-#line 1382 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
-    break;
-
-  case 330:
-
-/* Line 1806 of yacc.c  */
-#line 1384 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
-    break;
-
-  case 331:
-
-/* Line 1806 of yacc.c  */
-#line 1386 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
-    break;
-
-  case 332:
-
-/* Line 1806 of yacc.c  */
-#line 1388 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
-    break;
-
-  case 333:
-
-/* Line 1806 of yacc.c  */
-#line 1390 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
-    break;
-
-  case 335:
-
-/* Line 1806 of yacc.c  */
-#line 1397 "parser.yy"
+  case 341:
+
+/* Line 1806 of yacc.c  */
+#line 1411 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1416 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
+    break;
+
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1418 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 344:
+
+/* Line 1806 of yacc.c  */
+#line 1420 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 345:
+
+/* Line 1806 of yacc.c  */
+#line 1422 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 347:
+
+/* Line 1806 of yacc.c  */
+#line 1428 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 336:
-
-/* Line 1806 of yacc.c  */
-#line 1399 "parser.yy"
+  case 348:
+
+/* Line 1806 of yacc.c  */
+#line 1430 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1401 "parser.yy"
+  case 349:
+
+/* Line 1806 of yacc.c  */
+#line 1432 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 338:
-
-/* Line 1806 of yacc.c  */
-#line 1403 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 340:
-
-/* Line 1806 of yacc.c  */
-#line 1409 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 342:
-
-/* Line 1806 of yacc.c  */
-#line 1416 "parser.yy"
+  case 351:
+
+/* Line 1806 of yacc.c  */
+#line 1438 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 343:
-
-/* Line 1806 of yacc.c  */
-#line 1418 "parser.yy"
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1440 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 344:
-
-/* Line 1806 of yacc.c  */
-#line 1420 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 345:
-
-/* Line 1806 of yacc.c  */
-#line 1425 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
-    break;
-
-  case 346:
-
-/* Line 1806 of yacc.c  */
-#line 1427 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 347:
-
-/* Line 1806 of yacc.c  */
-#line 1429 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 348:
-
-/* Line 1806 of yacc.c  */
-#line 1431 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 350:
-
-/* Line 1806 of yacc.c  */
-#line 1437 "parser.yy"
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1446 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1439 "parser.yy"
+  case 355:
+
+/* Line 1806 of yacc.c  */
+#line 1448 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 352:
-
-/* Line 1806 of yacc.c  */
-#line 1441 "parser.yy"
+  case 356:
+
+/* Line 1806 of yacc.c  */
+#line 1450 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 354:
-
-/* Line 1806 of yacc.c  */
-#line 1447 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 355:
-
-/* Line 1806 of yacc.c  */
-#line 1449 "parser.yy"
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1455 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
+    break;
+
+  case 358:
+
+/* Line 1806 of yacc.c  */
+#line 1457 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 359:
+
+/* Line 1806 of yacc.c  */
+#line 1459 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 357:
-
-/* Line 1806 of yacc.c  */
-#line 1455 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 358:
-
-/* Line 1806 of yacc.c  */
-#line 1457 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 359:
-
-/* Line 1806 of yacc.c  */
-#line 1459 "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 1464 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 361:
-
-/* Line 1806 of yacc.c  */
-#line 1466 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
   case 362:
 
 /* Line 1806 of yacc.c  */
-#line 1468 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 365:
-
-/* Line 1806 of yacc.c  */
-#line 1478 "parser.yy"
+#line 1469 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
     break;
 
-  case 366:
-
-/* Line 1806 of yacc.c  */
-#line 1480 "parser.yy"
+  case 363:
+
+/* Line 1806 of yacc.c  */
+#line 1471 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7016,9 +6957,30 @@
     break;
 
+  case 364:
+
+/* Line 1806 of yacc.c  */
+#line 1476 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+    break;
+
+  case 365:
+
+/* Line 1806 of yacc.c  */
+#line 1478 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
+    break;
+
+  case 366:
+
+/* Line 1806 of yacc.c  */
+#line 1480 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
+    break;
+
   case 367:
 
 /* Line 1806 of yacc.c  */
-#line 1485 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+#line 1482 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7027,5 +6989,5 @@
 /* Line 1806 of yacc.c  */
 #line 1487 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
+    { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
 
@@ -7034,5 +6996,5 @@
 /* Line 1806 of yacc.c  */
 #line 1489 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
+    { (yyval.aggKey) = DeclarationNode::Union; }
     break;
 
@@ -7040,6 +7002,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1491 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
+#line 1494 "parser.yy"
+    { (yyval.decl) = 0; }
     break;
 
@@ -7048,12 +7010,5 @@
 /* Line 1806 of yacc.c  */
 #line 1496 "parser.yy"
-    { (yyval.aggKey) = DeclarationNode::Struct; }
-    break;
-
-  case 372:
-
-/* Line 1806 of yacc.c  */
-#line 1498 "parser.yy"
-    { (yyval.aggKey) = DeclarationNode::Union; }
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7061,26 +7016,12 @@
 
 /* Line 1806 of yacc.c  */
-#line 1503 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 374:
+#line 1502 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
+    break;
+
+  case 375:
 
 /* Line 1806 of yacc.c  */
 #line 1505 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 376:
-
-/* Line 1806 of yacc.c  */
-#line 1511 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
-    break;
-
-  case 378:
-
-/* Line 1806 of yacc.c  */
-#line 1514 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7090,9 +7031,30 @@
     break;
 
+  case 377:
+
+/* Line 1806 of yacc.c  */
+#line 1515 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
+    break;
+
+  case 378:
+
+/* Line 1806 of yacc.c  */
+#line 1517 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
+    break;
+
+  case 379:
+
+/* Line 1806 of yacc.c  */
+#line 1519 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
+    break;
+
   case 380:
 
 /* Line 1806 of yacc.c  */
 #line 1524 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
@@ -7101,5 +7063,5 @@
 /* Line 1806 of yacc.c  */
 #line 1526 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
 
@@ -7107,6 +7069,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1528 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
+#line 1531 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
 
@@ -7115,5 +7077,5 @@
 /* Line 1806 of yacc.c  */
 #line 1533 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
 
@@ -7121,6 +7083,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1535 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
+#line 1536 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
@@ -7128,13 +7090,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1540 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
-    break;
-
-  case 386:
-
-/* Line 1806 of yacc.c  */
-#line 1542 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
+#line 1539 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
@@ -7143,5 +7098,5 @@
 /* Line 1806 of yacc.c  */
 #line 1545 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+    { (yyval.en) = 0; }
     break;
 
@@ -7149,13 +7104,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1548 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 390:
-
-/* Line 1806 of yacc.c  */
-#line 1554 "parser.yy"
-    { (yyval.en) = 0; }
+#line 1547 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
+    break;
+
+  case 389:
+
+/* Line 1806 of yacc.c  */
+#line 1552 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
@@ -7163,6 +7118,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1556 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].en); }
+#line 1561 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
 
@@ -7170,19 +7125,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1561 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en); }
-    break;
-
-  case 394:
-
-/* Line 1806 of yacc.c  */
-#line 1570 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 395:
-
-/* Line 1806 of yacc.c  */
-#line 1572 "parser.yy"
+#line 1563 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7191,9 +7132,30 @@
     break;
 
+  case 393:
+
+/* Line 1806 of yacc.c  */
+#line 1568 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+    break;
+
+  case 394:
+
+/* Line 1806 of yacc.c  */
+#line 1570 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
+    break;
+
+  case 395:
+
+/* Line 1806 of yacc.c  */
+#line 1575 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
+    break;
+
   case 396:
 
 /* Line 1806 of yacc.c  */
 #line 1577 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -7201,6 +7163,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1579 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
+#line 1582 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -7209,5 +7171,5 @@
 /* Line 1806 of yacc.c  */
 #line 1584 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
+    { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
@@ -7215,97 +7177,90 @@
 
 /* Line 1806 of yacc.c  */
-#line 1586 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
-    break;
-
-  case 400:
-
-/* Line 1806 of yacc.c  */
 #line 1591 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 401:
-
-/* Line 1806 of yacc.c  */
-#line 1593 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en); }
-    break;
-
-  case 402:
-
-/* Line 1806 of yacc.c  */
-#line 1600 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 406:
-
-/* Line 1806 of yacc.c  */
-#line 1608 "parser.yy"
+  case 403:
+
+/* Line 1806 of yacc.c  */
+#line 1599 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
+  case 404:
+
+/* Line 1806 of yacc.c  */
+#line 1601 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 405:
+
+/* Line 1806 of yacc.c  */
+#line 1603 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
   case 407:
 
 /* Line 1806 of yacc.c  */
-#line 1610 "parser.yy"
+#line 1611 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 408:
+
+/* Line 1806 of yacc.c  */
+#line 1613 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 409:
+
+/* Line 1806 of yacc.c  */
+#line 1615 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
+    break;
+
+  case 411:
+
+/* Line 1806 of yacc.c  */
+#line 1621 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 412:
+
+/* Line 1806 of yacc.c  */
+#line 1626 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 415:
+
+/* Line 1806 of yacc.c  */
+#line 1633 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 408:
-
-/* Line 1806 of yacc.c  */
-#line 1612 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 410:
-
-/* Line 1806 of yacc.c  */
-#line 1620 "parser.yy"
+  case 418:
+
+/* Line 1806 of yacc.c  */
+#line 1640 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1622 "parser.yy"
+  case 419:
+
+/* Line 1806 of yacc.c  */
+#line 1642 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1624 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
-    break;
-
-  case 414:
-
-/* Line 1806 of yacc.c  */
-#line 1630 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 415:
-
-/* Line 1806 of yacc.c  */
-#line 1635 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 418:
-
-/* Line 1806 of yacc.c  */
-#line 1642 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
   case 421:
 
 /* Line 1806 of yacc.c  */
-#line 1649 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+#line 1651 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
@@ -7313,40 +7268,26 @@
 
 /* Line 1806 of yacc.c  */
-#line 1651 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 424:
-
-/* Line 1806 of yacc.c  */
-#line 1660 "parser.yy"
+#line 1654 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
-  case 425:
-
-/* Line 1806 of yacc.c  */
-#line 1663 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 426:
-
-/* Line 1806 of yacc.c  */
-#line 1665 "parser.yy"
+  case 423:
+
+/* Line 1806 of yacc.c  */
+#line 1656 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
 
-  case 431:
-
-/* Line 1806 of yacc.c  */
-#line 1675 "parser.yy"
+  case 428:
+
+/* Line 1806 of yacc.c  */
+#line 1666 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 433:
-
-/* Line 1806 of yacc.c  */
-#line 1681 "parser.yy"
+  case 430:
+
+/* Line 1806 of yacc.c  */
+#line 1672 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7355,8 +7296,8 @@
     break;
 
-  case 434:
-
-/* Line 1806 of yacc.c  */
-#line 1686 "parser.yy"
+  case 431:
+
+/* Line 1806 of yacc.c  */
+#line 1677 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7365,37 +7306,58 @@
     break;
 
-  case 436:
+  case 433:
+
+/* Line 1806 of yacc.c  */
+#line 1686 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 434:
 
 /* Line 1806 of yacc.c  */
 #line 1695 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
+    break;
+
+  case 435:
+
+/* Line 1806 of yacc.c  */
+#line 1697 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
+    break;
+
+  case 447:
+
+/* Line 1806 of yacc.c  */
+#line 1722 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 437:
-
-/* Line 1806 of yacc.c  */
-#line 1704 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 438:
-
-/* Line 1806 of yacc.c  */
-#line 1706 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
-    break;
-
-  case 450:
-
-/* Line 1806 of yacc.c  */
-#line 1731 "parser.yy"
+  case 451:
+
+/* Line 1806 of yacc.c  */
+#line 1730 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
+  case 452:
+
+/* Line 1806 of yacc.c  */
+#line 1735 "parser.yy"
+    { (yyval.in) = 0; }
+    break;
+
+  case 453:
+
+/* Line 1806 of yacc.c  */
+#line 1737 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in); }
+    break;
+
   case 454:
 
 /* Line 1806 of yacc.c  */
 #line 1739 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
     break;
 
@@ -7403,48 +7365,41 @@
 
 /* Line 1806 of yacc.c  */
+#line 1743 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
+    break;
+
+  case 456:
+
+/* Line 1806 of yacc.c  */
 #line 1744 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
+    break;
+
+  case 457:
+
+/* Line 1806 of yacc.c  */
+#line 1749 "parser.yy"
     { (yyval.in) = 0; }
     break;
 
-  case 456:
-
-/* Line 1806 of yacc.c  */
-#line 1746 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in); }
-    break;
-
-  case 457:
-
-/* Line 1806 of yacc.c  */
-#line 1748 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
-    break;
-
-  case 458:
+  case 459:
+
+/* Line 1806 of yacc.c  */
+#line 1751 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
+    break;
+
+  case 460:
 
 /* Line 1806 of yacc.c  */
 #line 1752 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
-    break;
-
-  case 459:
-
-/* Line 1806 of yacc.c  */
-#line 1753 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
-    break;
-
-  case 460:
-
-/* Line 1806 of yacc.c  */
-#line 1758 "parser.yy"
-    { (yyval.in) = 0; }
-    break;
-
-  case 462:
-
-/* Line 1806 of yacc.c  */
-#line 1760 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
+    break;
+
+  case 461:
+
+/* Line 1806 of yacc.c  */
+#line 1754 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
 
@@ -7452,13 +7407,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1761 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
-    break;
-
-  case 464:
-
-/* Line 1806 of yacc.c  */
-#line 1763 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
+#line 1770 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
+    break;
+
+  case 465:
+
+/* Line 1806 of yacc.c  */
+#line 1776 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -7466,6 +7421,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1779 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
+#line 1782 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
+    break;
+
+  case 467:
+
+/* Line 1806 of yacc.c  */
+#line 1785 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
 
@@ -7473,6 +7435,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1785 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
+#line 1787 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
 
@@ -7480,6 +7442,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1793 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
+#line 1789 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
     break;
 
@@ -7487,13 +7449,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1795 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
-    break;
-
-  case 471:
-
-/* Line 1806 of yacc.c  */
-#line 1798 "parser.yy"
-    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
+#line 1791 "parser.yy"
+    { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
 
@@ -7501,6 +7456,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1800 "parser.yy"
-    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
+#line 1815 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
@@ -7508,6 +7463,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1802 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new CompositeExprNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ), true ); }
+#line 1817 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7515,6 +7470,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1804 "parser.yy"
-    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
+#line 1819 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
@@ -7522,5 +7477,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1828 "parser.yy"
+#line 1825 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7529,5 +7484,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1830 "parser.yy"
+#line 1827 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7537,5 +7492,5 @@
 /* Line 1806 of yacc.c  */
 #line 1832 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
@@ -7544,5 +7499,5 @@
 /* Line 1806 of yacc.c  */
 #line 1838 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
@@ -7550,6 +7505,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1840 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+#line 1843 "parser.yy"
+    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
 
@@ -7558,5 +7513,5 @@
 /* Line 1806 of yacc.c  */
 #line 1845 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -7565,5 +7520,5 @@
 /* Line 1806 of yacc.c  */
 #line 1851 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
+    { (yyval.tclass) = DeclarationNode::Type; }
     break;
 
@@ -7571,6 +7526,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1856 "parser.yy"
-    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
+#line 1853 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
 
@@ -7578,6 +7533,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1858 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
+#line 1855 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Dtype; }
+    break;
+
+  case 487:
+
+/* Line 1806 of yacc.c  */
+#line 1860 "parser.yy"
+    { (yyval.decl) = 0; }
     break;
 
@@ -7585,6 +7547,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1864 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Type; }
+#line 1862 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7592,33 +7554,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1866 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Ftype; }
-    break;
-
-  case 490:
-
-/* Line 1806 of yacc.c  */
-#line 1868 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Dtype; }
-    break;
-
-  case 491:
-
-/* Line 1806 of yacc.c  */
-#line 1873 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 492:
-
-/* Line 1806 of yacc.c  */
-#line 1875 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 493:
-
-/* Line 1806 of yacc.c  */
-#line 1880 "parser.yy"
+#line 1867 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7627,9 +7561,30 @@
     break;
 
+  case 490:
+
+/* Line 1806 of yacc.c  */
+#line 1872 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
+    break;
+
+  case 491:
+
+/* Line 1806 of yacc.c  */
+#line 1874 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 492:
+
+/* Line 1806 of yacc.c  */
+#line 1879 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
+    break;
+
   case 494:
 
 /* Line 1806 of yacc.c  */
-#line 1885 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
+#line 1882 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
     break;
 
@@ -7637,6 +7592,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1887 "parser.yy"
-    { (yyval.decl) = 0; }
+#line 1884 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
 
@@ -7644,6 +7599,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1892 "parser.yy"
-    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
+#line 1889 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
+    break;
+
+  case 497:
+
+/* Line 1806 of yacc.c  */
+#line 1891 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
 
@@ -7651,6 +7613,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1895 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
+#line 1893 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
@@ -7658,6 +7620,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1897 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
+#line 1898 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7665,6 +7627,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1902 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
+#line 1900 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -7672,33 +7634,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1904 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 502:
-
-/* Line 1806 of yacc.c  */
-#line 1906 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 503:
-
-/* Line 1806 of yacc.c  */
-#line 1911 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 504:
-
-/* Line 1806 of yacc.c  */
-#line 1913 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 505:
-
-/* Line 1806 of yacc.c  */
-#line 1918 "parser.yy"
+#line 1905 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7707,8 +7641,8 @@
     break;
 
-  case 506:
-
-/* Line 1806 of yacc.c  */
-#line 1923 "parser.yy"
+  case 502:
+
+/* Line 1806 of yacc.c  */
+#line 1910 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7717,8 +7651,8 @@
     break;
 
-  case 507:
-
-/* Line 1806 of yacc.c  */
-#line 1931 "parser.yy"
+  case 503:
+
+/* Line 1806 of yacc.c  */
+#line 1918 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7727,8 +7661,8 @@
     break;
 
-  case 508:
-
-/* Line 1806 of yacc.c  */
-#line 1936 "parser.yy"
+  case 504:
+
+/* Line 1806 of yacc.c  */
+#line 1923 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7737,8 +7671,8 @@
     break;
 
-  case 509:
-
-/* Line 1806 of yacc.c  */
-#line 1941 "parser.yy"
+  case 505:
+
+/* Line 1806 of yacc.c  */
+#line 1928 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7748,15 +7682,15 @@
     break;
 
-  case 511:
-
-/* Line 1806 of yacc.c  */
-#line 1951 "parser.yy"
+  case 507:
+
+/* Line 1806 of yacc.c  */
+#line 1938 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 514:
-
-/* Line 1806 of yacc.c  */
-#line 1961 "parser.yy"
+  case 510:
+
+/* Line 1806 of yacc.c  */
+#line 1948 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7765,8 +7699,8 @@
     break;
 
-  case 515:
-
-/* Line 1806 of yacc.c  */
-#line 1966 "parser.yy"
+  case 511:
+
+/* Line 1806 of yacc.c  */
+#line 1953 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7775,8 +7709,8 @@
     break;
 
-  case 516:
-
-/* Line 1806 of yacc.c  */
-#line 1971 "parser.yy"
+  case 512:
+
+/* Line 1806 of yacc.c  */
+#line 1958 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7785,8 +7719,8 @@
     break;
 
-  case 517:
-
-/* Line 1806 of yacc.c  */
-#line 1979 "parser.yy"
+  case 513:
+
+/* Line 1806 of yacc.c  */
+#line 1966 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7795,8 +7729,8 @@
     break;
 
-  case 518:
-
-/* Line 1806 of yacc.c  */
-#line 1984 "parser.yy"
+  case 514:
+
+/* Line 1806 of yacc.c  */
+#line 1971 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7805,15 +7739,15 @@
     break;
 
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 1994 "parser.yy"
+  case 515:
+
+/* Line 1806 of yacc.c  */
+#line 1981 "parser.yy"
     {}
     break;
 
-  case 520:
-
-/* Line 1806 of yacc.c  */
-#line 1996 "parser.yy"
+  case 516:
+
+/* Line 1806 of yacc.c  */
+#line 1983 "parser.yy"
     {
 			if ( theTree ) {
@@ -7825,29 +7759,29 @@
     break;
 
-  case 522:
+  case 518:
+
+/* Line 1806 of yacc.c  */
+#line 1995 "parser.yy"
+    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
+    break;
+
+  case 519:
+
+/* Line 1806 of yacc.c  */
+#line 2000 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 523:
 
 /* Line 1806 of yacc.c  */
 #line 2008 "parser.yy"
-    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
-    break;
-
-  case 523:
-
-/* Line 1806 of yacc.c  */
-#line 2013 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 527:
-
-/* Line 1806 of yacc.c  */
-#line 2021 "parser.yy"
     {}
     break;
 
-  case 528:
-
-/* Line 1806 of yacc.c  */
-#line 2023 "parser.yy"
+  case 524:
+
+/* Line 1806 of yacc.c  */
+#line 2010 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -7856,8 +7790,8 @@
     break;
 
-  case 529:
-
-/* Line 1806 of yacc.c  */
-#line 2028 "parser.yy"
+  case 525:
+
+/* Line 1806 of yacc.c  */
+#line 2015 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7867,8 +7801,8 @@
     break;
 
-  case 530:
-
-/* Line 1806 of yacc.c  */
-#line 2034 "parser.yy"
+  case 526:
+
+/* Line 1806 of yacc.c  */
+#line 2021 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7878,8 +7812,8 @@
     break;
 
-  case 532:
-
-/* Line 1806 of yacc.c  */
-#line 2049 "parser.yy"
+  case 528:
+
+/* Line 1806 of yacc.c  */
+#line 2036 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7889,8 +7823,8 @@
     break;
 
-  case 533:
-
-/* Line 1806 of yacc.c  */
-#line 2055 "parser.yy"
+  case 529:
+
+/* Line 1806 of yacc.c  */
+#line 2042 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7900,8 +7834,8 @@
     break;
 
-  case 534:
-
-/* Line 1806 of yacc.c  */
-#line 2064 "parser.yy"
+  case 530:
+
+/* Line 1806 of yacc.c  */
+#line 2051 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7911,8 +7845,8 @@
     break;
 
-  case 535:
-
-/* Line 1806 of yacc.c  */
-#line 2070 "parser.yy"
+  case 531:
+
+/* Line 1806 of yacc.c  */
+#line 2057 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7922,8 +7856,8 @@
     break;
 
-  case 536:
-
-/* Line 1806 of yacc.c  */
-#line 2076 "parser.yy"
+  case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2063 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7933,8 +7867,8 @@
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2082 "parser.yy"
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2069 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7944,8 +7878,8 @@
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2088 "parser.yy"
+  case 534:
+
+/* Line 1806 of yacc.c  */
+#line 2075 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7955,8 +7889,8 @@
     break;
 
-  case 539:
-
-/* Line 1806 of yacc.c  */
-#line 2096 "parser.yy"
+  case 535:
+
+/* Line 1806 of yacc.c  */
+#line 2083 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7966,8 +7900,8 @@
     break;
 
-  case 540:
-
-/* Line 1806 of yacc.c  */
-#line 2102 "parser.yy"
+  case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2089 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7977,8 +7911,8 @@
     break;
 
-  case 541:
-
-/* Line 1806 of yacc.c  */
-#line 2110 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2097 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7988,8 +7922,8 @@
     break;
 
-  case 542:
-
-/* Line 1806 of yacc.c  */
-#line 2116 "parser.yy"
+  case 538:
+
+/* Line 1806 of yacc.c  */
+#line 2103 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7999,9 +7933,23 @@
     break;
 
-  case 546:
-
-/* Line 1806 of yacc.c  */
-#line 2131 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+  case 542:
+
+/* Line 1806 of yacc.c  */
+#line 2118 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 545:
+
+/* Line 1806 of yacc.c  */
+#line 2128 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 548:
+
+/* Line 1806 of yacc.c  */
+#line 2135 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
@@ -8013,16 +7961,30 @@
     break;
 
-  case 552:
-
-/* Line 1806 of yacc.c  */
-#line 2148 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 553:
-
-/* Line 1806 of yacc.c  */
-#line 2154 "parser.yy"
-    { (yyval.decl) = 0; }
+  case 555:
+
+/* Line 1806 of yacc.c  */
+#line 2156 "parser.yy"
+    {}
+    break;
+
+  case 556:
+
+/* Line 1806 of yacc.c  */
+#line 2157 "parser.yy"
+    {}
+    break;
+
+  case 557:
+
+/* Line 1806 of yacc.c  */
+#line 2158 "parser.yy"
+    {}
+    break;
+
+  case 558:
+
+/* Line 1806 of yacc.c  */
+#line 2159 "parser.yy"
+    {}
     break;
 
@@ -8030,13 +7992,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2169 "parser.yy"
-    {}
-    break;
-
-  case 560:
-
-/* Line 1806 of yacc.c  */
-#line 2170 "parser.yy"
-    {}
+#line 2194 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -8044,6 +7999,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2171 "parser.yy"
-    {}
+#line 2197 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -8051,6 +8006,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2172 "parser.yy"
-    {}
+#line 2199 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -8058,26 +8013,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2207 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 565:
-
-/* Line 1806 of yacc.c  */
-#line 2210 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 566:
-
-/* Line 1806 of yacc.c  */
-#line 2212 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 567:
-
-/* Line 1806 of yacc.c  */
-#line 2217 "parser.yy"
+#line 2204 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8086,428 +8020,428 @@
     break;
 
+  case 564:
+
+/* Line 1806 of yacc.c  */
+#line 2209 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 565:
+
+/* Line 1806 of yacc.c  */
+#line 2214 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2216 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 567:
+
+/* Line 1806 of yacc.c  */
+#line 2218 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
   case 568:
 
 /* Line 1806 of yacc.c  */
-#line 2222 "parser.yy"
+#line 2223 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 569:
+
+/* Line 1806 of yacc.c  */
+#line 2225 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 570:
+
+/* Line 1806 of yacc.c  */
+#line 2227 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 571:
+
+/* Line 1806 of yacc.c  */
+#line 2229 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 569:
-
-/* Line 1806 of yacc.c  */
-#line 2227 "parser.yy"
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2234 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2236 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2245 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 576:
+
+/* Line 1806 of yacc.c  */
+#line 2248 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2253 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 578:
+
+/* Line 1806 of yacc.c  */
+#line 2255 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2257 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2262 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 570:
-
-/* Line 1806 of yacc.c  */
-#line 2229 "parser.yy"
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2264 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2231 "parser.yy"
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2266 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2236 "parser.yy"
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2271 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2273 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2275 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2290 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2292 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
+    break;
+
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2294 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2299 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2301 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2303 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 595:
+
+/* Line 1806 of yacc.c  */
+#line 2308 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2310 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2312 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2327 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2330 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 601:
+
+/* Line 1806 of yacc.c  */
+#line 2332 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2338 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2343 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2345 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2347 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2352 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2238 "parser.yy"
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2354 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2240 "parser.yy"
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2356 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 575:
-
-/* Line 1806 of yacc.c  */
-#line 2242 "parser.yy"
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2358 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2247 "parser.yy"
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2363 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2365 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2249 "parser.yy"
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2367 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 578:
-
-/* Line 1806 of yacc.c  */
-#line 2258 "parser.yy"
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2377 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2261 "parser.yy"
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2380 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2266 "parser.yy"
+  case 617:
+
+/* Line 1806 of yacc.c  */
+#line 2382 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2387 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2389 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2391 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2396 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2398 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2400 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2402 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2407 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2268 "parser.yy"
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2409 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2270 "parser.yy"
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2411 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2275 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2277 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 586:
-
-/* Line 1806 of yacc.c  */
-#line 2279 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 587:
-
-/* Line 1806 of yacc.c  */
-#line 2284 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 588:
-
-/* Line 1806 of yacc.c  */
-#line 2286 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2288 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 593:
-
-/* Line 1806 of yacc.c  */
-#line 2303 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 594:
-
-/* Line 1806 of yacc.c  */
-#line 2305 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
-    break;
-
-  case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2307 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2312 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2314 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2316 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2321 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2323 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2325 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 602:
-
-/* Line 1806 of yacc.c  */
-#line 2340 "parser.yy"
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2442 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2343 "parser.yy"
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2445 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2345 "parser.yy"
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2447 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2351 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2356 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2358 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2360 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2365 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2367 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2369 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2371 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 615:
-
-/* Line 1806 of yacc.c  */
-#line 2376 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2378 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 617:
-
-/* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2390 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2393 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2395 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2400 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2402 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2404 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2409 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2411 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2413 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2415 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 629:
-
-/* Line 1806 of yacc.c  */
-#line 2420 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2422 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 631:
-
-/* Line 1806 of yacc.c  */
-#line 2424 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
   case 632:
 
 /* Line 1806 of yacc.c  */
-#line 2455 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 634:
-
-/* Line 1806 of yacc.c  */
-#line 2458 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 635:
-
-/* Line 1806 of yacc.c  */
-#line 2460 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 636:
-
-/* Line 1806 of yacc.c  */
-#line 2465 "parser.yy"
+#line 2452 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8516,8 +8450,8 @@
     break;
 
-  case 637:
-
-/* Line 1806 of yacc.c  */
-#line 2470 "parser.yy"
+  case 633:
+
+/* Line 1806 of yacc.c  */
+#line 2457 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8526,625 +8460,653 @@
     break;
 
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2465 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2467 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 636:
+
+/* Line 1806 of yacc.c  */
+#line 2469 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 637:
+
+/* Line 1806 of yacc.c  */
+#line 2474 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 638:
 
 /* Line 1806 of yacc.c  */
-#line 2478 "parser.yy"
+#line 2476 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 639:
+
+/* Line 1806 of yacc.c  */
+#line 2481 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 640:
+
+/* Line 1806 of yacc.c  */
+#line 2483 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 642:
+
+/* Line 1806 of yacc.c  */
+#line 2498 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 643:
+
+/* Line 1806 of yacc.c  */
+#line 2500 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2505 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2507 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2509 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 639:
-
-/* Line 1806 of yacc.c  */
-#line 2480 "parser.yy"
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2511 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 640:
-
-/* Line 1806 of yacc.c  */
-#line 2482 "parser.yy"
+  case 648:
+
+/* Line 1806 of yacc.c  */
+#line 2513 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 641:
-
-/* Line 1806 of yacc.c  */
-#line 2487 "parser.yy"
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2519 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2521 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2523 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2528 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2530 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2532 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2538 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2540 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2546 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
+    break;
+
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2548 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
+    break;
+
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2550 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
+    break;
+
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2552 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
+    break;
+
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2567 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2569 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2574 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2576 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2578 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2580 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2582 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2588 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2590 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2592 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2597 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2599 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2601 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2608 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 642:
-
-/* Line 1806 of yacc.c  */
-#line 2489 "parser.yy"
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2619 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 682:
+
+/* Line 1806 of yacc.c  */
+#line 2622 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2624 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
+    break;
+
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2627 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2629 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
+    break;
+
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2631 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
+    break;
+
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2645 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 689:
+
+/* Line 1806 of yacc.c  */
+#line 2647 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2652 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2654 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2656 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2658 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2660 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2666 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 643:
-
-/* Line 1806 of yacc.c  */
-#line 2494 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 644:
-
-/* Line 1806 of yacc.c  */
-#line 2496 "parser.yy"
+  case 697:
+
+/* Line 1806 of yacc.c  */
+#line 2668 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2670 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2675 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2511 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2513 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2518 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 649:
-
-/* Line 1806 of yacc.c  */
-#line 2520 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2522 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2524 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2526 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2677 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2532 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2534 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2536 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 658:
-
-/* Line 1806 of yacc.c  */
-#line 2543 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2545 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2551 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2553 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 663:
-
-/* Line 1806 of yacc.c  */
-#line 2559 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
-    break;
-
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2561 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
-    break;
-
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2563 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
-    break;
-
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2565 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
-    break;
-
-  case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2580 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2582 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2587 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 671:
-
-/* Line 1806 of yacc.c  */
-#line 2589 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2591 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2593 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2595 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2601 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2603 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 678:
-
-/* Line 1806 of yacc.c  */
-#line 2605 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2610 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 680:
-
-/* Line 1806 of yacc.c  */
-#line 2612 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2614 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2621 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 685:
-
-/* Line 1806 of yacc.c  */
-#line 2632 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2635 "parser.yy"
+  case 703:
+
+/* Line 1806 of yacc.c  */
+#line 2687 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 706:
+
+/* Line 1806 of yacc.c  */
+#line 2697 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2699 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2701 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 709:
+
+/* Line 1806 of yacc.c  */
+#line 2703 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2705 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2707 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2714 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2716 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2718 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2720 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2722 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2724 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2726 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2728 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2730 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2732 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2737 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 687:
-
-/* Line 1806 of yacc.c  */
-#line 2637 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
-    break;
-
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2640 "parser.yy"
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2739 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2642 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
-    break;
-
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2644 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
-    break;
-
-  case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2658 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2660 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2665 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 695:
-
-/* Line 1806 of yacc.c  */
-#line 2667 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2669 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2671 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2673 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2679 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 701:
-
-/* Line 1806 of yacc.c  */
-#line 2681 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 702:
-
-/* Line 1806 of yacc.c  */
-#line 2683 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 703:
-
-/* Line 1806 of yacc.c  */
-#line 2688 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 704:
-
-/* Line 1806 of yacc.c  */
-#line 2690 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 707:
-
-/* Line 1806 of yacc.c  */
-#line 2700 "parser.yy"
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2744 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
+    break;
+
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2746 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
+    break;
+
+  case 727:
+
+/* Line 1806 of yacc.c  */
+#line 2773 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 710:
-
-/* Line 1806 of yacc.c  */
-#line 2710 "parser.yy"
+  case 731:
+
+/* Line 1806 of yacc.c  */
+#line 2784 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2712 "parser.yy"
+  case 732:
+
+/* Line 1806 of yacc.c  */
+#line 2786 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 712:
-
-/* Line 1806 of yacc.c  */
-#line 2714 "parser.yy"
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2788 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 713:
-
-/* Line 1806 of yacc.c  */
-#line 2716 "parser.yy"
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2790 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 714:
-
-/* Line 1806 of yacc.c  */
-#line 2718 "parser.yy"
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2792 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2720 "parser.yy"
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2794 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2727 "parser.yy"
+  case 737:
+
+/* Line 1806 of yacc.c  */
+#line 2801 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2729 "parser.yy"
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2803 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2805 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2731 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2807 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2809 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2733 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2735 "parser.yy"
+  case 742:
+
+/* Line 1806 of yacc.c  */
+#line 2811 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2737 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2739 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2741 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2743 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2745 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 726:
-
-/* Line 1806 of yacc.c  */
-#line 2750 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2752 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 728:
-
-/* Line 1806 of yacc.c  */
-#line 2757 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
-    break;
-
-  case 729:
-
-/* Line 1806 of yacc.c  */
-#line 2759 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
-    break;
-
-  case 731:
-
-/* Line 1806 of yacc.c  */
-#line 2786 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 735:
-
-/* Line 1806 of yacc.c  */
-#line 2797 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2799 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 737:
-
-/* Line 1806 of yacc.c  */
-#line 2801 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 738:
-
-/* Line 1806 of yacc.c  */
-#line 2803 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 739:
-
-/* Line 1806 of yacc.c  */
-#line 2805 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2807 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2814 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 742:
+  case 743:
 
 /* Line 1806 of yacc.c  */
 #line 2816 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 743:
-
-/* Line 1806 of yacc.c  */
-#line 2818 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
@@ -9152,6 +9114,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2820 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+#line 2821 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
 
@@ -9159,6 +9121,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2822 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+#line 2823 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
@@ -9166,20 +9128,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2824 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 747:
-
-/* Line 1806 of yacc.c  */
-#line 2829 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 748:
-
-/* Line 1806 of yacc.c  */
-#line 2834 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
+#line 2825 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
@@ -9187,6 +9135,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2836 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
+#line 2849 "parser.yy"
+    { (yyval.en) = 0; }
     break;
 
@@ -9194,19 +9142,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2838 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
-    break;
-
-  case 753:
-
-/* Line 1806 of yacc.c  */
-#line 2862 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 754:
-
-/* Line 1806 of yacc.c  */
-#line 2864 "parser.yy"
+#line 2851 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9215,5 +9149,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9218 "Parser/parser.cc"
+#line 9152 "Parser/parser.cc"
       default: break;
     }
@@ -9446,5 +9380,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2867 "parser.yy"
+#line 2854 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
+++ src/Parser/parser.h	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
@@ -271,5 +271,5 @@
 	DeclarationNode::TypeClass tclass;
 	StatementNode *sn;
-	ConstantNode *constant;
+	ConstantExpr *constant;
 	LabelNode *label;
 	InitializerNode *in;
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
+++ src/Parser/parser.yy	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug  7 09:37:48 2016
-// Update Count     : 1764
+// Last Modified On : Tue Aug  9 12:59:11 2016
+// Update Count     : 1821
 //
 
@@ -121,5 +121,5 @@
 	DeclarationNode::TypeClass tclass;
 	StatementNode *sn;
-	ConstantNode *constant;
+	ConstantExpr *constant;
 	LabelNode *label;
 	InitializerNode *in;
@@ -133,5 +133,5 @@
 
 // expressions
-%type<constant> constant
+%type<en> constant
 %type<en> tuple							tuple_expression_list
 %type<op> ptrref_operator				unary_operator				assignment_operator
@@ -146,5 +146,5 @@
 %type<en> asm_operands_opt asm_operands_list asm_operand
 %type<label> label_list
-%type<constant> asm_clobbers_list_opt
+%type<en> asm_clobbers_list_opt
 %type<flag> asm_volatile_opt
 
@@ -309,7 +309,7 @@
 constant:
 		// ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant".
-INTEGERconstant									{ $$ = build_constantInteger( *$1 ); }
-	| FLOATINGconstant							{ $$ = build_constantFloat( *$1 ); }
-	| CHARACTERconstant							{ $$ = build_constantChar( *$1 ); }
+INTEGERconstant									{ $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
+	| FLOATINGconstant							{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
+	| CHARACTERconstant							{ $$ = new ExpressionNode( build_constantChar( *$1 ) ); }
 	;
 
@@ -339,5 +339,5 @@
 	| string_literal_list STRINGliteral
 		{
-			appendStr( $1->get_expr()->get_constant()->get_value(), $2 );
+			appendStr( $1->get_constant()->get_value(), $2 );
 			delete $2;									// allocated by lexer
 			$$ = $1;
@@ -349,11 +349,11 @@
 primary_expression:
 	IDENTIFIER											// typedef name cannot be used as a variable name
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 	| zero_one
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 	| '(' comma_expression ')'
 		{ $$ = $2; }
 	| '(' compound_statement ')'						// GCC, lambda expression
-		{ $$ = new ValofExprNode( $2 ); }
+	{ $$ = new ExpressionNode( build_valexpr( $2 ) ); }
 	;
 
@@ -365,26 +365,26 @@
 		// little advantage to this feature and many disadvantages. It is possible to write x[(i,j)] in CFA, which is
 		// equivalent to the old x[i,j].
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Index, $1, $4 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, $4 ) ); }
 	| postfix_expression '(' argument_expression_list ')'
-		{ $$ = new CompositeExprNode( build_func( $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_func( $1, $3 ) ); }
         // ambiguity with .0 so space required after field-selection, e.g.
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| postfix_expression '.' no_attr_identifier
-		{ $$ = new CompositeExprNode( build_fieldSel( $1, new VarRefNode( $3 ) ) ); }
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_varref( $3 ) ) ); }
 	| postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ARROW no_attr_identifier
-		{ $$ = new CompositeExprNode( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); }
+		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); }
 	| postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ICR
-	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); }
 	| postfix_expression DECR
-	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::DecrPost, $1 ) ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, $1 ) ); }
 	| '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
-		{ $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }
+		{ $$ = new ExpressionNode( build_compoundLiteral( $2, new InitializerNode( $5, true ) ) ); }
 	| postfix_expression '{' argument_expression_list '}' // CFA
 		{
 			Token fn;
 			fn.str = new std::string( "?{}" ); // location undefined
-			$$ = new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) ) );
+			$$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_link( $3 ) ) );
 		}
 	;
@@ -400,13 +400,4 @@
 		{ $$ = 0; }										// use default argument
 	| assignment_expression
-	| no_attr_identifier ':' assignment_expression
-		{ $$ = $3->set_argName( $1 ); }
-		// Only a list of no_attr_identifier_or_type_name is allowed in this context. However, there is insufficient
-		// look ahead to distinguish between this list of parameter names and a tuple, so the tuple form must be used
-		// with an appropriate semantic check.
-	| '[' push assignment_expression pop ']' ':' assignment_expression
-		{ $$ = $7->set_argName( $3 ); }
-	| '[' push assignment_expression ',' tuple_expression_list pop ']' ':' assignment_expression
-		{ $$ = $9->set_argName( new CompositeExprNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ) ); }
 	;
 
@@ -418,15 +409,15 @@
 field:													// CFA, tuple field selector
 	no_attr_identifier
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
         // ambiguity with .0 so space required after field-selection, e.g.
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| no_attr_identifier '.' field
-		{ $$ = new CompositeExprNode( build_fieldSel( $3, new VarRefNode( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_fieldSel( $3, build_varref( $1 ) ) ); }
 	| no_attr_identifier '.' '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode( build_fieldSel( $5, new VarRefNode( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_fieldSel( $5, build_varref( $1 ) ) ); }
 	| no_attr_identifier ARROW field
-		{ $$ = new CompositeExprNode( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_pfieldSel( $3, build_varref( $1 ) ) ); }
 	| no_attr_identifier ARROW '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_pfieldSel( $5, build_varref( $1 ) ) ); }
 	;
 
@@ -438,5 +429,5 @@
 		{ $$ = $1; }
 	| string_literal_list
-		{ $$ = $1; }
+		{ $$ = new ExpressionNode( $1 ); }
 	| EXTENSION cast_expression							// GCC
 		{ $$ = $2->set_extension( true ); }
@@ -448,8 +439,8 @@
 			switch ( $1 ) {
 			  case OperKinds::AddressOf:
-				$$ = new CompositeExprNode( build_addressOf( $2 ) );
+				$$ = new ExpressionNode( build_addressOf( $2 ) );
 				break;
 			  case OperKinds::PointTo:
-				$$ = new CompositeExprNode( build_unary_val( $1, $2 ) );
+				$$ = new ExpressionNode( build_unary_val( $1, $2 ) );
 				break;
 			  default:
@@ -458,27 +449,27 @@
 		}
 	| unary_operator cast_expression
-	  		{ $$ = new CompositeExprNode( build_unary_val( $1, $2 ) ); }
+	  	{ $$ = new ExpressionNode( build_unary_val( $1, $2 ) ); }
 	| ICR unary_expression
-	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::Incr, $2 ) ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::Incr, $2 ) ); }
 	| DECR unary_expression
-	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::Decr, $2 ) ); }
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::Decr, $2 ) ); }
 	| SIZEOF unary_expression
-		{ $$ = new CompositeExprNode( build_sizeOf( $2 ) ); }
+		{ $$ = new ExpressionNode( build_sizeOfexpr( $2 ) ); }
 	| SIZEOF '(' type_name_no_function ')'
-		{ $$ = new CompositeExprNode( build_sizeOf( new TypeValueNode( $3 ) ) ); }
+		{ $$ = new ExpressionNode( build_sizeOftype( $3 ) ); }
+	| ALIGNOF unary_expression							// GCC, variable alignment
+		{ $$ = new ExpressionNode( build_alignOfexpr( $2 ) ); }
+	| ALIGNOF '(' type_name_no_function ')'				// GCC, type alignment
+		{ $$ = new ExpressionNode( build_alignOftype( $3 ) ); }
 	| OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
-		{ $$ = new CompositeExprNode( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); }
+		{ $$ = new ExpressionNode( build_offsetOf( $3, build_varref( $5 ) ) ); }
 	| ATTR_IDENTIFIER
-		{ $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), nullptr ) ); }
+	| ATTR_IDENTIFIER '(' argument_expression ')'
+		{ $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), $3 ) ); }
 	| ATTR_IDENTIFIER '(' type_name ')'
-		{ $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ), new TypeValueNode( $3 ) ) ); }
-	| ATTR_IDENTIFIER '(' argument_expression ')'
-		{ $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ), $3 ) ); }
-	| ALIGNOF unary_expression							// GCC, variable alignment
-		{ $$ = new CompositeExprNode( build_alignOf( $2 ) ); }
-	| ALIGNOF '(' type_name_no_function ')'				// GCC, type alignment
-		{ $$ = new CompositeExprNode( build_alignOf( new TypeValueNode( $3 ) ) ); }
+		{ $$ = new ExpressionNode( build_attrtype( build_varref( $1 ), $3 ) ); }
 //	| ANDAND IDENTIFIER									// GCC, address of label
-//		{ $$ = new CompositeExprNode( new OperatorNode( OperKinds::LabelAddress ), new VarRefNode( $2, true ) ); }
+//		{ $$ = new ExpressionNode( new OperatorNode( OperKinds::LabelAddress ), new ExpressionNode( build_varref( $2, true ) ); }
 	;
 
@@ -500,7 +491,7 @@
 	unary_expression
 	| '(' type_name_no_function ')' cast_expression
-		{ $$ = new CompositeExprNode( build_cast( new TypeValueNode( $2 ), $4 ) ); }
+		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
 	| '(' type_name_no_function ')' tuple
-		{ $$ = new CompositeExprNode( build_cast( new TypeValueNode( $2 ), $4 ) ); }
+		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
 	;
 
@@ -508,9 +499,9 @@
 	cast_expression
 	| multiplicative_expression '*' cast_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); }
 	| multiplicative_expression '/' cast_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Div, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Div, $1, $3 ) ); }
 	| multiplicative_expression '%' cast_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); }
 	;
 
@@ -518,7 +509,7 @@
 	multiplicative_expression
 	| additive_expression '+' multiplicative_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Plus, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Plus, $1, $3 ) ); }
 	| additive_expression '-' multiplicative_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Minus, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Minus, $1, $3 ) ); }
 	;
 
@@ -526,7 +517,7 @@
 	additive_expression
 	| shift_expression LS additive_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::LShift, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LShift, $1, $3 ) ); }
 	| shift_expression RS additive_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::RShift, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::RShift, $1, $3 ) ); }
 	;
 
@@ -534,11 +525,11 @@
 	shift_expression
 	| relational_expression '<' shift_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::LThan, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LThan, $1, $3 ) ); }
 	| relational_expression '>' shift_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::GThan, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::GThan, $1, $3 ) ); }
 	| relational_expression LE shift_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::LEThan, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LEThan, $1, $3 ) ); }
 	| relational_expression GE shift_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::GEThan, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::GEThan, $1, $3 ) ); }
 	;
 
@@ -546,7 +537,7 @@
 	relational_expression
 	| equality_expression EQ relational_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Eq, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Eq, $1, $3 ) ); }
 	| equality_expression NE relational_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Neq, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Neq, $1, $3 ) ); }
 	;
 
@@ -554,5 +545,5 @@
 	equality_expression
 	| AND_expression '&' equality_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::BitAnd, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::BitAnd, $1, $3 ) ); }
 	;
 
@@ -560,5 +551,5 @@
 	AND_expression
 	| exclusive_OR_expression '^' AND_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Xor, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Xor, $1, $3 ) ); }
 	;
 
@@ -566,5 +557,5 @@
 	exclusive_OR_expression
 	| inclusive_OR_expression '|' exclusive_OR_expression
-		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::BitOr, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::BitOr, $1, $3 ) ); }
 	;
 
@@ -572,5 +563,5 @@
 	inclusive_OR_expression
 	| logical_AND_expression ANDAND inclusive_OR_expression
-		{ $$ = new CompositeExprNode( build_and_or( $1, $3, true ) ); }
+		{ $$ = new ExpressionNode( build_and_or( $1, $3, true ) ); }
 	;
 
@@ -578,5 +569,5 @@
 	logical_AND_expression
 	| logical_OR_expression OROR logical_AND_expression
-		{ $$ = new CompositeExprNode( build_and_or( $1, $3, false ) ); }
+		{ $$ = new ExpressionNode( build_and_or( $1, $3, false ) ); }
 	;
 
@@ -584,10 +575,10 @@
 	logical_OR_expression
 	| logical_OR_expression '?' comma_expression ':' conditional_expression
-		{ $$ = new CompositeExprNode( build_cond( $1, $3, $5 ) ); }
+		{ $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
 		// FIX ME: this hack computes $1 twice
 	| logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand
-		{ $$ = new CompositeExprNode( build_cond( $1, $1, $4 ) ); }
+		{ $$ = new ExpressionNode( build_cond( $1, $1, $4 ) ); }
 	| logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression
-		{ $$ = new CompositeExprNode( build_cond( $1, $3, $5 ) ); }
+		{ $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
 	;
 
@@ -600,12 +591,12 @@
 	conditional_expression
 	| unary_expression assignment_operator assignment_expression
-		{ $$ = new CompositeExprNode( build_binary_ptr( $2, $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); }
 	| tuple assignment_opt								// CFA, tuple expression
-		{ $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); }
+		{ $$ = ( $2 == 0 ) ? $1 : new ExpressionNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); }
 	;
 
 assignment_expression_opt:
 	// empty
-		{ $$ = new NullExprNode; }
+		{ $$ = nullptr; }
 	| assignment_expression
 	;
@@ -629,11 +620,11 @@
 		// comma_expression in new_identifier_parameter_array and new_abstract_array
 	'[' ']'
-		{ $$ = new CompositeExprNode( build_tuple() ); }
+		{ $$ = new ExpressionNode( build_tuple() ); }
 	| '[' push assignment_expression pop ']'
-		{ $$ = new CompositeExprNode( build_tuple( $3 ) ); }
+		{ $$ = new ExpressionNode( build_tuple( $3 ) ); }
 	| '[' push ',' tuple_expression_list pop ']'
-		{ $$ = new CompositeExprNode( build_tuple( (ExpressionNode *)(new NullExprNode)->set_link( $4 ) ) ); }
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_link( $4 ) ) ); }
 	| '[' push assignment_expression ',' tuple_expression_list pop ']'
-		{ $$ = new CompositeExprNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ); }
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ); }
 	;
 
@@ -647,5 +638,5 @@
 	assignment_expression
 	| comma_expression ',' assignment_expression
-		{ $$ = new CompositeExprNode( build_comma( $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_comma( $1, $3 ) ); }
 	;
 
@@ -671,5 +662,5 @@
 			Token fn;
 			fn.str = new std::string( "^?{}" ); // location undefined
-			$$ = new StatementNode( StatementNode::Exp, new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ), 0 );
+			$$ = new StatementNode( StatementNode::Exp, new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ), 0 );
 		}
 	;
@@ -759,5 +750,5 @@
 	constant_expression							{ $$ = $1; }
 	| constant_expression ELLIPSIS constant_expression	// GCC, subrange
-		{ $$ = new CompositeExprNode( build_range( $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_range( $1, $3 ) ); }
 	| subrange											// CFA, subrange
 	;
@@ -841,5 +832,5 @@
 	| declaration comma_expression_opt ';' comma_expression_opt // C99
 		{ $$ = new ForCtlExprNode( $1, $2, $4 ); }
-	;
+ 	;
 
 jump_statement:
@@ -979,7 +970,7 @@
 asm_operand:											// GCC
 	string_literal_list '(' constant_expression ')'
-		{ $$ = new AsmExprNode( 0, $1, $3 ); }
+		{ $$ = new ExpressionNode( build_asm( 0, $1, $3 ) ); }
 	| '[' constant_expression ']' string_literal_list '(' constant_expression ')'
-		{ $$ = new AsmExprNode( $2, $4, $6 ); }
+	{ $$ = new ExpressionNode( build_asm( $2, $4, $6 ) ); }
 	;
 
@@ -988,7 +979,7 @@
 		{ $$ = 0; }										// use default argument
 	| string_literal_list
-		{ $$ = $1; }
+		{ $$ = new ExpressionNode( $1 ); }
 	| asm_clobbers_list_opt ',' string_literal_list
-		{ $$ = (ConstantNode *)$1->set_link( $3 ); }
+	{ $$ = (ExpressionNode *)$1->set_link( new ExpressionNode( $3 ) ); }
 	;
 
@@ -1777,5 +1768,5 @@
 	designator_list ':'									// C99, CFA uses ":" instead of "="
 	| no_attr_identifier_or_type_name ':'				// GCC, field name
-		{ $$ = new VarRefNode( $1 ); }
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 	;
 
@@ -1783,24 +1774,20 @@
 	designator
 	| designator_list designator
-		{ $$ = (ExpressionNode *)( $1->set_link( $2 )); }
-	//| designator_list designator						{ $$ = new CompositeExprNode( $1, $2 ); }
+		{ $$ = (ExpressionNode *)( $1->set_link( $2 ) ); }
+	//| designator_list designator						{ $$ = new ExpressionNode( $1, $2 ); }
 	;
 
 designator:
-		// lexer ambiguity: designator ".0" is floating-point constant or designator for name 0 only ".0" and ".1"
-		// allowed => semantic check
-	FLOATINGconstant
-		{ $$ = new DesignatorNode( new VarRefNode( $1 ) ); }
-	| '.' no_attr_identifier_or_type_name				// C99, field name
-		{ $$ = new DesignatorNode( new VarRefNode( $2 ) ); }
+	'.' no_attr_identifier_or_type_name					// C99, field name
+		{ $$ = new ExpressionNode( build_varref( $2 ) ); }
 	| '[' push assignment_expression pop ']'			// C99, single array element
 		// assignment_expression used instead of constant_expression because of shift/reduce conflicts with tuple.
-		{ $$ = new DesignatorNode( $3, true ); }
+		{ $$ = $3; }
 	| '[' push subrange pop ']'							// CFA, multiple array elements
-		{ $$ = new DesignatorNode( $3, true ); }
+		{ $$ = $3; }
 	| '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements
-		{ $$ = new DesignatorNode( new CompositeExprNode( build_range( $3, $5 ) ), true ); }
+		{ $$ = new ExpressionNode( build_range( $3, $5 ) ); }
 	| '.' '[' push field_list pop ']'					// CFA, tuple field selector
-		{ $$ = new DesignatorNode( $4 ); }
+		{ $$ = $4; }
 	;
 
@@ -1890,8 +1877,8 @@
 type_name_list:											// CFA
 	type_name
-		{ $$ = new TypeValueNode( $1 ); }
+		{ $$ = new ExpressionNode( build_typevalue( $1 ) ); }
 	| assignment_expression
 	| type_name_list ',' type_name
-		{ $$ = (ExpressionNode *)( $1->set_link( new TypeValueNode( $3 ))); }
+		{ $$ = (ExpressionNode *)( $1->set_link( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
 	| type_name_list ',' assignment_expression
 		{ $$ = (ExpressionNode *)( $1->set_link( $3 )); }
@@ -2129,5 +2116,5 @@
 subrange:
 	constant_expression '~' constant_expression			// CFA, integer subrange
-		{ $$ = new CompositeExprNode( build_range( $1, $3 ) ); }
+		{ $$ = new ExpressionNode( build_range( $1, $3 ) ); }
 	;
 
Index: src/SynTree/Label.h
===================================================================
--- src/SynTree/Label.h	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
+++ src/SynTree/Label.h	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
@@ -9,7 +9,7 @@
 // Author           : Rob Schluntz
 // Created On       : Wed Jun 8 12:53:12 2016
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Jun 8 12:53:28 2016
-// Update Count     : 1
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Aug  7 14:44:29 2016
+// Update Count     : 2
 //
 
