Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/CodeGen/CodeGenerator.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -287,11 +287,14 @@
 	void CodeGenerator::postvisit( TypeDecl * typeDecl ) {
 		assertf( ! genC, "TypeDecls should not reach code generation." );
-		output << typeDecl->genTypeString() << " " << typeDecl->get_name();
-		if ( typeDecl->get_kind() != TypeDecl::Any && typeDecl->get_sized() ) {
-			output << " | sized(" << typeDecl->get_name() << ")";
-		}
-		if ( ! typeDecl->get_assertions().empty() ) {
+		output << typeDecl->genTypeString() << " " << typeDecl->name;
+		if ( typeDecl->sized ) {
+			output << " | sized(" << typeDecl->name << ")";
+		}
+		if ( ! typeDecl->assertions.empty() ) {
 			output << " | { ";
-			genCommaList( typeDecl->get_assertions().begin(), typeDecl->get_assertions().end() );
+			for ( DeclarationWithType * assert :  typeDecl->assertions ) {
+				assert->accept( *visitor );
+				output << "; ";
+			}
 			output << " }";
 		}
@@ -443,11 +446,11 @@
 	void CodeGenerator::postvisit( UntypedExpr * untypedExpr ) {
 		extension( untypedExpr );
-		if ( NameExpr * nameExpr = dynamic_cast< NameExpr* >( untypedExpr->get_function() ) ) {
+		if ( NameExpr * nameExpr = dynamic_cast< NameExpr* >( untypedExpr->function ) ) {
 			OperatorInfo opInfo;
-			if ( operatorLookup( nameExpr->get_name(), opInfo ) ) {
-				std::list< Expression* >::iterator arg = untypedExpr->get_args().begin();
+			if ( operatorLookup( nameExpr->name, opInfo ) ) {
+				std::list< Expression* >::iterator arg = untypedExpr->args.begin();
 				switch ( opInfo.type ) {
 				  case OT_INDEX:
-					assert( untypedExpr->get_args().size() == 2 );
+					assert( untypedExpr->args.size() == 2 );
 					(*arg++)->accept( *visitor );
 					output << "[";
@@ -461,5 +464,5 @@
 				  case OT_CTOR:
 				  case OT_DTOR:
-					if ( untypedExpr->get_args().size() == 1 ) {
+					if ( untypedExpr->args.size() == 1 ) {
 						// the expression fed into a single parameter constructor or destructor may contain side
 						// effects, so must still output this expression
@@ -480,5 +483,5 @@
 						(*arg++)->accept( *visitor );
 						output << opInfo.symbol << "{ ";
-						genCommaList( arg, untypedExpr->get_args().end() );
+						genCommaList( arg, untypedExpr->args.end() );
 						output << "}) /* " << opInfo.inputName << " */";
 					} // if
@@ -488,5 +491,5 @@
 				  case OT_PREFIXASSIGN:
 				  case OT_LABELADDRESS:
-					assert( untypedExpr->get_args().size() == 1 );
+					assert( untypedExpr->args.size() == 1 );
 					output << "(";
 					output << opInfo.symbol;
@@ -497,5 +500,5 @@
 				  case OT_POSTFIX:
 				  case OT_POSTFIXASSIGN:
-					assert( untypedExpr->get_args().size() == 1 );
+					assert( untypedExpr->args.size() == 1 );
 					(*arg)->accept( *visitor );
 					output << opInfo.symbol;
@@ -504,5 +507,5 @@
 				  case OT_INFIX:
 				  case OT_INFIXASSIGN:
-					assert( untypedExpr->get_args().size() == 2 );
+					assert( untypedExpr->args.size() == 2 );
 					output << "(";
 					(*arg++)->accept( *visitor );
@@ -517,20 +520,14 @@
 				} // switch
 			} else {
-				if ( nameExpr->get_name() == "..." ) { // case V1 ... V2 or case V1~V2
-					assert( untypedExpr->get_args().size() == 2 );
-					(*untypedExpr->get_args().begin())->accept( *visitor );
-					output << " ... ";
-					(*--untypedExpr->get_args().end())->accept( *visitor );
-				} else {								// builtin routines
-					nameExpr->accept( *visitor );
-					output << "(";
-					genCommaList( untypedExpr->get_args().begin(), untypedExpr->get_args().end() );
-					output << ")";
-				} // if
+				// builtin routines
+				nameExpr->accept( *visitor );
+				output << "(";
+				genCommaList( untypedExpr->args.begin(), untypedExpr->args.end() );
+				output << ")";
 			} // if
 		} else {
-			untypedExpr->get_function()->accept( *visitor );
+			untypedExpr->function->accept( *visitor );
 			output << "(";
-			genCommaList( untypedExpr->get_args().begin(), untypedExpr->get_args().end() );
+			genCommaList( untypedExpr->args.begin(), untypedExpr->args.end() );
 			output << ")";
 		} // if
@@ -538,7 +535,7 @@
 
 	void CodeGenerator::postvisit( RangeExpr * rangeExpr ) {
-		rangeExpr->get_low()->accept( *visitor );
+		rangeExpr->low->accept( *visitor );
 		output << " ... ";
-		rangeExpr->get_high()->accept( *visitor );
+		rangeExpr->high->accept( *visitor );
 	}
 
@@ -546,7 +543,10 @@
 		extension( nameExpr );
 		OperatorInfo opInfo;
-		if ( operatorLookup( nameExpr->get_name(), opInfo ) ) {
-			assert( opInfo.type == OT_CONSTANT );
-			output << opInfo.symbol;
+		if ( operatorLookup( nameExpr->name, opInfo ) ) {
+			if ( opInfo.type == OT_CONSTANT ) {
+				output << opInfo.symbol;
+			} else {
+				output << opInfo.outputName;
+			}
 		} else {
 			output << nameExpr->get_name();
@@ -885,4 +885,6 @@
 
 	void CodeGenerator::postvisit( CaseStmt * caseStmt ) {
+		updateLocation( caseStmt );
+		output << indent;
 		if ( caseStmt->isDefault()) {
 			output << "default";
@@ -947,4 +949,67 @@
 		output << ";";
 	}
+	void CodeGenerator::postvisit( CatchStmt * stmt ) {
+		assertf( ! genC, "Catch statements should not reach code generation." );
+
+		output << ((stmt->get_kind() == CatchStmt::Terminate) ?
+		"catch" : "catchResume");
+		output << "( ";
+		stmt->decl->accept( *visitor );
+		output << " ) ";
+
+		if( stmt->cond ) {
+			output << "if/when(?) (";
+			stmt->cond->accept( *visitor );
+			output << ") ";
+		}
+		stmt->body->accept( *visitor );
+	}
+
+	void CodeGenerator::postvisit( WaitForStmt * stmt ) {
+		assertf( ! genC, "Waitfor statements should not reach code generation." );
+
+		bool first = true;
+		for( auto & clause : stmt->clauses ) {
+			if(first) { output << "or "; first = false; }
+			if( clause.condition ) {
+				output << "when(";
+				stmt->timeout.condition->accept( *visitor );
+				output << ") ";
+			}
+			output << "waitfor(";
+			clause.target.function->accept( *visitor );
+			for( Expression * expr : clause.target.arguments ) {
+				output << ",";
+				expr->accept( *visitor );
+			}
+			output << ") ";
+			clause.statement->accept( *visitor );
+		}
+
+		if( stmt->timeout.statement ) {
+			output << "or ";
+			if( stmt->timeout.condition ) {
+				output << "when(";
+				stmt->timeout.condition->accept( *visitor );
+				output << ") ";
+			}
+			output << "timeout(";
+			stmt->timeout.time->accept( *visitor );
+			output << ") ";
+			stmt->timeout.statement->accept( *visitor );
+		}
+
+		if( stmt->orelse.statement ) {
+			output << "or ";
+			if( stmt->orelse.condition ) {
+				output << "when(";
+				stmt->orelse.condition->accept( *visitor );
+				output << ")";
+			}
+			output << "else ";
+			stmt->orelse.statement->accept( *visitor );
+		}
+	}
+
 
 	void CodeGenerator::postvisit( WhileStmt * whileStmt ) {
@@ -1025,4 +1090,16 @@
 	}
 } // namespace CodeGen
+
+
+unsigned Indenter::tabsize = 2;
+
+std::ostream & operator<<( std::ostream & out, const BaseSyntaxNode * node ) {
+	if ( node ) {
+		node->print( out );
+	} else {
+		out << "nullptr";
+	}
+	return out;
+}
 
 // Local Variables: //
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/CodeGen/CodeGenerator.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -100,4 +100,6 @@
 		void postvisit( ReturnStmt * );
 		void postvisit( ThrowStmt * );
+		void postvisit( CatchStmt * );
+		void postvisit( WaitForStmt * );
 		void postvisit( WhileStmt * );
 		void postvisit( ForStmt * );
Index: src/CodeGen/FixNames.cc
===================================================================
--- src/CodeGen/FixNames.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/CodeGen/FixNames.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -66,9 +66,9 @@
 		);
 
-		mainDecl->get_functionType()->get_parameters().push_back(
+		main_type->get_parameters().push_back(
 			new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nullptr )
 		);
 
-		mainDecl->get_functionType()->get_parameters().push_back(
+		main_type->get_parameters().push_back(
 			new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0,
 			new PointerType( Type::Qualifiers(), new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::Char ) ) ),
Index: src/CodeGen/GenType.cc
===================================================================
--- src/CodeGen/GenType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/CodeGen/GenType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -210,9 +210,9 @@
 
 	std::string GenType::handleGeneric( ReferenceToType * refType ) {
-		if ( ! refType->get_parameters().empty() ) {
+		if ( ! refType->parameters.empty() ) {
 			std::ostringstream os;
 			PassVisitor<CodeGenerator> cg( os, pretty, genC, lineMarks );
 			os << "(";
-			cg.pass.genCommaList( refType->get_parameters().begin(), refType->get_parameters().end() );
+			cg.pass.genCommaList( refType->parameters.begin(), refType->parameters.end() );
 			os << ") ";
 			return os.str();
Index: src/Common/Indenter.h
===================================================================
--- src/Common/Indenter.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Common/Indenter.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -18,7 +18,9 @@
 
 struct Indenter {
-	Indenter( unsigned int amt = 2 ) : amt( amt ) {}
-	unsigned int amt = 2;  // amount 1 level increases indent by (i.e. how much to increase by in operator++)
-	unsigned int indent = 0;
+	static unsigned tabsize;
+
+	Indenter( unsigned int amt = tabsize, unsigned int indent = 0 ) : amt( amt ), indent( indent ) {}
+	unsigned int amt;  // amount 1 level increases indent by (i.e. how much to increase by in operator++)
+	unsigned int indent;
 
 	Indenter & operator+=(int nlevels) { indent += amt*nlevels; return *this; }
@@ -30,5 +32,5 @@
 };
 
-inline std::ostream & operator<<( std::ostream & out, Indenter & indent ) {
+inline std::ostream & operator<<( std::ostream & out, const Indenter & indent ) {
 	return out << std::string(indent.indent, ' ');
 }
Index: src/Common/PassVisitor.h
===================================================================
--- src/Common/PassVisitor.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Common/PassVisitor.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -4,4 +4,6 @@
 
 #include <stack>
+
+#include "Common/utility.h"
 
 #include "SynTree/Mutator.h"
@@ -10,4 +12,5 @@
 #include "SymTab/Indexer.h"
 
+#include "SynTree/Attribute.h"
 #include "SynTree/Initializer.h"
 #include "SynTree/Statement.h"
@@ -53,185 +56,195 @@
 	pass_type pass;
 
-	virtual void visit( ObjectDecl *objectDecl ) override final;
-	virtual void visit( FunctionDecl *functionDecl ) override final;
-	virtual void visit( StructDecl *aggregateDecl ) override final;
-	virtual void visit( UnionDecl *aggregateDecl ) override final;
-	virtual void visit( EnumDecl *aggregateDecl ) override final;
-	virtual void visit( TraitDecl *aggregateDecl ) override final;
-	virtual void visit( TypeDecl *typeDecl ) override final;
-	virtual void visit( TypedefDecl *typeDecl ) override final;
-	virtual void visit( AsmDecl *asmDecl ) override final;
-
-	virtual void visit( CompoundStmt *compoundStmt ) override final;
-	virtual void visit( ExprStmt *exprStmt ) override final;
-	virtual void visit( AsmStmt *asmStmt ) override final;
-	virtual void visit( IfStmt *ifStmt ) override final;
-	virtual void visit( WhileStmt *whileStmt ) override final;
-	virtual void visit( ForStmt *forStmt ) override final;
-	virtual void visit( SwitchStmt *switchStmt ) override final;
-	virtual void visit( CaseStmt *caseStmt ) override final;
-	virtual void visit( BranchStmt *branchStmt ) override final;
-	virtual void visit( ReturnStmt *returnStmt ) override final;
-	virtual void visit( ThrowStmt *throwStmt ) override final;
-	virtual void visit( TryStmt *tryStmt ) override final;
-	virtual void visit( CatchStmt *catchStmt ) override final;
-	virtual void visit( FinallyStmt *finallyStmt ) override final;
-	virtual void visit( WaitForStmt *waitforStmt ) override final;
-	virtual void visit( NullStmt *nullStmt ) override final;
-	virtual void visit( DeclStmt *declStmt ) override final;
-	virtual void visit( ImplicitCtorDtorStmt *impCtorDtorStmt ) override final;
-
-	virtual void visit( ApplicationExpr *applicationExpr ) override final;
-	virtual void visit( UntypedExpr *untypedExpr ) override final;
-	virtual void visit( NameExpr *nameExpr ) override final;
-	virtual void visit( CastExpr *castExpr ) override final;
-	virtual void visit( VirtualCastExpr *castExpr ) override final;
-	virtual void visit( AddressExpr *addressExpr ) override final;
-	virtual void visit( LabelAddressExpr *labAddressExpr ) override final;
-	virtual void visit( UntypedMemberExpr *memberExpr ) override final;
-	virtual void visit( MemberExpr *memberExpr ) override final;
-	virtual void visit( VariableExpr *variableExpr ) override final;
-	virtual void visit( ConstantExpr *constantExpr ) override final;
-	virtual void visit( SizeofExpr *sizeofExpr ) override final;
-	virtual void visit( AlignofExpr *alignofExpr ) override final;
-	virtual void visit( UntypedOffsetofExpr *offsetofExpr ) override final;
-	virtual void visit( OffsetofExpr *offsetofExpr ) override final;
-	virtual void visit( OffsetPackExpr *offsetPackExpr ) override final;
-	virtual void visit( AttrExpr *attrExpr ) override final;
-	virtual void visit( LogicalExpr *logicalExpr ) override final;
-	virtual void visit( ConditionalExpr *conditionalExpr ) override final;
-	virtual void visit( CommaExpr *commaExpr ) override final;
-	virtual void visit( TypeExpr *typeExpr ) override final;
-	virtual void visit( AsmExpr *asmExpr ) override final;
-	virtual void visit( ImplicitCopyCtorExpr *impCpCtorExpr ) override final;
-	virtual void visit( ConstructorExpr * ctorExpr ) override final;
-	virtual void visit( CompoundLiteralExpr *compLitExpr ) override final;
-	virtual void visit( RangeExpr *rangeExpr ) override final;
-	virtual void visit( UntypedTupleExpr *tupleExpr ) override final;
-	virtual void visit( TupleExpr *tupleExpr ) override final;
-	virtual void visit( TupleIndexExpr *tupleExpr ) override final;
-	virtual void visit( TupleAssignExpr *assignExpr ) override final;
-	virtual void visit( StmtExpr * stmtExpr ) override final;
-	virtual void visit( UniqueExpr * uniqueExpr ) override final;
-
-	virtual void visit( VoidType *basicType ) override final;
-	virtual void visit( BasicType *basicType ) override final;
-	virtual void visit( PointerType *pointerType ) override final;
-	virtual void visit( ArrayType *arrayType ) override final;
-	virtual void visit( ReferenceType *referenceType ) override final;
-	virtual void visit( FunctionType *functionType ) override final;
-	virtual void visit( StructInstType *aggregateUseType ) override final;
-	virtual void visit( UnionInstType *aggregateUseType ) override final;
-	virtual void visit( EnumInstType *aggregateUseType ) override final;
-	virtual void visit( TraitInstType *aggregateUseType ) override final;
-	virtual void visit( TypeInstType *aggregateUseType ) override final;
-	virtual void visit( TupleType *tupleType ) override final;
-	virtual void visit( TypeofType *typeofType ) override final;
-	virtual void visit( AttrType *attrType ) override final;
-	virtual void visit( VarArgsType *varArgsType ) override final;
-	virtual void visit( ZeroType *zeroType ) override final;
-	virtual void visit( OneType *oneType ) override final;
-
-	virtual void visit( Designation *designation ) override final;
-	virtual void visit( SingleInit *singleInit ) override final;
-	virtual void visit( ListInit *listInit ) override final;
-	virtual void visit( ConstructorInit *ctorInit ) override final;
-
-	virtual void visit( Subrange *subrange ) override final;
-
-	virtual void visit( Constant *constant ) override final;
-
-	virtual DeclarationWithType* mutate( ObjectDecl *objectDecl ) override final;
-	virtual DeclarationWithType* mutate( FunctionDecl *functionDecl ) override final;
-	virtual Declaration* mutate( StructDecl *aggregateDecl ) override final;
-	virtual Declaration* mutate( UnionDecl *aggregateDecl ) override final;
-	virtual Declaration* mutate( EnumDecl *aggregateDecl ) override final;
-	virtual Declaration* mutate( TraitDecl *aggregateDecl ) override final;
-	virtual Declaration* mutate( TypeDecl *typeDecl ) override final;
-	virtual Declaration* mutate( TypedefDecl *typeDecl ) override final;
-	virtual AsmDecl* mutate( AsmDecl *asmDecl ) override final;
-
-	virtual CompoundStmt* mutate( CompoundStmt *compoundStmt ) override final;
-	virtual Statement* mutate( ExprStmt *exprStmt ) override final;
-	virtual Statement* mutate( AsmStmt *asmStmt ) override final;
-	virtual Statement* mutate( IfStmt *ifStmt ) override final;
-	virtual Statement* mutate( WhileStmt *whileStmt ) override final;
-	virtual Statement* mutate( ForStmt *forStmt ) override final;
-	virtual Statement* mutate( SwitchStmt *switchStmt ) override final;
-	virtual Statement* mutate( CaseStmt *caseStmt ) override final;
-	virtual Statement* mutate( BranchStmt *branchStmt ) override final;
-	virtual Statement* mutate( ReturnStmt *returnStmt ) override final;
-	virtual Statement* mutate( ThrowStmt *throwStmt ) override final;
-	virtual Statement* mutate( TryStmt *tryStmt ) override final;
-	virtual Statement* mutate( CatchStmt *catchStmt ) override final;
-	virtual Statement* mutate( FinallyStmt *finallyStmt ) override final;
-	virtual Statement* mutate( WaitForStmt *waitforStmt ) override final;
-	virtual NullStmt* mutate( NullStmt *nullStmt ) override final;
-	virtual Statement* mutate( DeclStmt *declStmt ) override final;
-	virtual Statement* mutate( ImplicitCtorDtorStmt *impCtorDtorStmt ) override final;
-
-	virtual Expression* mutate( ApplicationExpr *applicationExpr ) override final;
-	virtual Expression* mutate( UntypedExpr *untypedExpr ) override final;
-	virtual Expression* mutate( NameExpr *nameExpr ) override final;
-	virtual Expression* mutate( AddressExpr *castExpr ) override final;
-	virtual Expression* mutate( LabelAddressExpr *labAddressExpr ) override final;
-	virtual Expression* mutate( CastExpr *castExpr ) override final;
-	virtual Expression* mutate( VirtualCastExpr *castExpr ) override final;
-	virtual Expression* mutate( UntypedMemberExpr *memberExpr ) override final;
-	virtual Expression* mutate( MemberExpr *memberExpr ) override final;
-	virtual Expression* mutate( VariableExpr *variableExpr ) override final;
-	virtual Expression* mutate( ConstantExpr *constantExpr ) override final;
-	virtual Expression* mutate( SizeofExpr *sizeofExpr ) override final;
-	virtual Expression* mutate( AlignofExpr *alignofExpr ) override final;
-	virtual Expression* mutate( UntypedOffsetofExpr *offsetofExpr ) override final;
-	virtual Expression* mutate( OffsetofExpr *offsetofExpr ) override final;
-	virtual Expression* mutate( OffsetPackExpr *offsetPackExpr ) override final;
-	virtual Expression* mutate( AttrExpr *attrExpr ) override final;
-	virtual Expression* mutate( LogicalExpr *logicalExpr ) override final;
-	virtual Expression* mutate( ConditionalExpr *conditionalExpr ) override final;
-	virtual Expression* mutate( CommaExpr *commaExpr ) override final;
-	virtual Expression* mutate( TypeExpr *typeExpr ) override final;
-	virtual Expression* mutate( AsmExpr *asmExpr ) override final;
-	virtual Expression* mutate( ImplicitCopyCtorExpr *impCpCtorExpr ) override final;
-	virtual Expression* mutate( ConstructorExpr *ctorExpr ) override final;
-	virtual Expression* mutate( CompoundLiteralExpr *compLitExpr ) override final;
-	virtual Expression* mutate( RangeExpr *rangeExpr ) override final;
-	virtual Expression* mutate( UntypedTupleExpr *tupleExpr ) override final;
-	virtual Expression* mutate( TupleExpr *tupleExpr ) override final;
-	virtual Expression* mutate( TupleIndexExpr *tupleExpr ) override final;
-	virtual Expression* mutate( TupleAssignExpr *assignExpr ) override final;
-	virtual Expression* mutate( StmtExpr * stmtExpr ) override final;
-	virtual Expression* mutate( UniqueExpr * uniqueExpr ) override final;
-
-	virtual Type* mutate( VoidType *basicType ) override final;
-	virtual Type* mutate( BasicType *basicType ) override final;
-	virtual Type* mutate( PointerType *pointerType ) override final;
-	virtual Type* mutate( ArrayType *arrayType ) override final;
-	virtual Type* mutate( ReferenceType *referenceType ) override final;
-	virtual Type* mutate( FunctionType *functionType ) override final;
-	virtual Type* mutate( StructInstType *aggregateUseType ) override final;
-	virtual Type* mutate( UnionInstType *aggregateUseType ) override final;
-	virtual Type* mutate( EnumInstType *aggregateUseType ) override final;
-	virtual Type* mutate( TraitInstType *aggregateUseType ) override final;
-	virtual Type* mutate( TypeInstType *aggregateUseType ) override final;
-	virtual Type* mutate( TupleType *tupleType ) override final;
-	virtual Type* mutate( TypeofType *typeofType ) override final;
-	virtual Type* mutate( AttrType *attrType ) override final;
-	virtual Type* mutate( VarArgsType *varArgsType ) override final;
-	virtual Type* mutate( ZeroType *zeroType ) override final;
-	virtual Type* mutate( OneType *oneType ) override final;
-
-	virtual Designation* mutate( Designation *designation ) override final;
-	virtual Initializer* mutate( SingleInit *singleInit ) override final;
-	virtual Initializer* mutate( ListInit *listInit ) override final;
-	virtual Initializer* mutate( ConstructorInit *ctorInit ) override final;
-
-	virtual Subrange *mutate( Subrange *subrange ) override final;
-
-	virtual Constant *mutate( Constant *constant ) override final;
+	virtual void visit( ObjectDecl * objectDecl ) override final;
+	virtual void visit( FunctionDecl * functionDecl ) override final;
+	virtual void visit( StructDecl * aggregateDecl ) override final;
+	virtual void visit( UnionDecl * aggregateDecl ) override final;
+	virtual void visit( EnumDecl * aggregateDecl ) override final;
+	virtual void visit( TraitDecl * aggregateDecl ) override final;
+	virtual void visit( TypeDecl * typeDecl ) override final;
+	virtual void visit( TypedefDecl * typeDecl ) override final;
+	virtual void visit( AsmDecl * asmDecl ) override final;
+
+	virtual void visit( CompoundStmt * compoundStmt ) override final;
+	virtual void visit( ExprStmt * exprStmt ) override final;
+	virtual void visit( AsmStmt * asmStmt ) override final;
+	virtual void visit( IfStmt * ifStmt ) override final;
+	virtual void visit( WhileStmt * whileStmt ) override final;
+	virtual void visit( ForStmt * forStmt ) override final;
+	virtual void visit( SwitchStmt * switchStmt ) override final;
+	virtual void visit( CaseStmt * caseStmt ) override final;
+	virtual void visit( BranchStmt * branchStmt ) override final;
+	virtual void visit( ReturnStmt * returnStmt ) override final;
+	virtual void visit( ThrowStmt * throwStmt ) override final;
+	virtual void visit( TryStmt * tryStmt ) override final;
+	virtual void visit( CatchStmt * catchStmt ) override final;
+	virtual void visit( FinallyStmt * finallyStmt ) override final;
+	virtual void visit( WaitForStmt * waitforStmt ) override final;
+	virtual void visit( NullStmt * nullStmt ) override final;
+	virtual void visit( DeclStmt * declStmt ) override final;
+	virtual void visit( ImplicitCtorDtorStmt * impCtorDtorStmt ) override final;
+
+	virtual void visit( ApplicationExpr * applicationExpr ) override final;
+	virtual void visit( UntypedExpr * untypedExpr ) override final;
+	virtual void visit( NameExpr * nameExpr ) override final;
+	virtual void visit( CastExpr * castExpr ) override final;
+	virtual void visit( VirtualCastExpr * castExpr ) override final;
+	virtual void visit( AddressExpr * addressExpr ) override final;
+	virtual void visit( LabelAddressExpr * labAddressExpr ) override final;
+	virtual void visit( UntypedMemberExpr * memberExpr ) override final;
+	virtual void visit( MemberExpr * memberExpr ) override final;
+	virtual void visit( VariableExpr * variableExpr ) override final;
+	virtual void visit( ConstantExpr * constantExpr ) override final;
+	virtual void visit( SizeofExpr * sizeofExpr ) override final;
+	virtual void visit( AlignofExpr * alignofExpr ) override final;
+	virtual void visit( UntypedOffsetofExpr * offsetofExpr ) override final;
+	virtual void visit( OffsetofExpr * offsetofExpr ) override final;
+	virtual void visit( OffsetPackExpr * offsetPackExpr ) override final;
+	virtual void visit( AttrExpr * attrExpr ) override final;
+	virtual void visit( LogicalExpr * logicalExpr ) override final;
+	virtual void visit( ConditionalExpr * conditionalExpr ) override final;
+	virtual void visit( CommaExpr * commaExpr ) override final;
+	virtual void visit( TypeExpr * typeExpr ) override final;
+	virtual void visit( AsmExpr * asmExpr ) override final;
+	virtual void visit( ImplicitCopyCtorExpr * impCpCtorExpr ) override final;
+	virtual void visit( ConstructorExpr *  ctorExpr ) override final;
+	virtual void visit( CompoundLiteralExpr * compLitExpr ) override final;
+	virtual void visit( RangeExpr * rangeExpr ) override final;
+	virtual void visit( UntypedTupleExpr * tupleExpr ) override final;
+	virtual void visit( TupleExpr * tupleExpr ) override final;
+	virtual void visit( TupleIndexExpr * tupleExpr ) override final;
+	virtual void visit( TupleAssignExpr * assignExpr ) override final;
+	virtual void visit( StmtExpr *  stmtExpr ) override final;
+	virtual void visit( UniqueExpr *  uniqueExpr ) override final;
+
+	virtual void visit( VoidType * basicType ) override final;
+	virtual void visit( BasicType * basicType ) override final;
+	virtual void visit( PointerType * pointerType ) override final;
+	virtual void visit( ArrayType * arrayType ) override final;
+	virtual void visit( ReferenceType * referenceType ) override final;
+	virtual void visit( FunctionType * functionType ) override final;
+	virtual void visit( StructInstType * aggregateUseType ) override final;
+	virtual void visit( UnionInstType * aggregateUseType ) override final;
+	virtual void visit( EnumInstType * aggregateUseType ) override final;
+	virtual void visit( TraitInstType * aggregateUseType ) override final;
+	virtual void visit( TypeInstType * aggregateUseType ) override final;
+	virtual void visit( TupleType * tupleType ) override final;
+	virtual void visit( TypeofType * typeofType ) override final;
+	virtual void visit( AttrType * attrType ) override final;
+	virtual void visit( VarArgsType * varArgsType ) override final;
+	virtual void visit( ZeroType * zeroType ) override final;
+	virtual void visit( OneType * oneType ) override final;
+
+	virtual void visit( Designation * designation ) override final;
+	virtual void visit( SingleInit * singleInit ) override final;
+	virtual void visit( ListInit * listInit ) override final;
+	virtual void visit( ConstructorInit * ctorInit ) override final;
+
+	virtual void visit( Subrange * subrange ) override final;
+
+	virtual void visit( Constant * constant ) override final;
+
+	virtual void visit( Attribute * attribute ) override final;
+
+	virtual DeclarationWithType * mutate( ObjectDecl * objectDecl ) override final;
+	virtual DeclarationWithType * mutate( FunctionDecl * functionDecl ) override final;
+	virtual Declaration * mutate( StructDecl * aggregateDecl ) override final;
+	virtual Declaration * mutate( UnionDecl * aggregateDecl ) override final;
+	virtual Declaration * mutate( EnumDecl * aggregateDecl ) override final;
+	virtual Declaration * mutate( TraitDecl * aggregateDecl ) override final;
+	virtual Declaration * mutate( TypeDecl * typeDecl ) override final;
+	virtual Declaration * mutate( TypedefDecl * typeDecl ) override final;
+	virtual AsmDecl * mutate( AsmDecl * asmDecl ) override final;
+
+	virtual CompoundStmt * mutate( CompoundStmt * compoundStmt ) override final;
+	virtual Statement * mutate( ExprStmt * exprStmt ) override final;
+	virtual Statement * mutate( AsmStmt * asmStmt ) override final;
+	virtual Statement * mutate( IfStmt * ifStmt ) override final;
+	virtual Statement * mutate( WhileStmt * whileStmt ) override final;
+	virtual Statement * mutate( ForStmt * forStmt ) override final;
+	virtual Statement * mutate( SwitchStmt * switchStmt ) override final;
+	virtual Statement * mutate( CaseStmt * caseStmt ) override final;
+	virtual Statement * mutate( BranchStmt * branchStmt ) override final;
+	virtual Statement * mutate( ReturnStmt * returnStmt ) override final;
+	virtual Statement * mutate( ThrowStmt * throwStmt ) override final;
+	virtual Statement * mutate( TryStmt * tryStmt ) override final;
+	virtual Statement * mutate( CatchStmt * catchStmt ) override final;
+	virtual Statement * mutate( FinallyStmt * finallyStmt ) override final;
+	virtual Statement * mutate( WaitForStmt * waitforStmt ) override final;
+	virtual NullStmt * mutate( NullStmt * nullStmt ) override final;
+	virtual Statement * mutate( DeclStmt * declStmt ) override final;
+	virtual Statement * mutate( ImplicitCtorDtorStmt * impCtorDtorStmt ) override final;
+
+	virtual Expression * mutate( ApplicationExpr * applicationExpr ) override final;
+	virtual Expression * mutate( UntypedExpr * untypedExpr ) override final;
+	virtual Expression * mutate( NameExpr * nameExpr ) override final;
+	virtual Expression * mutate( AddressExpr * castExpr ) override final;
+	virtual Expression * mutate( LabelAddressExpr * labAddressExpr ) override final;
+	virtual Expression * mutate( CastExpr * castExpr ) override final;
+	virtual Expression * mutate( VirtualCastExpr * castExpr ) override final;
+	virtual Expression * mutate( UntypedMemberExpr * memberExpr ) override final;
+	virtual Expression * mutate( MemberExpr * memberExpr ) override final;
+	virtual Expression * mutate( VariableExpr * variableExpr ) override final;
+	virtual Expression * mutate( ConstantExpr * constantExpr ) override final;
+	virtual Expression * mutate( SizeofExpr * sizeofExpr ) override final;
+	virtual Expression * mutate( AlignofExpr * alignofExpr ) override final;
+	virtual Expression * mutate( UntypedOffsetofExpr * offsetofExpr ) override final;
+	virtual Expression * mutate( OffsetofExpr * offsetofExpr ) override final;
+	virtual Expression * mutate( OffsetPackExpr * offsetPackExpr ) override final;
+	virtual Expression * mutate( AttrExpr * attrExpr ) override final;
+	virtual Expression * mutate( LogicalExpr * logicalExpr ) override final;
+	virtual Expression * mutate( ConditionalExpr * conditionalExpr ) override final;
+	virtual Expression * mutate( CommaExpr * commaExpr ) override final;
+	virtual Expression * mutate( TypeExpr * typeExpr ) override final;
+	virtual Expression * mutate( AsmExpr * asmExpr ) override final;
+	virtual Expression * mutate( ImplicitCopyCtorExpr * impCpCtorExpr ) override final;
+	virtual Expression * mutate( ConstructorExpr * ctorExpr ) override final;
+	virtual Expression * mutate( CompoundLiteralExpr * compLitExpr ) override final;
+	virtual Expression * mutate( RangeExpr * rangeExpr ) override final;
+	virtual Expression * mutate( UntypedTupleExpr * tupleExpr ) override final;
+	virtual Expression * mutate( TupleExpr * tupleExpr ) override final;
+	virtual Expression * mutate( TupleIndexExpr * tupleExpr ) override final;
+	virtual Expression * mutate( TupleAssignExpr * assignExpr ) override final;
+	virtual Expression * mutate( StmtExpr *  stmtExpr ) override final;
+	virtual Expression * mutate( UniqueExpr *  uniqueExpr ) override final;
+
+	virtual Type * mutate( VoidType * basicType ) override final;
+	virtual Type * mutate( BasicType * basicType ) override final;
+	virtual Type * mutate( PointerType * pointerType ) override final;
+	virtual Type * mutate( ArrayType * arrayType ) override final;
+	virtual Type * mutate( ReferenceType * referenceType ) override final;
+	virtual Type * mutate( FunctionType * functionType ) override final;
+	virtual Type * mutate( StructInstType * aggregateUseType ) override final;
+	virtual Type * mutate( UnionInstType * aggregateUseType ) override final;
+	virtual Type * mutate( EnumInstType * aggregateUseType ) override final;
+	virtual Type * mutate( TraitInstType * aggregateUseType ) override final;
+	virtual Type * mutate( TypeInstType * aggregateUseType ) override final;
+	virtual Type * mutate( TupleType * tupleType ) override final;
+	virtual Type * mutate( TypeofType * typeofType ) override final;
+	virtual Type * mutate( AttrType * attrType ) override final;
+	virtual Type * mutate( VarArgsType * varArgsType ) override final;
+	virtual Type * mutate( ZeroType * zeroType ) override final;
+	virtual Type * mutate( OneType * oneType ) override final;
+
+	virtual Designation * mutate( Designation * designation ) override final;
+	virtual Initializer * mutate( SingleInit * singleInit ) override final;
+	virtual Initializer * mutate( ListInit * listInit ) override final;
+	virtual Initializer * mutate( ConstructorInit * ctorInit ) override final;
+
+	virtual Subrange * mutate( Subrange * subrange ) override final;
+
+	virtual Constant * mutate( Constant * constant ) override final;
+
+	virtual Attribute * mutate( Attribute * attribute ) override final;
+
+	virtual TypeSubstitution * mutate( TypeSubstitution * sub ) final;
 
 private:
 	template<typename pass_t> friend void acceptAll( std::list< Declaration* > &decls, PassVisitor< pass_t >& visitor );
 	template<typename pass_t> friend void mutateAll( std::list< Declaration* > &decls, PassVisitor< pass_t >& visitor );
+	template< typename TreeType, typename pass_t > friend void maybeAccept_impl( TreeType * tree, PassVisitor< pass_t > & visitor );
+	template< typename TreeType, typename pass_t > friend void maybeMutate_impl( TreeType *& tree, PassVisitor< pass_t > & mutator );
+	template< typename Container, typename pass_t > friend void maybeAccept_impl( Container & container, PassVisitor< pass_t > & visitor );
+	template< typename Container, typename pass_t > friend void maybeMutate_impl( Container & container, PassVisitor< pass_t > & mutator );
 
 	template<typename node_type> void call_previsit ( node_type * node ) { previsit_impl ( pass, node, 0 ); }
@@ -268,5 +281,6 @@
 	std::list< Declaration* > * 	get_afterDecls () { return declsToAddAfter_impl ( pass, 0); }
 
-	void set_visit_children( bool& ref ) { bool_ref * ptr = visit_children_impl(pass, 0); if(ptr) ptr->set( ref ); }
+	bool       get_visit_children    () { bool_ref * ptr = visit_children_impl(pass, 0); return ptr ? *ptr : true; }
+	bool_ref * get_visit_children_ptr() { return visit_children_impl(pass, 0); }
 
 	void indexerScopeEnter  ()                             { indexer_impl_enterScope  ( pass, 0       ); }
Index: src/Common/PassVisitor.impl.h
===================================================================
--- src/Common/PassVisitor.impl.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Common/PassVisitor.impl.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -2,39 +2,39 @@
 // IWYU pragma: private, include "PassVisitor.h"
 
-#define VISIT_START( node )                     \
-	__attribute__((unused))                   \
+#define VISIT_START( node )                                     \
+	__attribute__((unused))                                   \
+	ChildrenGuard children_guard( get_visit_children_ptr() ); \
+	__attribute__((unused))                                   \
 	guard_value_impl guard( at_cleanup_impl(pass, 0) );       \
-	bool visit_children = true;               \
-	set_visit_children( visit_children );	\
-	call_previsit( node );                    \
-	if( visit_children ) {                    \
+	call_previsit( node );                                    \
 
 #define VISIT_END( node )                       \
-	}                                         \
 	call_postvisit( node );                   \
 
-#define MUTATE_START( node )                    \
-	__attribute__((unused))                   \
+#define MUTATE_START( node )                                    \
+	__attribute__((unused))                                   \
+	ChildrenGuard children_guard( get_visit_children_ptr() ); \
+	__attribute__((unused))                                   \
 	guard_value_impl guard( at_cleanup_impl(pass, 0) );       \
-	bool visit_children = true;               \
-	set_visit_children( visit_children );	\
-	call_premutate( node );                   \
-	if( visit_children ) {                    \
+	call_premutate( node );                                   \
 
 #define MUTATE_END( type, node )                \
-	}                                         \
 	return call_postmutate< type * >( node ); \
 
 
-#define VISIT_BODY( node )        \
-	VISIT_START( node );        \
-	Visitor::visit( node );     \
-	VISIT_END( node );          \
-
-
-#define MUTATE_BODY( type, node ) \
-	MUTATE_START( node );       \
-	Mutator::mutate( node );    \
-	MUTATE_END( type, node );   \
+#define VISIT_BODY( node )          \
+	VISIT_START( node );          \
+	if( children_guard ) {        \
+		Visitor::visit( node ); \
+	}                             \
+	VISIT_END( node );            \
+
+
+#define MUTATE_BODY( type, node )    \
+	MUTATE_START( node );          \
+	if( children_guard ) {         \
+		Mutator::mutate( node ); \
+	}                              \
+	MUTATE_END( type, node );      \
 
 
@@ -63,5 +63,4 @@
 template< typename pass_type >
 static inline void acceptAll( std::list< Declaration* > &decls, PassVisitor< pass_type >& visitor ) {
-
 	DeclList_t* beforeDecls = visitor.get_beforeDecls();
 	DeclList_t* afterDecls  = visitor.get_afterDecls();
@@ -76,5 +75,5 @@
 		try {
 			// run visitor on declaration
-			maybeAccept( *i, visitor );
+			maybeAccept_impl( *i, visitor );
 		} catch( SemanticError &e ) {
 			e.set_location( (*i)->location );
@@ -92,5 +91,4 @@
 template< typename pass_type >
 static inline void mutateAll( std::list< Declaration* > &decls, PassVisitor< pass_type >& mutator ) {
-
 	DeclList_t* beforeDecls = mutator.get_beforeDecls();
 	DeclList_t* afterDecls  = mutator.get_afterDecls();
@@ -104,5 +102,5 @@
 		try {
 			// run mutator on declaration
-			*i = maybeMutate( *i, mutator );
+			maybeMutate_impl( *i, mutator );
 		} catch( SemanticError &e ) {
 			e.set_location( (*i)->location );
@@ -118,6 +116,15 @@
 }
 
-template< typename Container, typename VisitorType >
-inline void maybeAccept( Container &container, VisitorType &visitor ) {
+template< typename TreeType, typename pass_type >
+inline void maybeAccept_impl( TreeType * tree, PassVisitor< pass_type > & visitor ) {
+	if ( ! visitor.get_visit_children() ) return;
+	if ( tree ) {
+		tree->accept( visitor );
+	}
+}
+
+template< typename Container, typename pass_type >
+inline void maybeAccept_impl( Container & container, PassVisitor< pass_type > & visitor ) {
+	if ( ! visitor.get_visit_children() ) return;
 	SemanticError errors;
 	for ( typename Container::iterator i = container.begin(); i != container.end(); ++i ) {
@@ -136,11 +143,20 @@
 }
 
-template< typename Container, typename MutatorType >
-inline void maybeMutateRef( Container &container, MutatorType &mutator ) {
+template< typename TreeType, typename pass_type >
+inline void maybeMutate_impl( TreeType *& tree, PassVisitor< pass_type > & mutator ) {
+	if ( ! mutator.get_visit_children() ) return;
+
+	if ( tree ) {
+		tree = strict_dynamic_cast< TreeType * >( tree->acceptMutator( mutator ) );
+	}
+}
+
+template< typename Container, typename pass_type >
+inline void maybeMutate_impl( Container & container, PassVisitor< pass_type > & mutator ) {
+	if ( ! mutator.get_visit_children() ) return;
 	SemanticError errors;
 	for ( typename Container::iterator i = container.begin(); i != container.end(); ++i ) {
 		try {
 			if ( *i ) {
-///		    *i = (*i)->acceptMutator( mutator );
 				*i = dynamic_cast< typename Container::value_type >( (*i)->acceptMutator( mutator ) );
 				assert( *i );
@@ -159,4 +175,5 @@
 template< typename func_t >
 void PassVisitor< pass_type >::handleStatementList( std::list< Statement * > & statements, func_t func ) {
+	if ( ! get_visit_children() ) return;
 	SemanticError errors;
 
@@ -199,5 +216,5 @@
 void PassVisitor< pass_type >::visitStatementList( std::list< Statement * > & statements ) {
 	handleStatementList( statements, [this]( Statement * stmt) {
-		stmt->accept( *this );
+		maybeAccept_impl( stmt, *this );
 	});
 }
@@ -206,5 +223,5 @@
 void PassVisitor< pass_type >::mutateStatementList( std::list< Statement * > & statements ) {
 	handleStatementList( statements, [this]( Statement *& stmt) {
-		stmt = stmt->acceptMutator( *this );
+		maybeMutate_impl( stmt, *this );
 	});
 }
@@ -214,4 +231,6 @@
 template< typename func_t >
 Statement * PassVisitor< pass_type >::handleStatement( Statement * stmt, func_t func ) {
+	if ( ! get_visit_children() ) return stmt;
+
 	// don't want statements from outer CompoundStmts to be added to this CompoundStmt
 	ValueGuardPtr< TypeSubstitution * >  oldEnv        ( get_env_ptr    () );
@@ -244,5 +263,5 @@
 Statement * PassVisitor< pass_type >::visitStatement( Statement * stmt ) {
 	return handleStatement( stmt, [this]( Statement * stmt ) {
-		maybeAccept( stmt, *this );
+		maybeAccept_impl( stmt, *this );
 		return stmt;
 	});
@@ -252,5 +271,6 @@
 Statement * PassVisitor< pass_type >::mutateStatement( Statement * stmt ) {
 	return handleStatement( stmt, [this]( Statement * stmt ) {
-	 	return maybeMutate( stmt, *this );
+		maybeMutate_impl( stmt, *this );
+		return stmt;
 	});
 }
@@ -259,4 +279,5 @@
 template< typename func_t >
 Expression * PassVisitor< pass_type >::handleExpression( Expression * expr, func_t func ) {
+	if ( ! get_visit_children() ) return expr;
 	if( !expr ) return nullptr;
 
@@ -266,5 +287,5 @@
 	}
 
-	// should env be cloned (or moved) onto the result of the mutate?
+	// should env be moved onto the result of the mutate?
 	return func( expr );
 }
@@ -273,5 +294,5 @@
 Expression * PassVisitor< pass_type >::visitExpression( Expression * expr ) {
 	return handleExpression(expr, [this]( Expression * expr ) {
-		expr->accept( *this );
+		maybeAccept_impl( expr, *this );
 		return expr;
 	});
@@ -281,6 +302,27 @@
 Expression * PassVisitor< pass_type >::mutateExpression( Expression * expr ) {
 	return handleExpression(expr, [this]( Expression * expr ) {
-		return expr->acceptMutator( *this );
+		maybeMutate_impl( expr, *this );
+		return expr;
 	});
+}
+
+template< typename TreeType, typename VisitorType >
+inline void indexerScopedAccept( TreeType * tree, VisitorType & visitor ) {
+	if ( ! visitor.get_visit_children() ) return;
+	auto guard = makeFuncGuard(
+		[&visitor]() { visitor.indexerScopeEnter(); },
+		[&visitor]() { visitor.indexerScopeLeave(); }
+	);
+	maybeAccept_impl( tree, visitor );
+}
+
+template< typename TreeType, typename MutatorType >
+inline void indexerScopedMutate( TreeType *& tree, MutatorType & mutator ) {
+	if ( ! mutator.get_visit_children() ) return;
+	auto guard = makeFuncGuard(
+		[&mutator]() { mutator.indexerScopeEnter(); },
+		[&mutator]() { mutator.indexerScopeLeave(); }
+	);
+	maybeMutate_impl( tree, mutator );
 }
 
@@ -319,6 +361,7 @@
 
 	indexerScopedAccept( node->type         , *this );
-	maybeAccept        ( node->init         , *this );
-	maybeAccept        ( node->bitfieldWidth, *this );
+	maybeAccept_impl   ( node->init         , *this );
+	maybeAccept_impl   ( node->bitfieldWidth, *this );
+	maybeAccept_impl   ( node->attributes   , *this );
 
 	if ( node->name != "" ) {
@@ -334,6 +377,7 @@
 
 	indexerScopedMutate( node->type         , *this );
-	maybeMutateRef     ( node->init         , *this );
-	maybeMutateRef     ( node->bitfieldWidth, *this );
+	maybeMutate_impl   ( node->init         , *this );
+	maybeMutate_impl   ( node->bitfieldWidth, *this );
+	maybeMutate_impl   ( node->attributes   , *this );
 
 	if ( node->name != "" ) {
@@ -356,6 +400,7 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeAccept( node->type, *this );
-		maybeAccept( node->statements, *this );
+		maybeAccept_impl( node->type, *this );
+		maybeAccept_impl( node->statements, *this );
+		maybeAccept_impl( node->attributes, *this );
 	}
 
@@ -373,6 +418,7 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeMutateRef( node->type, *this );
-		maybeMutateRef( node->statements, *this );
+		maybeMutate_impl( node->type, *this );
+		maybeMutate_impl( node->statements, *this );
+		maybeMutate_impl( node->attributes, *this );
 	}
 
@@ -392,6 +438,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeAccept( node->parameters, *this );
-		maybeAccept( node->members   , *this );
+		maybeAccept_impl( node->parameters, *this );
+		maybeAccept_impl( node->members   , *this );
 	}
 
@@ -412,6 +458,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeMutateRef( node->parameters, *this );
-		maybeMutateRef( node->members   , *this );
+		maybeMutate_impl( node->parameters, *this );
+		maybeMutate_impl( node->members   , *this );
 	}
 
@@ -433,6 +479,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeAccept( node->parameters, *this );
-		maybeAccept( node->members   , *this );
+		maybeAccept_impl( node->parameters, *this );
+		maybeAccept_impl( node->members   , *this );
 	}
 
@@ -451,6 +497,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeMutateRef( node->parameters, *this );
-		maybeMutateRef( node->members   , *this );
+		maybeMutate_impl( node->parameters, *this );
+		maybeMutate_impl( node->members   , *this );
 	}
 
@@ -469,6 +515,6 @@
 
 	// unlike structs, traits, and unions, enums inject their members into the global scope
-	maybeAccept( node->parameters, *this );
-	maybeAccept( node->members   , *this );
+	maybeAccept_impl( node->parameters, *this );
+	maybeAccept_impl( node->members   , *this );
 
 	VISIT_END( node );
@@ -482,6 +528,6 @@
 
 	// unlike structs, traits, and unions, enums inject their members into the global scope
-	maybeMutateRef( node->parameters, *this );
-	maybeMutateRef( node->members   , *this );
+	maybeMutate_impl( node->parameters, *this );
+	maybeMutate_impl( node->members   , *this );
 
 	MUTATE_END( Declaration, node );
@@ -496,6 +542,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeAccept( node->parameters, *this );
-		maybeAccept( node->members   , *this );
+		maybeAccept_impl( node->parameters, *this );
+		maybeAccept_impl( node->members   , *this );
 	}
 
@@ -511,6 +557,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeMutateRef( node->parameters, *this );
-		maybeMutateRef( node->members   , *this );
+		maybeMutate_impl( node->parameters, *this );
+		maybeMutate_impl( node->members   , *this );
 	}
 
@@ -528,6 +574,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeAccept( node->parameters, *this );
-		maybeAccept( node->base      , *this );
+		maybeAccept_impl( node->parameters, *this );
+		maybeAccept_impl( node->base      , *this );
 	}
 
@@ -537,5 +583,5 @@
 	indexerAddType( node );
 
-	maybeAccept( node->assertions, *this );
+	maybeAccept_impl( node->assertions, *this );
 
 	indexerScopedAccept( node->init, *this );
@@ -550,6 +596,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeMutateRef( node->parameters, *this );
-		maybeMutateRef( node->base      , *this );
+		maybeMutate_impl( node->parameters, *this );
+		maybeMutate_impl( node->base      , *this );
 	}
 
@@ -559,5 +605,5 @@
 	indexerAddType( node );
 
-	maybeMutateRef( node->assertions, *this );
+	maybeMutate_impl( node->assertions, *this );
 
 	indexerScopedMutate( node->init, *this );
@@ -574,11 +620,11 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeAccept( node->parameters, *this );
-		maybeAccept( node->base      , *this );
+		maybeAccept_impl( node->parameters, *this );
+		maybeAccept_impl( node->base      , *this );
 	}
 
 	indexerAddType( node );
 
-	maybeAccept( node->assertions, *this );
+	maybeAccept_impl( node->assertions, *this );
 
 	VISIT_END( node );
@@ -591,11 +637,11 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeMutateRef     ( node->parameters, *this );
-		maybeMutateRef( node->base      , *this );
+		maybeMutate_impl( node->parameters, *this );
+		maybeMutate_impl( node->base      , *this );
 	}
 
 	indexerAddType( node );
 
-	maybeMutateRef( node->assertions, *this );
+	maybeMutate_impl( node->assertions, *this );
 
 	MUTATE_END( Declaration, node );
@@ -608,5 +654,5 @@
 	VISIT_START( node );
 
-	maybeAccept( node->stmt, *this );
+	maybeAccept_impl( node->stmt, *this );
 
 	VISIT_END( node );
@@ -617,5 +663,5 @@
 	MUTATE_START( node );
 
-	maybeMutateRef( node->stmt, *this );
+	maybeMutate_impl( node->stmt, *this );
 
 	MUTATE_END( AsmDecl, node );
@@ -686,6 +732,6 @@
 		// if statements introduce a level of scope (for the initialization)
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		acceptAll( node->get_initialization(), *this );
-		visitExpression( node->condition );
+		maybeAccept_impl( node->get_initialization(), *this );
+		visitExpression ( node->condition );
 		node->thenPart = visitStatement( node->thenPart );
 		node->elsePart = visitStatement( node->elsePart );
@@ -700,5 +746,5 @@
 		// if statements introduce a level of scope (for the initialization)
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeMutateRef( node->get_initialization(), *this );
+		maybeMutate_impl( node->get_initialization(), *this );
 		node->condition = mutateExpression( node->condition );
 		node->thenPart  = mutateStatement ( node->thenPart  );
@@ -738,5 +784,5 @@
 		// for statements introduce a level of scope (for the initialization)
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeAccept( node->initialization, *this );
+		maybeAccept_impl( node->initialization, *this );
 		visitExpression( node->condition );
 		visitExpression( node->increment );
@@ -752,5 +798,5 @@
 		// for statements introduce a level of scope (for the initialization)
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeMutateRef( node->initialization, *this );
+		maybeMutate_impl( node->initialization, *this );
 		node->condition = mutateExpression( node->condition );
 		node->increment = mutateExpression( node->increment );
@@ -855,7 +901,7 @@
 	VISIT_START( node );
 
-	maybeAccept( node->block       , *this );
-	maybeAccept( node->handlers    , *this );
-	maybeAccept( node->finallyBlock, *this );
+	maybeAccept_impl( node->block       , *this );
+	maybeAccept_impl( node->handlers    , *this );
+	maybeAccept_impl( node->finallyBlock, *this );
 
 	VISIT_END( node );
@@ -866,7 +912,7 @@
 	MUTATE_START( node );
 
-	maybeMutateRef( node->block       , *this );
-	maybeMutateRef( node->handlers    , *this );
-	maybeMutateRef( node->finallyBlock, *this );
+	maybeMutate_impl( node->block       , *this );
+	maybeMutate_impl( node->handlers    , *this );
+	maybeMutate_impl( node->finallyBlock, *this );
 
 	MUTATE_END( Statement, node );
@@ -881,5 +927,5 @@
 		// catch statements introduce a level of scope (for the caught exception)
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeAccept( node->decl, *this );
+		maybeAccept_impl( node->decl, *this );
 		node->cond = visitExpression( node->cond );
 		node->body = visitStatement ( node->body );
@@ -894,5 +940,5 @@
 		// catch statements introduce a level of scope (for the caught exception)
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeMutateRef( node->decl, *this );
+		maybeMutate_impl( node->decl, *this );
 		node->cond = mutateExpression( node->cond );
 		node->body = mutateStatement ( node->body );
@@ -968,6 +1014,6 @@
 
 	indexerScopedAccept( node->result  , *this );
-	maybeAccept        ( node->function, *this );
-	maybeAccept        ( node->args    , *this );
+	maybeAccept_impl        ( node->function, *this );
+	maybeAccept_impl        ( node->args    , *this );
 
 	VISIT_END( node );
@@ -980,6 +1026,6 @@
 	indexerScopedMutate( node->env     , *this );
 	indexerScopedMutate( node->result  , *this );
-	maybeMutateRef     ( node->function, *this );
-	maybeMutateRef     ( node->args    , *this );
+	maybeMutate_impl   ( node->function, *this );
+	maybeMutate_impl   ( node->args    , *this );
 
 	MUTATE_END( Expression, node );
@@ -992,5 +1038,5 @@
 	VISIT_START( node );
 
-	// maybeAccept( node->get_env(), *this );
+	// maybeAccept_impl( node->get_env(), *this );
 	indexerScopedAccept( node->result, *this );
 
@@ -1044,5 +1090,5 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->arg   , *this );
+	maybeAccept_impl        ( node->arg   , *this );
 
 	VISIT_END( node );
@@ -1055,5 +1101,5 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->arg   , *this );
+	maybeMutate_impl   ( node->arg   , *this );
 
 	MUTATE_END( Expression, node );
@@ -1067,5 +1113,5 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept( node->arg, *this );
+	maybeAccept_impl( node->arg, *this );
 
 	VISIT_END( node );
@@ -1078,5 +1124,5 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->arg   , *this );
+	maybeMutate_impl   ( node->arg   , *this );
 
 	MUTATE_END( Expression, node );
@@ -1090,5 +1136,5 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->arg   , *this );
+	maybeAccept_impl   ( node->arg   , *this );
 
 	VISIT_END( node );
@@ -1101,5 +1147,5 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->arg   , *this );
+	maybeMutate_impl   ( node->arg   , *this );
 
 	MUTATE_END( Expression, node );
@@ -1134,6 +1180,6 @@
 
 	indexerScopedAccept( node->result   , *this );
-	maybeAccept        ( node->aggregate, *this );
-	maybeAccept        ( node->member   , *this );
+	maybeAccept_impl   ( node->aggregate, *this );
+	maybeAccept_impl   ( node->member   , *this );
 
 	VISIT_END( node );
@@ -1146,6 +1192,6 @@
 	indexerScopedMutate( node->env      , *this );
 	indexerScopedMutate( node->result   , *this );
-	maybeMutateRef     ( node->aggregate, *this );
-	maybeMutateRef     ( node->member   , *this );
+	maybeMutate_impl   ( node->aggregate, *this );
+	maybeMutate_impl   ( node->member   , *this );
 
 	MUTATE_END( Expression, node );
@@ -1159,5 +1205,5 @@
 
 	indexerScopedAccept( node->result   , *this );
-	maybeAccept        ( node->aggregate, *this );
+	maybeAccept_impl   ( node->aggregate, *this );
 
 	VISIT_END( node );
@@ -1170,5 +1216,5 @@
 	indexerScopedMutate( node->env      , *this );
 	indexerScopedMutate( node->result   , *this );
-	maybeMutateRef     ( node->aggregate, *this );
+	maybeMutate_impl   ( node->aggregate, *this );
 
 	MUTATE_END( Expression, node );
@@ -1203,5 +1249,5 @@
 
 	indexerScopedAccept( node->result   , *this );
-	maybeAccept        ( &node->constant, *this );
+	maybeAccept_impl   ( &node->constant, *this );
 
 	VISIT_END( node );
@@ -1214,5 +1260,7 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	node->constant = *maybeMutate( &node->constant, *this );
+	Constant * ptr = &node->constant;
+	maybeMutate_impl( ptr, *this );
+	node->constant = *ptr;
 
 	MUTATE_END( Expression, node );
@@ -1227,7 +1275,7 @@
 	indexerScopedAccept( node->result, *this );
 	if ( node->get_isType() ) {
-		maybeAccept( node->type, *this );
+		maybeAccept_impl( node->type, *this );
 	} else {
-		maybeAccept( node->expr, *this );
+		maybeAccept_impl( node->expr, *this );
 	}
 
@@ -1242,7 +1290,7 @@
 	indexerScopedMutate( node->result, *this );
 	if ( node->get_isType() ) {
-		maybeMutateRef( node->type, *this );
+		maybeMutate_impl( node->type, *this );
 	} else {
-		maybeMutateRef( node->expr, *this );
+		maybeMutate_impl( node->expr, *this );
 	}
 
@@ -1258,7 +1306,7 @@
 	indexerScopedAccept( node->result, *this );
 	if ( node->get_isType() ) {
-		maybeAccept( node->type, *this );
+		maybeAccept_impl( node->type, *this );
 	} else {
-		maybeAccept( node->expr, *this );
+		maybeAccept_impl( node->expr, *this );
 	}
 
@@ -1273,7 +1321,7 @@
 	indexerScopedMutate( node->result, *this );
 	if ( node->get_isType() ) {
-		maybeMutateRef( node->type, *this );
+		maybeMutate_impl( node->type, *this );
 	} else {
-		maybeMutateRef( node->expr, *this );
+		maybeMutate_impl( node->expr, *this );
 	}
 
@@ -1288,5 +1336,5 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->type  , *this );
+	maybeAccept_impl   ( node->type  , *this );
 
 	VISIT_END( node );
@@ -1299,5 +1347,5 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->type  , *this );
+	maybeMutate_impl   ( node->type  , *this );
 
 	MUTATE_END( Expression, node );
@@ -1311,6 +1359,6 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->type  , *this );
-	maybeAccept        ( node->member, *this );
+	maybeAccept_impl   ( node->type  , *this );
+	maybeAccept_impl   ( node->member, *this );
 
 	VISIT_END( node );
@@ -1323,6 +1371,6 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->type  , *this );
-	maybeMutateRef     ( node->member, *this );
+	maybeMutate_impl   ( node->type  , *this );
+	maybeMutate_impl   ( node->member, *this );
 
 	MUTATE_END( Expression, node );
@@ -1336,5 +1384,5 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->type  , *this );
+	maybeAccept_impl   ( node->type  , *this );
 
 	VISIT_END( node );
@@ -1347,5 +1395,5 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->type  , *this );
+	maybeMutate_impl   ( node->type  , *this );
 
 	MUTATE_END( Expression, node );
@@ -1360,7 +1408,7 @@
 	indexerScopedAccept( node->result, *this );
 	if ( node->get_isType() ) {
-		maybeAccept( node->type, *this );
+		maybeAccept_impl( node->type, *this );
 	} else {
-		maybeAccept( node->expr, *this );
+		maybeAccept_impl( node->expr, *this );
 	}
 
@@ -1375,7 +1423,7 @@
 	indexerScopedMutate( node->result, *this );
 	if ( node->get_isType() ) {
-		maybeMutateRef( node->type, *this );
+		maybeMutate_impl( node->type, *this );
 	} else {
-		maybeMutateRef( node->expr, *this );
+		maybeMutate_impl( node->expr, *this );
 	}
 
@@ -1390,6 +1438,6 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->arg1  , *this );
-	maybeAccept        ( node->arg2  , *this );
+	maybeAccept_impl   ( node->arg1  , *this );
+	maybeAccept_impl   ( node->arg2  , *this );
 
 	VISIT_END( node );
@@ -1402,6 +1450,6 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->arg1  , *this );
-	maybeMutateRef     ( node->arg2  , *this );
+	maybeMutate_impl   ( node->arg1  , *this );
+	maybeMutate_impl   ( node->arg2  , *this );
 
 	MUTATE_END( Expression, node );
@@ -1415,7 +1463,7 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->arg1  , *this );
-	maybeAccept        ( node->arg2  , *this );
-	maybeAccept        ( node->arg3  , *this );
+	maybeAccept_impl        ( node->arg1  , *this );
+	maybeAccept_impl        ( node->arg2  , *this );
+	maybeAccept_impl        ( node->arg3  , *this );
 
 	VISIT_END( node );
@@ -1428,7 +1476,7 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->arg1  , *this );
-	maybeMutateRef     ( node->arg2  , *this );
-	maybeMutateRef     ( node->arg3  , *this );
+	maybeMutate_impl   ( node->arg1  , *this );
+	maybeMutate_impl   ( node->arg2  , *this );
+	maybeMutate_impl   ( node->arg3  , *this );
 
 	MUTATE_END( Expression, node );
@@ -1442,6 +1490,6 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->arg1  , *this );
-	maybeAccept        ( node->arg2  , *this );
+	maybeAccept_impl   ( node->arg1  , *this );
+	maybeAccept_impl   ( node->arg2  , *this );
 
 	VISIT_END( node );
@@ -1454,6 +1502,6 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->arg1  , *this );
-	maybeMutateRef     ( node->arg2  , *this );
+	maybeMutate_impl   ( node->arg1  , *this );
+	maybeMutate_impl   ( node->arg2  , *this );
 
 	MUTATE_END( Expression, node );
@@ -1467,5 +1515,5 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->type, *this );
+	maybeAccept_impl   ( node->type, *this );
 
 	VISIT_END( node );
@@ -1478,5 +1526,5 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->type  , *this );
+	maybeMutate_impl   ( node->type  , *this );
 
 	MUTATE_END( Expression, node );
@@ -1490,7 +1538,7 @@
 
 	indexerScopedAccept( node->result    , *this );
-	maybeAccept        ( node->inout     , *this );
-	maybeAccept        ( node->constraint, *this );
-	maybeAccept        ( node->operand   , *this );
+	maybeAccept_impl   ( node->inout     , *this );
+	maybeAccept_impl   ( node->constraint, *this );
+	maybeAccept_impl   ( node->operand   , *this );
 
 	VISIT_END( node );
@@ -1503,7 +1551,7 @@
 	indexerScopedMutate( node->env       , *this );
 	indexerScopedMutate( node->result    , *this );
-	maybeMutateRef     ( node->inout     , *this );
-	maybeMutateRef     ( node->constraint, *this );
-	maybeMutateRef     ( node->operand   , *this );
+	maybeMutate_impl   ( node->inout     , *this );
+	maybeMutate_impl   ( node->constraint, *this );
+	maybeMutate_impl   ( node->operand   , *this );
 
 	MUTATE_END( Expression, node );
@@ -1517,8 +1565,8 @@
 
 	indexerScopedAccept( node->result     , *this );
-	maybeAccept        ( node->callExpr   , *this );
-	maybeAccept        ( node->tempDecls  , *this );
-	maybeAccept        ( node->returnDecls, *this );
-	maybeAccept        ( node->dtors      , *this );
+	maybeAccept_impl   ( node->callExpr   , *this );
+	maybeAccept_impl   ( node->tempDecls  , *this );
+	maybeAccept_impl   ( node->returnDecls, *this );
+	maybeAccept_impl   ( node->dtors      , *this );
 
 	VISIT_END( node );
@@ -1531,8 +1579,8 @@
 	indexerScopedMutate( node->env        , *this );
 	indexerScopedMutate( node->result     , *this );
-	maybeMutateRef     ( node->callExpr   , *this );
-	maybeMutateRef     ( node->tempDecls  , *this );
-	maybeMutateRef     ( node->returnDecls, *this );
-	maybeMutateRef     ( node->dtors      , *this );
+	maybeMutate_impl   ( node->callExpr   , *this );
+	maybeMutate_impl   ( node->tempDecls  , *this );
+	maybeMutate_impl   ( node->returnDecls, *this );
+	maybeMutate_impl   ( node->dtors      , *this );
 
 	MUTATE_END( Expression, node );
@@ -1546,5 +1594,5 @@
 
 	indexerScopedAccept( node->result  , *this );
-	maybeAccept        ( node->callExpr, *this );
+	maybeAccept_impl   ( node->callExpr, *this );
 
 	VISIT_END( node );
@@ -1557,5 +1605,5 @@
 	indexerScopedMutate( node->env     , *this );
 	indexerScopedMutate( node->result  , *this );
-	maybeMutateRef     ( node->callExpr, *this );
+	maybeMutate_impl   ( node->callExpr, *this );
 
 	MUTATE_END( Expression, node );
@@ -1569,5 +1617,5 @@
 
 	indexerScopedAccept( node->result     , *this );
-	maybeAccept        ( node->initializer, *this );
+	maybeAccept_impl   ( node->initializer, *this );
 
 	VISIT_END( node );
@@ -1580,5 +1628,5 @@
 	indexerScopedMutate( node->env        , *this );
 	indexerScopedMutate( node->result     , *this );
-	maybeMutateRef     ( node->initializer, *this );
+	maybeMutate_impl     ( node->initializer, *this );
 
 	MUTATE_END( Expression, node );
@@ -1592,6 +1640,6 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->low   , *this );
-	maybeAccept        ( node->high  , *this );
+	maybeAccept_impl   ( node->low   , *this );
+	maybeAccept_impl   ( node->high  , *this );
 
 	VISIT_END( node );
@@ -1604,6 +1652,6 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->low   , *this );
-	maybeMutateRef     ( node->high  , *this );
+	maybeMutate_impl   ( node->low   , *this );
+	maybeMutate_impl   ( node->high  , *this );
 
 	MUTATE_END( Expression, node );
@@ -1617,5 +1665,5 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->exprs , *this );
+	maybeAccept_impl   ( node->exprs , *this );
 
 	VISIT_END( node );
@@ -1628,5 +1676,5 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->exprs , *this );
+	maybeMutate_impl   ( node->exprs , *this );
 
 	MUTATE_END( Expression, node );
@@ -1640,5 +1688,5 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept          ( node->exprs , *this );
+	maybeAccept_impl   ( node->exprs , *this );
 
 	VISIT_END( node );
@@ -1651,5 +1699,5 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->exprs , *this );
+	maybeMutate_impl   ( node->exprs , *this );
 
 	MUTATE_END( Expression, node );
@@ -1663,5 +1711,5 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->tuple , *this );
+	maybeAccept_impl   ( node->tuple , *this );
 
 	VISIT_END( node );
@@ -1674,5 +1722,5 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->tuple , *this );
+	maybeMutate_impl   ( node->tuple , *this );
 
 	MUTATE_END( Expression, node );
@@ -1686,5 +1734,5 @@
 
 	indexerScopedAccept( node->result  , *this );
-	maybeAccept        ( node->stmtExpr, *this );
+	maybeAccept_impl   ( node->stmtExpr, *this );
 
 	VISIT_END( node );
@@ -1697,5 +1745,5 @@
 	indexerScopedMutate( node->env     , *this );
 	indexerScopedMutate( node->result  , *this );
-	maybeMutateRef     ( node->stmtExpr, *this );
+	maybeMutate_impl   ( node->stmtExpr, *this );
 
 	MUTATE_END( Expression, node );
@@ -1714,7 +1762,7 @@
 
 	indexerScopedAccept( node->result     , *this );
-	maybeAccept        ( node->statements , *this );
-	maybeAccept        ( node->returnDecls, *this );
-	maybeAccept        ( node->dtors      , *this );
+	maybeAccept_impl   ( node->statements , *this );
+	maybeAccept_impl   ( node->returnDecls, *this );
+	maybeAccept_impl   ( node->dtors      , *this );
 
 	VISIT_END( node );
@@ -1731,7 +1779,7 @@
 
 	indexerScopedMutate( node->result     , *this );
-	maybeMutateRef     ( node->statements , *this );
-	maybeMutateRef     ( node->returnDecls, *this );
-	maybeMutateRef     ( node->dtors      , *this );
+	maybeMutate_impl   ( node->statements , *this );
+	maybeMutate_impl   ( node->returnDecls, *this );
+	maybeMutate_impl   ( node->dtors      , *this );
 
 	MUTATE_END( Expression, node );
@@ -1745,5 +1793,5 @@
 
 	indexerScopedAccept( node->result, *this );
-	maybeAccept        ( node->expr  , *this );
+	maybeAccept_impl   ( node->expr  , *this );
 
 	VISIT_END( node );
@@ -1756,5 +1804,5 @@
 	indexerScopedMutate( node->env   , *this );
 	indexerScopedMutate( node->result, *this );
-	maybeMutateRef     ( node->expr  , *this );
+	maybeMutate_impl   ( node->expr  , *this );
 
 	MUTATE_END( Expression, node );
@@ -1801,6 +1849,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeAccept( node->forall    , *this );
-		maybeAccept( node->parameters, *this );
+		maybeAccept_impl( node->forall    , *this );
+		maybeAccept_impl( node->parameters, *this );
 	}
 
@@ -1816,6 +1864,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeMutateRef( node->forall    , *this );
-		maybeMutateRef( node->parameters, *this );
+		maybeMutate_impl( node->forall    , *this );
+		maybeMutate_impl( node->parameters, *this );
 	}
 
@@ -1833,6 +1881,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeAccept( node->forall    , *this );
-		maybeAccept( node->parameters, *this );
+		maybeAccept_impl( node->forall    , *this );
+		maybeAccept_impl( node->parameters, *this );
 	}
 
@@ -1848,6 +1896,6 @@
 	{
 		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
-		maybeMutateRef( node->forall    , *this );
-		maybeMutateRef( node->parameters, *this );
+		maybeMutate_impl( node->forall    , *this );
+		maybeMutate_impl( node->parameters, *this );
 	}
 
@@ -1873,6 +1921,6 @@
 	VISIT_START( node );
 
-	maybeAccept( node->forall    , *this );
-	maybeAccept( node->parameters, *this );
+	maybeAccept_impl( node->forall    , *this );
+	maybeAccept_impl( node->parameters, *this );
 
 	VISIT_END( node );
@@ -1883,6 +1931,6 @@
 	MUTATE_START( node );
 
-	maybeMutateRef( node->forall    , *this );
-	maybeMutateRef( node->parameters, *this );
+	maybeMutate_impl( node->forall    , *this );
+	maybeMutate_impl( node->parameters, *this );
 
 	MUTATE_END( Type, node );
@@ -1930,5 +1978,5 @@
 	VISIT_START( node );
 
-	maybeAccept( node->get_designators(), *this );
+	maybeAccept_impl( node->get_designators(), *this );
 
 	VISIT_END( node );
@@ -1939,5 +1987,5 @@
 	MUTATE_START( node );
 
-	maybeMutateRef( node->get_designators(), *this );
+	maybeMutate_impl( node->get_designators(), *this );
 
 	MUTATE_END( Designation, node );
@@ -1981,4 +2029,9 @@
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( Constant * node ) {
+	VISIT_BODY( node );
+}
+
+template< typename pass_type >
+void PassVisitor< pass_type >::visit( Attribute * node ) {
 	VISIT_BODY( node );
 }
@@ -2069,2 +2122,21 @@
 	MUTATE_BODY( Constant, node );
 }
+
+template< typename pass_type >
+Attribute * PassVisitor< pass_type >::mutate( Attribute * node  )  {
+	MUTATE_BODY( Attribute, node );
+}
+
+template< typename pass_type >
+TypeSubstitution * PassVisitor< pass_type >::mutate( TypeSubstitution * node ) {
+	MUTATE_START( node );
+
+	for ( auto & p : node->typeEnv ) {
+		indexerScopedMutate( p.second, *this );
+	}
+	for ( auto & p : node->varEnv ) {
+		indexerScopedMutate( p.second, *this );
+	}
+
+	MUTATE_END( TypeSubstitution, node );
+}
Index: src/Common/PassVisitor.proto.h
===================================================================
--- src/Common/PassVisitor.proto.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Common/PassVisitor.proto.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -46,39 +46,42 @@
 	~bool_ref() = default;
 
-	operator bool() { return *m_ref; }
+	operator bool() { return m_ref ? *m_ref : true; }
 	bool operator=( bool val ) { return *m_ref = val; }
 
 private:
 
-	template<typename pass>
-	friend class PassVisitor;
-
-	void set( bool & val ) { m_ref = &val; };
-
-	bool * m_ref;
+	friend class ChildrenGuard;
+
+	bool * set( bool & val ) {
+		bool * prev = m_ref;
+		m_ref = &val;
+		return prev;
+	}
+
+	bool * m_ref = nullptr;
 };
 
-template< typename TreeType, typename VisitorType >
-inline void indexerScopedAccept( TreeType * tree, VisitorType & visitor ) {
-	auto guard = makeFuncGuard(
-		[&visitor]() { visitor.indexerScopeEnter(); },
-		[&visitor]() { visitor.indexerScopeLeave(); }
-	);
-	maybeAccept( tree, visitor );
-}
-
-template< typename TreeType, typename MutatorType >
-inline void indexerScopedMutate( TreeType *& tree, MutatorType & mutator ) {
-	auto guard = makeFuncGuard(
-		[&mutator]() { mutator.indexerScopeEnter(); },
-		[&mutator]() { mutator.indexerScopeLeave(); }
-	);
-	tree = maybeMutate( tree, mutator );
-}
-
-template< typename TreeType, typename MutatorType >
-inline void maybeMutateRef( TreeType *& tree, MutatorType & mutator ) {
-	tree = maybeMutate( tree, mutator );
-}
+class ChildrenGuard {
+public:
+
+	ChildrenGuard( bool_ref * ref )
+		: m_val ( true )
+		, m_prev( ref ? ref->set( m_val ) : nullptr )
+		, m_ref ( ref )
+	{}
+
+	~ChildrenGuard() {
+		if( m_ref ) {
+			m_ref->set( *m_prev );
+		}
+	}
+
+	operator bool() { return m_val; }
+
+private:
+	bool       m_val;
+	bool     * m_prev;
+	bool_ref * m_ref;
+};
 
 //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Index: src/Common/utility.h
===================================================================
--- src/Common/utility.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Common/utility.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -18,4 +18,5 @@
 #include <cctype>
 #include <algorithm>
+#include <functional>
 #include <iostream>
 #include <iterator>
@@ -27,4 +28,6 @@
 
 #include <cassert>
+
+#include "Common/Indenter.h"
 
 template< typename T >
@@ -75,9 +78,9 @@
 
 template< typename Container >
-void printAll( const Container &container, std::ostream &os, int indent = 0 ) {
+void printAll( const Container &container, std::ostream &os, Indenter indent = {} ) {
 	for ( typename Container::const_iterator i = container.begin(); i != container.end(); ++i ) {
 		if ( *i ) {
-			os << std::string( indent,  ' ' );
-			(*i)->print( os, indent + 2 );
+			os << indent;
+			(*i)->print( os, indent );
 			// need an endl after each element because it's not easy to know when each individual item should end
 			os << std::endl;
@@ -351,14 +354,16 @@
 template< typename T1, typename T2 >
 struct group_iterate_t {
+private:
+	std::tuple<T1, T2> args;
+public:
 	group_iterate_t( bool skipBoundsCheck, const T1 & v1, const T2 & v2 ) : args(v1, v2) {
 		assertf(skipBoundsCheck || v1.size() == v2.size(), "group iteration requires containers of the same size: <%zd, %zd>.", v1.size(), v2.size());
 	};
 
+	typedef std::tuple<decltype(*std::get<0>(args).begin()), decltype(*std::get<1>(args).begin())> value_type;
+	typedef decltype(std::get<0>(args).begin()) T1Iter;
+	typedef decltype(std::get<1>(args).begin()) T2Iter;
+
 	struct iterator {
-		typedef typename std::remove_reference<T1>::type T1val;
-		typedef typename std::remove_reference<T2>::type T2val;
-		typedef std::tuple<typename T1val::value_type &, typename T2val::value_type &> value_type;
-		typedef typename T1val::iterator T1Iter;
-		typedef typename T2val::iterator T2Iter;
 		typedef std::tuple<T1Iter, T2Iter> IterTuple;
 		IterTuple it;
@@ -370,9 +375,7 @@
 		value_type operator*() const { return std::tie( *std::get<0>(it), *std::get<1>(it) ); }
 	};
+
 	iterator begin() { return iterator( std::get<0>(args).begin(), std::get<1>(args).begin() ); }
 	iterator end() { return iterator( std::get<0>(args).end(), std::get<1>(args).end() ); }
-
-private:
-	std::tuple<T1, T2> args;
 };
 
Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Concurrency/Keywords.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -196,4 +196,5 @@
 		std::list<DeclarationWithType*> findMutexArgs( FunctionDecl* );
 		void validate( DeclarationWithType * );
+		void addDtorStatments( FunctionDecl* func, CompoundStmt *, const std::list<DeclarationWithType * > &);
 		void addStatments( FunctionDecl* func, CompoundStmt *, const std::list<DeclarationWithType * > &);
 
@@ -206,4 +207,5 @@
 	  	StructDecl* monitor_decl = nullptr;
 		StructDecl* guard_decl = nullptr;
+		StructDecl* dtor_guard_decl = nullptr;
 
 		static std::unique_ptr< Type > generic_func;
@@ -229,4 +231,5 @@
 
 		void postvisit( FunctionDecl * decl );
+		void previsit ( StructDecl   * decl );
 
 		void addStartStatement( FunctionDecl * decl, DeclarationWithType * param );
@@ -236,4 +239,8 @@
 			acceptAll( translationUnit, impl );
 		}
+
+	  private :
+		bool thread_ctor_seen = false;
+		StructDecl * thread_decl = nullptr;
 	};
 
@@ -403,4 +410,10 @@
 		if( mutexArgs.empty() ) return;
 
+		if( CodeGen::isConstructor(decl->name) ) throw SemanticError( "constructors cannot have mutex parameters", decl );
+
+		bool isDtor = CodeGen::isDestructor( decl->name );
+
+		if( isDtor && mutexArgs.size() != 1 ) throw SemanticError( "destructors can only have 1 mutex argument", decl );
+
 		for(auto arg : mutexArgs) {
 			validate( arg );
@@ -412,6 +425,12 @@
 		if( !monitor_decl ) throw SemanticError( "mutex keyword requires monitors to be in scope, add #include <monitor>", decl );
 		if( !guard_decl ) throw SemanticError( "mutex keyword requires monitors to be in scope, add #include <monitor>", decl );
-
-		addStatments( decl, body, mutexArgs );
+		if( !dtor_guard_decl ) throw SemanticError( "mutex keyword requires monitors to be in scope, add #include <monitor>", decl );
+
+		if( isDtor ) {
+			addDtorStatments( decl, body, mutexArgs );
+		}
+		else {
+			addStatments( decl, body, mutexArgs );
+		}
 	}
 
@@ -425,4 +444,8 @@
 			assert( !guard_decl );
 			guard_decl = decl;
+		}
+		else if( decl->name == "monitor_dtor_guard_t" ) {
+			assert( !dtor_guard_decl );
+			dtor_guard_decl = decl;
 		}
 	}
@@ -457,4 +480,55 @@
 		//Make sure that typed isn't mutex
 		if( base->get_mutex() ) throw SemanticError( "mutex keyword may only appear once per argument ", arg );
+	}
+
+	void MutexKeyword::addDtorStatments( FunctionDecl* func, CompoundStmt * body, const std::list<DeclarationWithType * > & args ) {
+		Type * arg_type = args.front()->get_type()->clone();
+		arg_type->set_mutex( false );
+
+		ObjectDecl * monitors = new ObjectDecl(
+			"__monitor",
+			noStorage,
+			LinkageSpec::Cforall,
+			nullptr,
+			new PointerType(
+				noQualifiers,
+				new StructInstType(
+					noQualifiers,
+					monitor_decl
+				)
+			),
+			new SingleInit( new UntypedExpr(
+				new NameExpr( "get_monitor" ),
+				{  new CastExpr( new VariableExpr( args.front() ), arg_type ) }
+			))
+		);
+
+		assert(generic_func);
+
+		//in reverse order :
+		// monitor_guard_t __guard = { __monitors, #, func };
+		body->push_front(
+			new DeclStmt( noLabels, new ObjectDecl(
+				"__guard",
+				noStorage,
+				LinkageSpec::Cforall,
+				nullptr,
+				new StructInstType(
+					noQualifiers,
+					dtor_guard_decl
+				),
+				new ListInit(
+					{
+						new SingleInit( new AddressExpr( new VariableExpr( monitors ) ) ),
+						new SingleInit( new CastExpr( new VariableExpr( func ), generic_func->clone() ) )
+					},
+					noDesignators,
+					true
+				)
+			))
+		);
+
+		//monitor_desc * __monitors[] = { get_monitor(a), get_monitor(b) };
+		body->push_front( new DeclStmt( noLabels, monitors) );
 	}
 
@@ -523,11 +597,27 @@
 	// General entry routine
 	//=============================================================================================
+	void ThreadStarter::previsit( StructDecl * decl ) {
+		if( decl->name == "thread_desc" && decl->body ) {
+			assert( !thread_decl );
+			thread_decl = decl;
+		}
+	}
+
 	void ThreadStarter::postvisit(FunctionDecl * decl) {
 		if( ! CodeGen::isConstructor(decl->name) ) return;
 
+		Type * typeof_this = InitTweak::getTypeofThis(decl->type);
+		StructInstType * ctored_type = dynamic_cast< StructInstType * >( typeof_this );
+		if( ctored_type && ctored_type->baseStruct == thread_decl ) {
+			thread_ctor_seen = true;
+		}
+
 		DeclarationWithType * param = decl->get_functionType()->get_parameters().front();
 		auto type  = dynamic_cast< StructInstType * >( InitTweak::getPointerBase( param->get_type() ) );
-		// if( type ) std::cerr << "FRED2" << std::endl;
 		if( type && type->get_baseStruct()->is_thread() ) {
+			if( !thread_decl || !thread_ctor_seen ) {
+				throw SemanticError("thread keyword requires threads to be in scope, add #include <thread>");
+			}
+
 			addStartStatement( decl, param );
 		}
Index: src/Concurrency/Waitfor.cc
===================================================================
--- src/Concurrency/Waitfor.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Concurrency/Waitfor.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -27,5 +27,5 @@
 #include "InitTweak/InitTweak.h"   // for getPointerBase
 #include "Parser/LinkageSpec.h"    // for Cforall
-#include "SymTab/AddVisit.h"       // for acceptAndAdd
+#include "ResolvExpr/Resolver.h"   // for findVoidExpression
 #include "SynTree/Constant.h"      // for Constant
 #include "SynTree/Declaration.h"   // for StructDecl, FunctionDecl, ObjectDecl
@@ -112,5 +112,5 @@
 	//=============================================================================================
 
-	class GenerateWaitForPass final : public WithStmtsToAdd {
+	class GenerateWaitForPass final : public WithIndexer {
 	  public:
 
@@ -126,9 +126,11 @@
 
 		ObjectDecl * declare( unsigned long count, CompoundStmt * stmt );
+		ObjectDecl * declareFlag( CompoundStmt * stmt );
+		Statement  * makeSetter( ObjectDecl * flag );
 		ObjectDecl * declMon( WaitForStmt::Clause & clause, CompoundStmt * stmt );
-		void         init( ObjectDecl * acceptables, int index, WaitForStmt::Clause & clause, CompoundStmt * stmt );
-		Expression * init_timeout( Expression *& time, Expression *& time_cond, bool has_else, Expression *& else_cond, CompoundStmt * stmt );
-		Expression * call();
-		void choose();
+		void         init( ObjectDecl * acceptables, int index, WaitForStmt::Clause & clause, Statement * settter, CompoundStmt * stmt );
+		Expression * init_timeout( Expression *& time, Expression *& time_cond, bool has_else, Expression *& else_cond, Statement * settter, CompoundStmt * stmt );
+		Expression * call(size_t count, ObjectDecl * acceptables, Expression * timeout, CompoundStmt * stmt);
+		void         choose( WaitForStmt * waitfor, Expression  * result, CompoundStmt * stmt );
 
 		static void implement( std::list< Declaration * > & translationUnit ) {
@@ -140,15 +142,15 @@
 	  private:
 	  	FunctionDecl        * decl_waitfor    = nullptr;
+	  	StructDecl          * decl_mask       = nullptr;
 		StructDecl          * decl_acceptable = nullptr;
 		StructDecl          * decl_monitor    = nullptr;
-		DeclarationWithType * decl_m_func     = nullptr;
-		DeclarationWithType * decl_m_count    = nullptr;
-		DeclarationWithType * decl_m_monitors = nullptr;
-		DeclarationWithType * decl_m_isdtor   = nullptr;
 
 		static std::unique_ptr< Type > generic_func;
 
+		UniqueName namer_acc = "__acceptables_"s;
+		UniqueName namer_idx = "__index_"s;
+		UniqueName namer_flg = "__do_run_"s;
+		UniqueName namer_msk = "__mask_"s;
 		UniqueName namer_mon = "__monitors_"s;
-		UniqueName namer_acc = "__acceptables_"s;
 		UniqueName namer_tim = "__timeout_"s;
 	};
@@ -167,5 +169,5 @@
 	namespace {
 		Expression * makeOpIndex( DeclarationWithType * array, unsigned long index ) {
-			return new ApplicationExpr(
+			return new UntypedExpr(
 				new NameExpr( "?[?]" ),
 				{
@@ -177,5 +179,5 @@
 
 		Expression * makeOpAssign( Expression * lhs, Expression * rhs ) {
-			return new ApplicationExpr(
+			return new UntypedExpr(
 					new NameExpr( "?=?" ),
 					{ lhs, rhs }
@@ -183,22 +185,23 @@
 		}
 
-		Expression * makeOpMember( Expression * sue, DeclarationWithType * mem ) {
-			return new MemberExpr( mem, sue );
-		}
-
-		Statement * makeAccStatement( DeclarationWithType * object, unsigned long index, DeclarationWithType * member, Expression * value ) {
-			return new ExprStmt(
-				noLabels,
-				makeOpAssign(
-					makeOpMember(
-						makeOpIndex(
-							object,
-							index
-						),
-						member
+		Expression * makeOpMember( Expression * sue, const std::string & mem ) {
+			return new UntypedMemberExpr( new NameExpr( mem ), sue );
+		}
+
+		Statement * makeAccStatement( DeclarationWithType * object, unsigned long index, const std::string & member, Expression * value, const SymTab::Indexer & indexer ) {
+			Expression * expr = makeOpAssign(
+				makeOpMember(
+					makeOpIndex(
+						object,
+						index
 					),
-					value
-				)
+					member
+				),
+				value
 			);
+
+			ResolvExpr::findVoidExpression( expr, indexer );
+
+			return new ExprStmt( noLabels, expr );
 		}
 
@@ -208,4 +211,19 @@
 			return new ConstantExpr( Constant::from_bool( ifnull ) );
 		}
+
+		VariableExpr * extractVariable( Expression * func ) {
+			if( VariableExpr * var = dynamic_cast< VariableExpr * >( func ) ) {
+				return var;
+			}
+
+			CastExpr * cast = strict_dynamic_cast< CastExpr * >( func );
+			return strict_dynamic_cast< VariableExpr * >( cast->arg );
+		}
+
+		Expression * detectIsDtor( Expression * func ) {
+			VariableExpr * typed_func = extractVariable( func );
+			bool is_dtor = InitTweak::isDestructor( typed_func->var );
+			return new ConstantExpr( Constant::from_bool( is_dtor ) );
+		}
 	};
 
@@ -216,5 +234,5 @@
 
 	void GenerateWaitForPass::premutate( FunctionDecl * decl) {
-		if( decl->name != "__accept_internal" ) return;
+		if( decl->name != "__waitfor_internal" ) return;
 
 		decl_waitfor = decl;
@@ -227,11 +245,8 @@
 			assert( !decl_acceptable );
 			decl_acceptable = decl;
-			for( Declaration * field : decl_acceptable->members ) {
-				     if( field->name == "func"    ) decl_m_func     = strict_dynamic_cast< DeclarationWithType * >( field );
-				else if( field->name == "count"   ) decl_m_count    = strict_dynamic_cast< DeclarationWithType * >( field );
-				else if( field->name == "monitor" ) decl_m_monitors = strict_dynamic_cast< DeclarationWithType * >( field );
-				else if( field->name == "is_dtor" ) decl_m_isdtor   = strict_dynamic_cast< DeclarationWithType * >( field );
-			}
-
+		}
+		else if( decl->name == "__waitfor_mask_t" ) {
+			assert( !decl_mask );
+			decl_mask = decl;
 		}
 		else if( decl->name == "monitor_desc" ) {
@@ -242,15 +257,15 @@
 
 	Statement * GenerateWaitForPass::postmutate( WaitForStmt * waitfor ) {
-		return waitfor;
-
-		if( !decl_monitor || !decl_acceptable ) throw SemanticError( "waitfor keyword requires monitors to be in scope, add #include <monitor>", waitfor );
+		if( !decl_monitor || !decl_acceptable || !decl_mask ) throw SemanticError( "waitfor keyword requires monitors to be in scope, add #include <monitor>", waitfor );
 
 		CompoundStmt * stmt = new CompoundStmt( noLabels );
 
 		ObjectDecl * acceptables = declare( waitfor->clauses.size(), stmt );
+		ObjectDecl * flag        = declareFlag( stmt );
+		Statement  * setter      = makeSetter( flag );
 
 		int index = 0;
 		for( auto & clause : waitfor->clauses ) {
-			init( acceptables, index, clause, stmt );
+			init( acceptables, index, clause, setter, stmt );
 
 			index++;
@@ -262,10 +277,19 @@
 			waitfor->orelse .statement,
 			waitfor->orelse .condition,
+			setter,
 			stmt
 		);
 
-		// Expression * result  = call( acceptables, timeout, orelse, stmt );
-
-		// choose( waitfor, result );
+		CompoundStmt * compound = new CompoundStmt( noLabels );
+		stmt->push_back( new IfStmt(
+			noLabels,
+			safeCond( new VariableExpr( flag ) ),
+			compound,
+			nullptr
+		));
+
+		Expression * result = call( waitfor->clauses.size(), acceptables, timeout, compound );
+
+		choose( waitfor, result, compound );
 
 		return stmt;
@@ -274,9 +298,6 @@
 	ObjectDecl * GenerateWaitForPass::declare( unsigned long count, CompoundStmt * stmt )
 	{
-		ObjectDecl * acceptables = new ObjectDecl(
+		ObjectDecl * acceptables = ObjectDecl::newObject(
 			namer_acc.newName(),
-			noStorage,
-			LinkageSpec::Cforall,
-			nullptr,
 			new ArrayType(
 				noQualifiers,
@@ -294,19 +315,61 @@
 		stmt->push_back( new DeclStmt( noLabels, acceptables) );
 
+		Expression * set = new UntypedExpr(
+			new NameExpr( "__builtin_memset" ),
+			{
+				new VariableExpr( acceptables ),
+				new ConstantExpr( Constant::from_int( 0 ) ),
+				new SizeofExpr( new VariableExpr( acceptables ) )
+			}
+		);
+
+		ResolvExpr::findVoidExpression( set, indexer );
+
+		stmt->push_back( new ExprStmt( noLabels, set ) );
+
 		return acceptables;
 	}
 
+	ObjectDecl * GenerateWaitForPass::declareFlag( CompoundStmt * stmt ) {
+		ObjectDecl * flag = ObjectDecl::newObject(
+			namer_flg.newName(),
+			new BasicType(
+				noQualifiers,
+				BasicType::Bool
+			),
+			new SingleInit( new ConstantExpr( Constant::from_ulong( 0 ) ) )
+		);
+
+		stmt->push_back( new DeclStmt( noLabels, flag) );
+
+		return flag;
+	}
+
+	Statement * GenerateWaitForPass::makeSetter( ObjectDecl * flag ) {
+		Expression * expr = new UntypedExpr(
+			new NameExpr( "?=?" ),
+			{
+				new VariableExpr( flag ),
+				new ConstantExpr( Constant::from_ulong( 1 ) )
+			}
+		);
+
+		ResolvExpr::findVoidExpression( expr, indexer );
+
+		return new ExprStmt( noLabels, expr );
+	}
+
 	ObjectDecl * GenerateWaitForPass::declMon( WaitForStmt::Clause & clause, CompoundStmt * stmt ) {
 
-		ObjectDecl * mon = new ObjectDecl(
+		ObjectDecl * mon = ObjectDecl::newObject(
 			namer_mon.newName(),
-			noStorage,
-			LinkageSpec::Cforall,
-			nullptr,
 			new ArrayType(
 				noQualifiers,
-				new StructInstType(
+				new PointerType(
 					noQualifiers,
-					decl_monitor
+					new StructInstType(
+						noQualifiers,
+						decl_monitor
+					)
 				),
 				new ConstantExpr( Constant::from_ulong( clause.target.arguments.size() ) ),
@@ -316,5 +379,20 @@
 			new ListInit(
 				map_range < std::list<Initializer*> > ( clause.target.arguments, [this](Expression * expr ){
-					return new SingleInit( expr );
+					Expression * init = new CastExpr(
+						new UntypedExpr(
+							new NameExpr( "get_monitor" ),
+							{ expr }
+						),
+						new PointerType(
+							noQualifiers,
+							new StructInstType(
+								noQualifiers,
+								decl_monitor
+							)
+						)
+					);
+
+					ResolvExpr::findSingleExpression( init, indexer );
+					return new SingleInit( init );
 				})
 			)
@@ -326,18 +404,20 @@
 	}
 
-	void GenerateWaitForPass::init( ObjectDecl * acceptables, int index, WaitForStmt::Clause & clause, CompoundStmt * stmt ) {
+	void GenerateWaitForPass::init( ObjectDecl * acceptables, int index, WaitForStmt::Clause & clause, Statement * setter, CompoundStmt * stmt ) {
 
 		ObjectDecl * monitors = declMon( clause, stmt );
 
-		CompoundStmt * compound = new CompoundStmt( noLabels );
-		compound->push_back( makeAccStatement( acceptables, index, decl_m_func    , clause.target.function ) );
-		compound->push_back( makeAccStatement( acceptables, index, decl_m_count   , new ConstantExpr( Constant::from_ulong( clause.target.arguments.size() ) ) ) );
-		compound->push_back( makeAccStatement( acceptables, index, decl_m_monitors, new VariableExpr( monitors ) ) );
-		compound->push_back( makeAccStatement( acceptables, index, decl_m_isdtor  , new ConstantExpr( Constant::from_bool( true ) ) ) );
+		Type * fptr_t = new PointerType( noQualifiers, new FunctionType( noQualifiers, true ) );
 
 		stmt->push_back( new IfStmt(
 			noLabels,
 			safeCond( clause.condition ),
-			compound,
+			new CompoundStmt({
+				makeAccStatement( acceptables, index, "is_dtor", detectIsDtor( clause.target.function )                                    , indexer ),
+				makeAccStatement( acceptables, index, "func"   , new CastExpr( clause.target.function, fptr_t )                            , indexer ),
+				makeAccStatement( acceptables, index, "list"   , new VariableExpr( monitors )                                              , indexer ),
+				makeAccStatement( acceptables, index, "size"   , new ConstantExpr( Constant::from_ulong( clause.target.arguments.size() ) ), indexer ),
+				setter->clone()
+			}),
 			nullptr
 		));
@@ -353,11 +433,9 @@
 		bool has_else,
 		Expression *& else_cond,
+		Statement * setter,
 		CompoundStmt * stmt
 	) {
-		ObjectDecl * timeout = new ObjectDecl(
+		ObjectDecl * timeout = ObjectDecl::newObject(
 			namer_tim.newName(),
-			noStorage,
-			LinkageSpec::Cforall,
-			nullptr,
 			new BasicType(
 				noQualifiers,
@@ -374,12 +452,15 @@
 			stmt->push_back( new IfStmt(
 				noLabels,
-				safeCond( else_cond ),
-				new ExprStmt(
-					noLabels,
-					makeOpAssign(
-						new VariableExpr( timeout ),
-						time
-					)
-				),
+				safeCond( time_cond ),
+				new CompoundStmt({
+					new ExprStmt(
+						noLabels,
+						makeOpAssign(
+							new VariableExpr( timeout ),
+							time
+						)
+					),
+					setter->clone()
+				}),
 				nullptr
 			));
@@ -392,11 +473,14 @@
 				noLabels,
 				safeCond( else_cond ),
-				new ExprStmt(
-					noLabels,
-					makeOpAssign(
-						new VariableExpr( timeout ),
-						new ConstantExpr( Constant::from_ulong( 0 ) )
-					)
-				),
+				new CompoundStmt({
+					new ExprStmt(
+						noLabels,
+						makeOpAssign(
+							new VariableExpr( timeout ),
+							new ConstantExpr( Constant::from_ulong( 0 ) )
+						)
+					),
+					setter->clone()
+				}),
 				nullptr
 			));
@@ -405,5 +489,130 @@
 		}
 
+		delete setter;
+
 		return new VariableExpr( timeout );
+	}
+
+	Expression * GenerateWaitForPass::call(
+		size_t count,
+		ObjectDecl * acceptables,
+		Expression * timeout,
+		CompoundStmt * stmt
+	) {
+		ObjectDecl * index = ObjectDecl::newObject(
+			namer_idx.newName(),
+			new BasicType(
+				noQualifiers,
+				BasicType::ShortSignedInt
+			),
+			new SingleInit(
+				new ConstantExpr( Constant::from_int( -1 ) )
+			)
+		);
+
+		stmt->push_back( new DeclStmt( noLabels, index ) );
+
+		ObjectDecl * mask = ObjectDecl::newObject(
+			namer_msk.newName(),
+			new StructInstType(
+				noQualifiers,
+				decl_mask
+			),
+			new ListInit({
+				new SingleInit( new AddressExpr( new VariableExpr( index ) ) ),
+				new SingleInit( new VariableExpr( acceptables ) ),
+				new SingleInit( new ConstantExpr( Constant::from_ulong( count ) ) )
+			})
+		);
+
+		stmt->push_back( new DeclStmt( noLabels, mask ) );
+
+		stmt->push_back( new ExprStmt(
+			noLabels,
+			new ApplicationExpr(
+				VariableExpr::functionPointer( decl_waitfor ),
+				{
+					new CastExpr(
+						new VariableExpr( mask ),
+						new ReferenceType(
+							noQualifiers,
+							new StructInstType(
+								noQualifiers,
+								decl_mask
+							)
+						)
+					),
+					timeout
+				}
+			)
+		));
+
+		return new VariableExpr( index );
+	}
+
+	void GenerateWaitForPass::choose(
+		WaitForStmt * waitfor,
+		Expression  * result,
+		CompoundStmt * stmt
+	) {
+		SwitchStmt * swtch = new SwitchStmt(
+			noLabels,
+			result,
+			std::list<Statement *>()
+		);
+
+		unsigned long i = 0;
+		for( auto & clause : waitfor->clauses ) {
+			swtch->statements.push_back(
+				new CaseStmt(
+					noLabels,
+					new ConstantExpr( Constant::from_ulong( i++ ) ),
+					{
+						clause.statement,
+						new BranchStmt(
+							noLabels,
+							"",
+							BranchStmt::Break
+						)
+					}
+				)
+			);
+		}
+
+		if(waitfor->timeout.statement) {
+			swtch->statements.push_back(
+				new CaseStmt(
+					noLabels,
+					new ConstantExpr( Constant::from_int( -2 ) ),
+					{
+						waitfor->timeout.statement,
+						new BranchStmt(
+							noLabels,
+							"",
+							BranchStmt::Break
+						)
+					}
+				)
+			);
+		}
+
+		if(waitfor->orelse.statement) {
+			swtch->statements.push_back(
+				new CaseStmt(
+					noLabels,
+					new ConstantExpr( Constant::from_int( -1 ) ),
+					{
+						waitfor->orelse.statement,
+						new BranchStmt(
+							noLabels,
+							"",
+							BranchStmt::Break
+						)
+					}
+				)
+			);
+		}
+
+		stmt->push_back( swtch );
 	}
 };
Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/GenPoly/Box.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -32,5 +32,4 @@
 #include "Common/UniqueName.h"           // for UniqueName
 #include "Common/utility.h"              // for toString
-#include "DeclMutator.h"                 // for DeclMutator
 #include "FindFunction.h"                // for findFunction, findAndReplace...
 #include "GenPoly/ErasableScopedMap.h"   // for ErasableScopedMap<>::const_i...
@@ -39,5 +38,4 @@
 #include "Lvalue.h"                      // for generalizedLvalue
 #include "Parser/LinkageSpec.h"          // for C, Spec, Cforall, Intrinsic
-#include "PolyMutator.h"                 // for PolyMutator
 #include "ResolvExpr/TypeEnvironment.h"  // for EqvClass
 #include "ResolvExpr/typeops.h"          // for typesCompatible
@@ -62,35 +60,37 @@
 		FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars );
 
+		class BoxPass {
+		protected:
+			BoxPass() : scopeTyVars( TypeDecl::Data{} ) {}
+			TyVarMap scopeTyVars;
+		};
+
 		/// Adds layout-generation functions to polymorphic types
-		class LayoutFunctionBuilder final : public DeclMutator {
-			unsigned int functionNesting;  // current level of nested functions
+		class LayoutFunctionBuilder final : public WithDeclsToAdd, public WithVisitorRef<LayoutFunctionBuilder>, public WithShortCircuiting {
+			unsigned int functionNesting = 0;  // current level of nested functions
 		public:
-			LayoutFunctionBuilder() : functionNesting( 0 ) {}
-
-			using DeclMutator::mutate;
-			virtual DeclarationWithType *mutate( FunctionDecl *functionDecl ) override;
-			virtual Declaration *mutate( StructDecl *structDecl ) override;
-			virtual Declaration *mutate( UnionDecl *unionDecl ) override;
+			void previsit( FunctionDecl *functionDecl );
+			void previsit( StructDecl *structDecl );
+			void previsit( UnionDecl *unionDecl );
 		};
 
 		/// Replaces polymorphic return types with out-parameters, replaces calls to polymorphic functions with adapter calls as needed, and adds appropriate type variables to the function call
-		class Pass1 final : public PolyMutator {
+		class Pass1 final : public BoxPass, public WithTypeSubstitution, public WithStmtsToAdd, public WithGuards, public WithVisitorRef<Pass1>, public WithShortCircuiting {
 		  public:
 			Pass1();
 
-			using PolyMutator::mutate;
-			virtual Expression *mutate( ApplicationExpr *appExpr ) override;
-			virtual Expression *mutate( AddressExpr *addrExpr ) override;
-			virtual Expression *mutate( UntypedExpr *expr ) override;
-			virtual DeclarationWithType* mutate( FunctionDecl *functionDecl ) override;
-			virtual TypeDecl *mutate( TypeDecl *typeDecl ) override;
-			virtual Expression *mutate( CommaExpr *commaExpr ) override;
-			virtual Expression *mutate( ConditionalExpr *condExpr ) override;
-			virtual Statement * mutate( ReturnStmt *returnStmt ) override;
-			virtual Type *mutate( PointerType *pointerType ) override;
-			virtual Type * mutate( FunctionType *functionType ) override;
-
-			virtual void doBeginScope() override;
-			virtual void doEndScope() override;
+			void premutate( FunctionDecl * functionDecl );
+			void premutate( TypeDecl * typeDecl );
+			void premutate( CommaExpr * commaExpr );
+			Expression * postmutate( ApplicationExpr * appExpr );
+			Expression * postmutate( UntypedExpr *expr );
+			void premutate( AddressExpr * addrExpr );
+			Expression * postmutate( AddressExpr * addrExpr );
+			void premutate( ReturnStmt * returnStmt );
+			void premutate( PointerType * pointerType );
+			void premutate( FunctionType * functionType );
+
+			void beginScope();
+			void endScope();
 		  private:
 			/// Pass the extra type parameters from polymorphic generic arguments or return types into a function application
@@ -129,22 +129,14 @@
 		/// * Moves polymorphic returns in function types to pointer-type parameters
 		/// * adds type size and assertion parameters to parameter lists
-		class Pass2 final : public PolyMutator {
-		  public:
-			template< typename DeclClass >
-			DeclClass *handleDecl( DeclClass *decl );
-			template< typename AggDecl >
-			AggDecl * handleAggDecl( AggDecl * aggDecl );
-
-			typedef PolyMutator Parent;
-			using Parent::mutate;
-			virtual DeclarationWithType *mutate( FunctionDecl *functionDecl ) override;
-			virtual ObjectDecl *mutate( ObjectDecl *objectDecl ) override;
-			virtual StructDecl *mutate( StructDecl *structDecl ) override;
-			virtual UnionDecl *mutate( UnionDecl *unionDecl ) override;
-			virtual TraitDecl *mutate( TraitDecl *unionDecl ) override;
-			virtual TypeDecl *mutate( TypeDecl *typeDecl ) override;
-			virtual TypedefDecl *mutate( TypedefDecl *typedefDecl ) override;
-			virtual Type *mutate( PointerType *pointerType ) override;
-			virtual Type *mutate( FunctionType *funcType ) override;
+		struct Pass2 final : public BoxPass, public WithGuards {
+			void handleAggDecl();
+
+			DeclarationWithType * postmutate( FunctionDecl *functionDecl );
+			void premutate( StructDecl *structDecl );
+			void premutate( UnionDecl *unionDecl );
+			void premutate( TraitDecl *unionDecl );
+			void premutate( TypeDecl *typeDecl );
+			void premutate( PointerType *pointerType );
+			void premutate( FunctionType *funcType );
 
 		  private:
@@ -158,5 +150,5 @@
 		/// * Calculates polymorphic offsetof expressions from offset array
 		/// * Inserts dynamic calculation of polymorphic type layouts where needed
-		class PolyGenericCalculator final : public WithGuards, public WithVisitorRef<PolyGenericCalculator>, public WithStmtsToAdd, public WithDeclsToAdd, public WithTypeSubstitution {
+		class PolyGenericCalculator final : public BoxPass, public WithGuards, public WithVisitorRef<PolyGenericCalculator>, public WithStmtsToAdd, public WithDeclsToAdd, public WithTypeSubstitution {
 		public:
 			PolyGenericCalculator();
@@ -197,23 +189,19 @@
 			ScopedSet< std::string > knownOffsets;          ///< Set of non-generic types for which the offset array exists in the current scope, indexed by offsetofName
 			UniqueName bufNamer;                           ///< Namer for VLA buffers
-			TyVarMap scopeTyVars;
 		};
 
 		/// Replaces initialization of polymorphic values with alloca, declaration of dtype/ftype with appropriate void expression, sizeof expressions of polymorphic types with the proper variable, and strips fields from generic struct declarations.
-		class Pass3 final : public PolyMutator {
-		  public:
+		struct Pass3 final : public BoxPass, public WithGuards {
 			template< typename DeclClass >
-			DeclClass *handleDecl( DeclClass *decl, Type *type );
-
-			using PolyMutator::mutate;
-			virtual DeclarationWithType *mutate( FunctionDecl *functionDecl ) override;
-			virtual Declaration *mutate( StructDecl *structDecl ) override;
-			virtual Declaration *mutate( UnionDecl *unionDecl ) override;
-			virtual ObjectDecl *mutate( ObjectDecl *objectDecl ) override;
-			virtual TypedefDecl *mutate( TypedefDecl *objectDecl ) override;
-			virtual TypeDecl *mutate( TypeDecl *objectDecl ) override;
-			virtual Type *mutate( PointerType *pointerType ) override;
-			virtual Type *mutate( FunctionType *funcType ) override;
-		  private:
+			void handleDecl( DeclClass * decl, Type * type );
+
+			void premutate( ObjectDecl * objectDecl );
+			void premutate( FunctionDecl * functionDecl );
+			void premutate( TypedefDecl * typedefDecl );
+			void premutate( StructDecl * structDecl );
+			void premutate( UnionDecl * unionDecl );
+			void premutate( TypeDecl * typeDecl );
+			void premutate( PointerType * pointerType );
+			void premutate( FunctionType * funcType );
 		};
 	} // anonymous namespace
@@ -247,25 +235,25 @@
 
 	void box( std::list< Declaration *>& translationUnit ) {
-		LayoutFunctionBuilder layoutBuilder;
-		Pass1 pass1;
-		Pass2 pass2;
+		PassVisitor<LayoutFunctionBuilder> layoutBuilder;
+		PassVisitor<Pass1> pass1;
+		PassVisitor<Pass2> pass2;
 		PassVisitor<PolyGenericCalculator> polyCalculator;
-		Pass3 pass3;
-
-		layoutBuilder.mutateDeclarationList( translationUnit );
-		mutateTranslationUnit/*All*/( translationUnit, pass1 );
-		mutateTranslationUnit/*All*/( translationUnit, pass2 );
+		PassVisitor<Pass3> pass3;
+
+		acceptAll( translationUnit, layoutBuilder );
+		mutateAll( translationUnit, pass1 );
+		mutateAll( translationUnit, pass2 );
 		mutateAll( translationUnit, polyCalculator );
-		mutateTranslationUnit/*All*/( translationUnit, pass3 );
+		mutateAll( translationUnit, pass3 );
 	}
 
 	////////////////////////////////// LayoutFunctionBuilder ////////////////////////////////////////////
 
-	DeclarationWithType *LayoutFunctionBuilder::mutate( FunctionDecl *functionDecl ) {
-		functionDecl->set_functionType( maybeMutate( functionDecl->get_functionType(), *this ) );
+	void LayoutFunctionBuilder::previsit( FunctionDecl *functionDecl ) {
+		visit_children = false;
+		maybeAccept( functionDecl->get_functionType(), *visitor );
 		++functionNesting;
-		functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );
+		maybeAccept( functionDecl->get_statements(), *visitor );
 		--functionNesting;
-		return functionDecl;
 	}
 
@@ -356,11 +344,12 @@
 	}
 
-	Declaration *LayoutFunctionBuilder::mutate( StructDecl *structDecl ) {
+	void LayoutFunctionBuilder::previsit( StructDecl *structDecl ) {
 		// do not generate layout function for "empty" tag structs
-		if ( structDecl->get_members().empty() ) return structDecl;
+		visit_children = false;
+		if ( structDecl->get_members().empty() ) return;
 
 		// get parameters that can change layout, exiting early if none
 		std::list< TypeDecl* > otypeParams = takeOtypeOnly( structDecl->get_parameters() );
-		if ( otypeParams.empty() ) return structDecl;
+		if ( otypeParams.empty() ) return;
 
 		// build layout function signature
@@ -413,15 +402,15 @@
 		addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) );
 
-		addDeclarationAfter( layoutDecl );
-		return structDecl;
+		declsToAddAfter.push_back( layoutDecl );
 	}
 
-	Declaration *LayoutFunctionBuilder::mutate( UnionDecl *unionDecl ) {
+	void LayoutFunctionBuilder::previsit( UnionDecl *unionDecl ) {
 		// do not generate layout function for "empty" tag unions
-		if ( unionDecl->get_members().empty() ) return unionDecl;
+		visit_children = false;
+		if ( unionDecl->get_members().empty() ) return;
 
 		// get parameters that can change layout, exiting early if none
 		std::list< TypeDecl* > otypeParams = takeOtypeOnly( unionDecl->get_parameters() );
-		if ( otypeParams.empty() ) return unionDecl;
+		if ( otypeParams.empty() ) return;
 
 		// build layout function signature
@@ -456,6 +445,5 @@
 		addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) );
 
-		addDeclarationAfter( layoutDecl );
-		return unionDecl;
+		declsToAddAfter.push_back( layoutDecl );
 	}
 
@@ -501,31 +489,29 @@
 		Pass1::Pass1() : tempNamer( "_temp" ) {}
 
-		DeclarationWithType *Pass1::mutate( FunctionDecl *functionDecl ) {
+		void Pass1::premutate( FunctionDecl *functionDecl ) {
 			if ( functionDecl->get_statements() ) {		// empty routine body ?
 				// std::cerr << "mutating function: " << functionDecl->get_mangleName() << std::endl;
-				doBeginScope();
-				scopeTyVars.beginScope();
-
-				DeclarationWithType *oldRetval = retval;
+				GuardScope( scopeTyVars );
+				GuardValue( retval );
 
 				// process polymorphic return value
 				retval = nullptr;
-				if ( isDynRet( functionDecl->get_functionType() ) && functionDecl->get_linkage() != LinkageSpec::C ) {
-					retval = functionDecl->get_functionType()->get_returnVals().front();
+				FunctionType *functionType = functionDecl->type;
+				if ( isDynRet( functionType ) && functionDecl->linkage != LinkageSpec::C ) {
+					retval = functionType->returnVals.front();
 
 					// give names to unnamed return values
-					if ( retval->get_name() == "" ) {
-						retval->set_name( "_retparm" );
-						retval->set_linkage( LinkageSpec::C );
+					if ( retval->name == "" ) {
+						retval->name = "_retparm";
+						retval->linkage = LinkageSpec::C;
 					} // if
 				} // if
 
-				FunctionType *functionType = functionDecl->get_functionType();
-				makeTyVarMap( functionDecl->get_functionType(), scopeTyVars );
-
-				std::list< DeclarationWithType *> &paramList = functionType->get_parameters();
+				makeTyVarMap( functionType, scopeTyVars );
+
+				std::list< DeclarationWithType *> &paramList = functionType->parameters;
 				std::list< FunctionType *> functions;
-				for ( Type::ForallList::iterator tyVar = functionType->get_forall().begin(); tyVar != functionType->get_forall().end(); ++tyVar ) {
-					for ( std::list< DeclarationWithType *>::iterator assert = (*tyVar)->get_assertions().begin(); assert != (*tyVar)->get_assertions().end(); ++assert ) {
+				for ( Type::ForallList::iterator tyVar = functionType->forall.begin(); tyVar != functionType->forall.end(); ++tyVar ) {
+					for ( std::list< DeclarationWithType *>::iterator assert = (*tyVar)->assertions.begin(); assert != (*tyVar)->assertions.end(); ++assert ) {
 						findFunction( (*assert)->get_type(), functions, scopeTyVars, needsAdapter );
 					} // for
@@ -542,21 +528,13 @@
 					} // if
 				} // for
-
-				functionDecl->set_statements( functionDecl->get_statements()->acceptMutator( *this ) );
-
-				scopeTyVars.endScope();
-				retval = oldRetval;
-				doEndScope();
 				// std::cerr << "end function: " << functionDecl->get_mangleName() << std::endl;
 			} // if
-			return functionDecl;
-		}
-
-		TypeDecl *Pass1::mutate( TypeDecl *typeDecl ) {
+		}
+
+		void Pass1::premutate( TypeDecl *typeDecl ) {
 			addToTyVarMap( typeDecl, scopeTyVars );
-			return dynamic_cast<TypeDecl*>( Mutator::mutate( typeDecl ) );
-		}
-
-		Expression *Pass1::mutate( CommaExpr *commaExpr ) {
+		}
+
+		void Pass1::premutate( CommaExpr *commaExpr ) {
 			// Attempting to find application expressions that were mutated by the copy constructor passes
 			// to use an explicit return variable, so that the variable can be reused as a parameter to the
@@ -574,16 +552,4 @@
 				}
 			}
-
-			commaExpr->set_arg1( maybeMutate( commaExpr->get_arg1(), *this ) );
-			commaExpr->set_arg2( maybeMutate( commaExpr->get_arg2(), *this ) );
-			return commaExpr;
-		}
-
-		Expression *Pass1::mutate( ConditionalExpr *condExpr ) {
-			condExpr->set_arg1( maybeMutate( condExpr->get_arg1(), *this ) );
-			condExpr->set_arg2( maybeMutate( condExpr->get_arg2(), *this ) );
-			condExpr->set_arg3( maybeMutate( condExpr->get_arg3(), *this ) );
-			return condExpr;
-
 		}
 
@@ -634,5 +600,5 @@
 
 			// add size/align for generic types to parameter list
-			if ( ! appExpr->get_function()->has_result() ) return;
+			if ( ! appExpr->get_function()->result ) return;
 			FunctionType *funcType = getFunctionType( appExpr->get_function()->get_result() );
 			assert( funcType );
@@ -659,5 +625,5 @@
 		ObjectDecl *Pass1::makeTemporary( Type *type ) {
 			ObjectDecl *newObj = new ObjectDecl( tempNamer.newName(), Type::StorageClasses(), LinkageSpec::C, 0, type, 0 );
-			stmtsToAdd.push_back( new DeclStmt( noLabels, newObj ) );
+			stmtsToAddBefore.push_back( new DeclStmt( noLabels, newObj ) );
 			return newObj;
 		}
@@ -748,39 +714,53 @@
 
 		void Pass1::boxParam( Type *param, Expression *&arg, const TyVarMap &exprTyVars ) {
-			assertf( arg->has_result(), "arg does not have result: %s", toString( arg ).c_str() );
-			if ( isPolyType( param, exprTyVars ) ) {
-				Type * newType = arg->get_result()->clone();
+			assertf( arg->result, "arg does not have result: %s", toString( arg ).c_str() );
+			if ( ! needsBoxing( param, arg->result, exprTyVars, env ) ) return;
+
+			if ( arg->result->get_lvalue() ) {
+				// argument expression may be CFA lvalue, but not C lvalue -- apply generalizedLvalue transformations.
+				// if ( VariableExpr * varExpr = dynamic_cast< VariableExpr * >( arg ) ) {
+				// 	if ( dynamic_cast<ArrayType *>( varExpr->var->get_type() ) ){
+				// 		// temporary hack - don't box arrays, because &arr is not the same as &arr[0]
+				// 		return;
+				// 	}
+				// }
+				arg =  generalizedLvalue( new AddressExpr( arg ) );
+				if ( ! ResolvExpr::typesCompatible( param, arg->get_result(), SymTab::Indexer() ) ) {
+					// silence warnings by casting boxed parameters when the actual type does not match up with the formal type.
+					arg = new CastExpr( arg, param->clone() );
+				}
+			} else {
+				// use type computed in unification to declare boxed variables
+				Type * newType = param->clone();
 				if ( env ) env->apply( newType );
-				std::unique_ptr<Type> manager( newType );
-				if ( isPolyType( newType ) ) {
-					// if the argument's type is polymorphic, we don't need to box again!
-					return;
-				} else if ( arg->get_result()->get_lvalue() ) {
-					// argument expression may be CFA lvalue, but not C lvalue -- apply generalizedLvalue transformations.
-					// if ( VariableExpr * varExpr = dynamic_cast< VariableExpr * >( arg ) ) {
-					// 	if ( dynamic_cast<ArrayType *>( varExpr->var->get_type() ) ){
-					// 		// temporary hack - don't box arrays, because &arr is not the same as &arr[0]
-					// 		return;
-					// 	}
-					// }
-					arg =  generalizedLvalue( new AddressExpr( arg ) );
-					if ( ! ResolvExpr::typesCompatible( param, arg->get_result(), SymTab::Indexer() ) ) {
-						// silence warnings by casting boxed parameters when the actual type does not match up with the formal type.
-						arg = new CastExpr( arg, param->clone() );
-					}
-				} else {
-					// use type computed in unification to declare boxed variables
-					Type * newType = param->clone();
-					if ( env ) env->apply( newType );
-					ObjectDecl *newObj = new ObjectDecl( tempNamer.newName(), Type::StorageClasses(), LinkageSpec::C, 0, newType, 0 );
-					newObj->get_type()->get_qualifiers() = Type::Qualifiers(); // TODO: is this right???
-					stmtsToAdd.push_back( new DeclStmt( noLabels, newObj ) );
-					UntypedExpr *assign = new UntypedExpr( new NameExpr( "?=?" ) ); // TODO: why doesn't this just use initialization syntax?
-					assign->get_args().push_back( new VariableExpr( newObj ) );
-					assign->get_args().push_back( arg );
-					stmtsToAdd.push_back( new ExprStmt( noLabels, assign ) );
-					arg = new AddressExpr( new VariableExpr( newObj ) );
-				} // if
+				ObjectDecl *newObj = ObjectDecl::newObject( tempNamer.newName(), newType, nullptr );
+				newObj->get_type()->get_qualifiers() = Type::Qualifiers(); // TODO: is this right???
+				stmtsToAddBefore.push_back( new DeclStmt( noLabels, newObj ) );
+				UntypedExpr *assign = new UntypedExpr( new NameExpr( "?=?" ) ); // TODO: why doesn't this just use initialization syntax?
+				assign->get_args().push_back( new VariableExpr( newObj ) );
+				assign->get_args().push_back( arg );
+				stmtsToAddBefore.push_back( new ExprStmt( noLabels, assign ) );
+				arg = new AddressExpr( new VariableExpr( newObj ) );
 			} // if
+		}
+
+		// find instances of polymorphic type parameters
+		struct PolyFinder {
+			const TyVarMap * tyVars = nullptr;
+			bool found = false;
+
+			void previsit( TypeInstType * t ) {
+				if ( isPolyType( t, *tyVars ) ) {
+					found = true;
+				}
+			}
+		};
+
+		// true if there is an instance of a polymorphic type parameter in t
+		bool hasPolymorphism( Type * t, const TyVarMap &tyVars ) {
+			PassVisitor<PolyFinder> finder;
+			finder.pass.tyVars = &tyVars;
+			maybeAccept( t, finder );
+			return finder.pass.found;
 		}
 
@@ -789,5 +769,7 @@
 		/// this gets rid of warnings from gcc.
 		void addCast( Expression *&actual, Type *formal, const TyVarMap &tyVars ) {
-			if ( getFunctionType( formal ) ) {
+			// type contains polymorphism, but isn't exactly a polytype, in which case it
+			// has some real actual type (e.g. unsigned int) and casting to void * is wrong
+			if ( hasPolymorphism( formal, tyVars ) && ! isPolyType( formal, tyVars ) ) {
 				Type * newType = formal->clone();
 				newType = ScrubTyVars::scrub( newType, tyVars );
@@ -797,6 +779,6 @@
 
 		void Pass1::boxParams( ApplicationExpr *appExpr, FunctionType *function, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars ) {
-			for ( std::list< DeclarationWithType *>::const_iterator param = function->get_parameters().begin(); param != function->get_parameters().end(); ++param, ++arg ) {
-				assertf( arg != appExpr->get_args().end(), "boxParams: missing argument for param %s to %s in %s", toString( *param ).c_str(), toString( function ).c_str(), toString( appExpr ).c_str() );
+			for ( std::list< DeclarationWithType *>::const_iterator param = function->get_parameters().begin(); param != function->parameters.end(); ++param, ++arg ) {
+				assertf( arg != appExpr->args.end(), "boxParams: missing argument for param %s to %s in %s", toString( *param ).c_str(), toString( function ).c_str(), toString( appExpr ).c_str() );
 				addCast( *arg, (*param)->get_type(), exprTyVars );
 				boxParam( (*param)->get_type(), *arg, exprTyVars );
@@ -807,10 +789,7 @@
 			std::list< Expression *>::iterator cur = arg;
 			for ( Type::ForallList::iterator tyVar = functionType->get_forall().begin(); tyVar != functionType->get_forall().end(); ++tyVar ) {
-				for ( std::list< DeclarationWithType *>::iterator assert = (*tyVar)->get_assertions().begin(); assert != (*tyVar)->get_assertions().end(); ++assert ) {
+				for ( std::list< DeclarationWithType *>::iterator assert = (*tyVar)->assertions.begin(); assert != (*tyVar)->assertions.end(); ++assert ) {
 					InferredParams::const_iterator inferParam = appExpr->get_inferParams().find( (*assert)->get_uniqueId() );
-					if ( inferParam == appExpr->get_inferParams().end() ) {
-						std::cerr << "looking for assertion: " << (*assert) << std::endl << appExpr << std::endl;
-					}
-					assertf( inferParam != appExpr->get_inferParams().end(), "NOTE: Explicit casts of polymorphic functions to compatible monomorphic functions are currently unsupported" );
+					assertf( inferParam != appExpr->get_inferParams().end(), "addInferredParams missing inferred parameter: %s in: %s", toString( *assert ).c_str(), toString( appExpr ).c_str() );
 					Expression *newExpr = inferParam->second.expr->clone();
 					addCast( newExpr, (*assert)->get_type(), tyVars );
@@ -822,5 +801,5 @@
 
 		void makeRetParm( FunctionType *funcType ) {
-			DeclarationWithType *retParm = funcType->get_returnVals().front();
+			DeclarationWithType *retParm = funcType->returnVals.front();
 
 			// make a new parameter that is a pointer to the type of the old return value
@@ -835,5 +814,4 @@
 			// actually make the adapter type
 			FunctionType *adapter = adaptee->clone();
-//			if ( ! adapter->get_returnVals().empty() && isPolyType( adapter->get_returnVals().front()->get_type(), tyVars ) ) {
 			if ( isDynRet( adapter, tyVars ) ) {
 				makeRetParm( adapter );
@@ -961,5 +939,5 @@
 						std::pair< AdapterIter, bool > answer = adapters.insert( std::pair< std::string, DeclarationWithType *>( mangleName, newAdapter ) );
 						adapter = answer.first;
-						stmtsToAdd.push_back( new DeclStmt( noLabels, newAdapter ) );
+						stmtsToAddBefore.push_back( new DeclStmt( noLabels, newAdapter ) );
 					} // if
 					assert( adapter != adapters.end() );
@@ -999,5 +977,5 @@
 				if ( varExpr->get_var()->get_linkage() == LinkageSpec::Intrinsic ) {
 					if ( varExpr->get_var()->get_name() == "?[?]" ) {
-						assert( appExpr->has_result() );
+						assert( appExpr->result );
 						assert( appExpr->get_args().size() == 2 );
 						Type *baseType1 = isPolyPtr( appExpr->get_args().front()->get_result(), scopeTyVars, env );
@@ -1033,5 +1011,5 @@
 						} // if
 					} else if ( varExpr->get_var()->get_name() == "*?" ) {
-						assert( appExpr->has_result() );
+						assert( appExpr->result );
 						assert( ! appExpr->get_args().empty() );
 						if ( isPolyType( appExpr->get_result(), scopeTyVars, env ) ) {
@@ -1050,5 +1028,5 @@
 						} // if
 					} else if ( varExpr->get_var()->get_name() == "?++" || varExpr->get_var()->get_name() == "?--" ) {
-						assert( appExpr->has_result() );
+						assert( appExpr->result );
 						assert( appExpr->get_args().size() == 1 );
 						if ( Type *baseType = isPolyPtr( appExpr->get_result(), scopeTyVars, env ) ) {
@@ -1070,5 +1048,5 @@
 						} // if
 					} else if ( varExpr->get_var()->get_name() == "++?" || varExpr->get_var()->get_name() == "--?" ) {
-						assert( appExpr->has_result() );
+						assert( appExpr->result );
 						assert( appExpr->get_args().size() == 1 );
 						if ( Type *baseType = isPolyPtr( appExpr->get_result(), scopeTyVars, env ) ) {
@@ -1076,5 +1054,5 @@
 						} // if
 					} else if ( varExpr->get_var()->get_name() == "?+?" || varExpr->get_var()->get_name() == "?-?" ) {
-						assert( appExpr->has_result() );
+						assert( appExpr->result );
 						assert( appExpr->get_args().size() == 2 );
 						Type *baseType1 = isPolyPtr( appExpr->get_args().front()->get_result(), scopeTyVars, env );
@@ -1102,5 +1080,5 @@
 						} // if
 					} else if ( varExpr->get_var()->get_name() == "?+=?" || varExpr->get_var()->get_name() == "?-=?" ) {
-						assert( appExpr->has_result() );
+						assert( appExpr->result );
 						assert( appExpr->get_args().size() == 2 );
 						Type *baseType = isPolyPtr( appExpr->get_result(), scopeTyVars, env );
@@ -1118,5 +1096,5 @@
 		}
 
-		Expression *Pass1::mutate( ApplicationExpr *appExpr ) {
+		Expression *Pass1::postmutate( ApplicationExpr *appExpr ) {
 			// std::cerr << "mutate appExpr: " << InitTweak::getFunctionName( appExpr ) << std::endl;
 			// for ( TyVarMap::iterator i = scopeTyVars.begin(); i != scopeTyVars.end(); ++i ) {
@@ -1124,10 +1102,8 @@
 			// }
 			// std::cerr << "\n";
-			appExpr->get_function()->acceptMutator( *this );
-			mutateAll( appExpr->get_args(), *this );
-
-			assert( appExpr->get_function()->has_result() );
-			FunctionType * function = getFunctionType( appExpr->get_function()->get_result() );
-			assertf( function, "ApplicationExpr has non-function type: %s", toString( appExpr->get_function()->get_result() ).c_str() );
+
+			assert( appExpr->function->result );
+			FunctionType * function = getFunctionType( appExpr->function->result );
+			assertf( function, "ApplicationExpr has non-function type: %s", toString( appExpr->function->result ).c_str() );
 
 			if ( Expression *newExpr = handleIntrinsics( appExpr ) ) {
@@ -1182,28 +1158,29 @@
 		}
 
-		Expression *Pass1::mutate( UntypedExpr *expr ) {
-			if ( expr->has_result() && isPolyType( expr->get_result(), scopeTyVars, env ) ) {
-				if ( NameExpr *name = dynamic_cast< NameExpr *>( expr->get_function() ) ) {
+		Expression * Pass1::postmutate( UntypedExpr *expr ) {
+			if ( expr->result && isPolyType( expr->result, scopeTyVars, env ) ) {
+				if ( NameExpr *name = dynamic_cast< NameExpr *>( expr->function ) ) {
 					if ( name->get_name() == "*?" ) {
-						Expression *ret = expr->get_args().front();
-						expr->get_args().clear();
+						Expression *ret = expr->args.front();
+						expr->args.clear();
 						delete expr;
-						return ret->acceptMutator( *this );
+						return ret;
 					} // if
 				} // if
 			} // if
-			return PolyMutator::mutate( expr );
-		}
-
-		Expression *Pass1::mutate( AddressExpr *addrExpr ) {
-			assert( addrExpr->get_arg()->has_result() && ! addrExpr->get_arg()->get_result()->isVoid() );
+			return expr;
+		}
+
+		void Pass1::premutate( AddressExpr * ) { visit_children = false; }
+		Expression * Pass1::postmutate( AddressExpr * addrExpr ) {
+			assert( addrExpr->get_arg()->result && ! addrExpr->get_arg()->get_result()->isVoid() );
 
 			bool needs = false;
 			if ( UntypedExpr *expr = dynamic_cast< UntypedExpr *>( addrExpr->get_arg() ) ) {
-				if ( expr->has_result() && isPolyType( expr->get_result(), scopeTyVars, env ) ) {
+				if ( expr->result && isPolyType( expr->get_result(), scopeTyVars, env ) ) {
 					if ( NameExpr *name = dynamic_cast< NameExpr *>( expr->get_function() ) ) {
 						if ( name->get_name() == "*?" ) {
 							if ( ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( expr->get_args().front() ) ) {
-								assert( appExpr->get_function()->has_result() );
+								assert( appExpr->get_function()->result );
 								FunctionType *function = getFunctionType( appExpr->get_function()->get_result() );
 								assert( function );
@@ -1216,5 +1193,5 @@
 			// isPolyType check needs to happen before mutating addrExpr arg, so pull it forward
 			// out of the if condition.
-			addrExpr->set_arg( mutateExpression( addrExpr->get_arg() ) );
+			addrExpr->arg = addrExpr->get_arg()->acceptMutator( *visitor );
 			// ... but must happen after mutate, since argument might change (e.g. intrinsic *?, ?[?]) - re-evaluate above comment
 			bool polytype = isPolyType( addrExpr->get_arg()->get_result(), scopeTyVars, env );
@@ -1231,40 +1208,27 @@
 		}
 
-		Statement * Pass1::mutate( ReturnStmt *returnStmt ) {
-			if ( retval && returnStmt->get_expr() ) {
-				assert( returnStmt->get_expr()->has_result() && ! returnStmt->get_expr()->get_result()->isVoid() );
-				delete returnStmt->get_expr();
-				returnStmt->set_expr( 0 );
-			} else {
-				returnStmt->set_expr( mutateExpression( returnStmt->get_expr() ) );
+		void Pass1::premutate( ReturnStmt *returnStmt ) {
+			if ( retval && returnStmt->expr ) {
+				assert( returnStmt->expr->result && ! returnStmt->expr->result->isVoid() );
+				delete returnStmt->expr;
+				returnStmt->expr = nullptr;
 			} // if
-			return returnStmt;
-		}
-
-		Type * Pass1::mutate( PointerType *pointerType ) {
-			scopeTyVars.beginScope();
+		}
+
+		void Pass1::premutate( PointerType *pointerType ) {
+			GuardScope( scopeTyVars );
 			makeTyVarMap( pointerType, scopeTyVars );
-
-			Type *ret = Mutator::mutate( pointerType );
-
-			scopeTyVars.endScope();
-			return ret;
-		}
-
-		Type * Pass1::mutate( FunctionType *functionType ) {
-			scopeTyVars.beginScope();
+		}
+
+		void Pass1::premutate( FunctionType *functionType ) {
+			GuardScope( scopeTyVars );
 			makeTyVarMap( functionType, scopeTyVars );
-
-			Type *ret = Mutator::mutate( functionType );
-
-			scopeTyVars.endScope();
-			return ret;
-		}
-
-		void Pass1::doBeginScope() {
+		}
+
+		void Pass1::beginScope() {
 			adapters.beginScope();
 		}
 
-		void Pass1::doEndScope() {
+		void Pass1::endScope() {
 			adapters.endScope();
 		}
@@ -1293,13 +1257,5 @@
 		}
 
-		template< typename DeclClass >
-		DeclClass * Pass2::handleDecl( DeclClass *decl ) {
-			DeclClass *ret = static_cast< DeclClass *>( Parent::mutate( decl ) );
-
-			return ret;
-		}
-
-		DeclarationWithType * Pass2::mutate( FunctionDecl *functionDecl ) {
-			functionDecl = strict_dynamic_cast< FunctionDecl * > ( handleDecl( functionDecl ) );
+		DeclarationWithType * Pass2::postmutate( FunctionDecl *functionDecl ) {
 			FunctionType * ftype = functionDecl->get_functionType();
 			if ( ! ftype->get_returnVals().empty() && functionDecl->get_statements() ) {
@@ -1325,55 +1281,30 @@
 		}
 
-		ObjectDecl * Pass2::mutate( ObjectDecl *objectDecl ) {
-			return handleDecl( objectDecl );
-		}
-
-		template< typename AggDecl >
-		AggDecl * Pass2::handleAggDecl( AggDecl * aggDecl ) {
+		void Pass2::premutate( StructDecl * ) {
 			// prevent tyVars from leaking into containing scope
-			scopeTyVars.beginScope();
-			Parent::mutate( aggDecl );
-			scopeTyVars.endScope();
-			return aggDecl;
-		}
-
-		StructDecl * Pass2::mutate( StructDecl *aggDecl ) {
-			return handleAggDecl( aggDecl );
-		}
-
-		UnionDecl * Pass2::mutate( UnionDecl *aggDecl ) {
-			return handleAggDecl( aggDecl );
-		}
-
-		TraitDecl * Pass2::mutate( TraitDecl *aggDecl ) {
-			return handleAggDecl( aggDecl );
-		}
-
-		TypeDecl * Pass2::mutate( TypeDecl *typeDecl ) {
+			GuardScope( scopeTyVars );
+		}
+
+		void Pass2::premutate( UnionDecl * ) {
+			// prevent tyVars from leaking into containing scope
+			GuardScope( scopeTyVars );
+		}
+
+		void Pass2::premutate( TraitDecl * ) {
+			// prevent tyVars from leaking into containing scope
+			GuardScope( scopeTyVars );
+		}
+
+		void Pass2::premutate( TypeDecl *typeDecl ) {
 			addToTyVarMap( typeDecl, scopeTyVars );
-			if ( typeDecl->get_base() ) {
-				return handleDecl( typeDecl );
-			} else {
-				return dynamic_cast<TypeDecl*>( Parent::mutate( typeDecl ) );
-			}
-		}
-
-		TypedefDecl * Pass2::mutate( TypedefDecl *typedefDecl ) {
-			return handleDecl( typedefDecl );
-		}
-
-		Type * Pass2::mutate( PointerType *pointerType ) {
-			scopeTyVars.beginScope();
+		}
+
+		void Pass2::premutate( PointerType *pointerType ) {
+			GuardScope( scopeTyVars );
 			makeTyVarMap( pointerType, scopeTyVars );
-
-			Type *ret = Parent::mutate( pointerType );
-
-			scopeTyVars.endScope();
-			return ret;
-		}
-
-		Type *Pass2::mutate( FunctionType *funcType ) {
-			scopeTyVars.beginScope();
-
+		}
+
+		void Pass2::premutate( FunctionType *funcType ) {
+			GuardScope( scopeTyVars );
 			makeTyVarMap( funcType, scopeTyVars );
 
@@ -1414,5 +1345,4 @@
 				// move all assertions into parameter list
 				for ( std::list< DeclarationWithType *>::iterator assert = (*tyParm)->get_assertions().begin(); assert != (*tyParm)->get_assertions().end(); ++assert ) {
-//      *assert = (*assert)->acceptMutator( *this );
 					// assertion parameters may not be used in body, pass along with unused attribute.
 					(*assert)->get_attributes().push_back( new Attribute( "unused" ) );
@@ -1450,5 +1380,4 @@
 						}
 					}
-
 					seenTypes.insert( typeName );
 				}
@@ -1458,9 +1387,4 @@
 			funcType->get_parameters().splice( last, inferredParams );
 			addAdapters( funcType );
-			mutateAll( funcType->get_returnVals(), *this );
-			mutateAll( funcType->get_parameters(), *this );
-
-			scopeTyVars.endScope();
-			return funcType;
 		}
 
@@ -1468,5 +1392,5 @@
 
 		PolyGenericCalculator::PolyGenericCalculator()
-			: knownLayouts(), knownOffsets(), bufNamer( "_buf" ), scopeTyVars( TypeDecl::Data{} ) {}
+			: knownLayouts(), knownOffsets(), bufNamer( "_buf" ) {}
 
 		void PolyGenericCalculator::beginTypeScope( Type *ty ) {
@@ -1829,74 +1753,47 @@
 
 		template< typename DeclClass >
-		DeclClass * Pass3::handleDecl( DeclClass *decl, Type *type ) {
-			scopeTyVars.beginScope();
+		void Pass3::handleDecl( DeclClass * decl, Type * type ) {
+			GuardScope( scopeTyVars );
 			makeTyVarMap( type, scopeTyVars );
-
-			DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) );
-			// ScrubTyVars::scrub( decl, scopeTyVars );
 			ScrubTyVars::scrubAll( decl );
-
-			scopeTyVars.endScope();
-			return ret;
-		}
-
-		ObjectDecl * Pass3::mutate( ObjectDecl *objectDecl ) {
-			return handleDecl( objectDecl, objectDecl->get_type() );
-		}
-
-		DeclarationWithType * Pass3::mutate( FunctionDecl *functionDecl ) {
-			return handleDecl( functionDecl, functionDecl->get_functionType() );
-		}
-
-		TypedefDecl * Pass3::mutate( TypedefDecl *typedefDecl ) {
-			return handleDecl( typedefDecl, typedefDecl->get_base() );
+		}
+
+		void Pass3::premutate( ObjectDecl * objectDecl ) {
+			handleDecl( objectDecl, objectDecl->type );
+		}
+
+		void Pass3::premutate( FunctionDecl * functionDecl ) {
+			handleDecl( functionDecl, functionDecl->type );
+		}
+
+		void Pass3::premutate( TypedefDecl * typedefDecl ) {
+			handleDecl( typedefDecl, typedefDecl->base );
 		}
 
 		/// Strips the members from a generic aggregate
-		void stripGenericMembers(AggregateDecl* decl) {
-			if ( ! decl->get_parameters().empty() ) decl->get_members().clear();
-		}
-
-		Declaration *Pass3::mutate( StructDecl *structDecl ) {
+		void stripGenericMembers(AggregateDecl * decl) {
+			if ( ! decl->parameters.empty() ) decl->members.clear();
+		}
+
+		void Pass3::premutate( StructDecl * structDecl ) {
 			stripGenericMembers( structDecl );
-			return structDecl;
-		}
-
-		Declaration *Pass3::mutate( UnionDecl *unionDecl ) {
+		}
+
+		void Pass3::premutate( UnionDecl * unionDecl ) {
 			stripGenericMembers( unionDecl );
-			return unionDecl;
-		}
-
-		TypeDecl * Pass3::mutate( TypeDecl *typeDecl ) {
-//   Initializer *init = 0;
-//   std::list< Expression *> designators;
-//   addToTyVarMap( typeDecl, scopeTyVars );
-//   if ( typeDecl->get_base() ) {
-//     init = new SimpleInit( new SizeofExpr( handleDecl( typeDecl, typeDecl->get_base() ) ), designators );
-//   }
-//   return new ObjectDecl( typeDecl->get_name(), Declaration::Extern, LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::UnsignedInt ), init );
-
+		}
+
+		void Pass3::premutate( TypeDecl * typeDecl ) {
 			addToTyVarMap( typeDecl, scopeTyVars );
-			return dynamic_cast<TypeDecl*>( Mutator::mutate( typeDecl ) );
-		}
-
-		Type * Pass3::mutate( PointerType *pointerType ) {
-			scopeTyVars.beginScope();
+		}
+
+		void Pass3::premutate( PointerType * pointerType ) {
+			GuardScope( scopeTyVars );
 			makeTyVarMap( pointerType, scopeTyVars );
-
-			Type *ret = Mutator::mutate( pointerType );
-
-			scopeTyVars.endScope();
-			return ret;
-		}
-
-		Type * Pass3::mutate( FunctionType *functionType ) {
-			scopeTyVars.beginScope();
+		}
+
+		void Pass3::premutate( FunctionType * functionType ) {
+			GuardScope( scopeTyVars );
 			makeTyVarMap( functionType, scopeTyVars );
-
-			Type *ret = Mutator::mutate( functionType );
-
-			scopeTyVars.endScope();
-			return ret;
 		}
 	} // anonymous namespace
Index: src/GenPoly/CopyParams.cc
===================================================================
--- src/GenPoly/CopyParams.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,111 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// CopyParams.cc --
-//
-// Author           : Richard C. Bilson
-// Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Tue May 19 07:33:31 2015
-// Update Count     : 1
-//
-
-#include <cassert>                 // for assert
-#include <list>                    // for list, _List_iterator, _List_const_...
-#include <map>                     // for map, _Rb_tree_const_iterator, map<...
-#include <set>                     // for set, set<>::const_iterator
-#include <string>                  // for string, operator==
-#include <utility>                 // for pair
-
-#include "Common/SemanticError.h"  // for SemanticError
-#include "Common/UniqueName.h"     // for UniqueName
-#include "SynTree/Declaration.h"   // for DeclarationWithType, TypeDecl, Fun...
-#include "SynTree/Expression.h"    // for VariableExpr, ApplicationExpr, Add...
-#include "SynTree/Label.h"         // for Label, noLabels
-#include "SynTree/Statement.h"     // for CompoundStmt, DeclStmt, ExprStmt
-#include "SynTree/SynTree.h"       // for UniqueId
-#include "SynTree/Type.h"          // for FunctionType, TypeInstType, Type
-#include "SynTree/Visitor.h"       // for acceptAll, Visitor
-
-namespace GenPoly {
-	class CopyParams : public Visitor {
-	  public:
-		CopyParams();
-
-		virtual void visit( FunctionDecl *funcDecl );
-		virtual void visit( AddressExpr *addrExpr );
-
-	  private:
-		std::set< UniqueId > modVars;
-		UniqueName namer;
-	};
-
-	/// creates local copies of polymorphic function parameters
-	void copyParams( std::list< Declaration* > &translationUnit ) {
-		CopyParams copier;
-		acceptAll( translationUnit, copier );
-	}
-
-	CopyParams::CopyParams() : namer( "_cp" ) {}
-
-	void CopyParams::visit( FunctionDecl *funcDecl ) {
-		if ( funcDecl->get_statements() ) {
-			funcDecl->get_statements()->accept( *this );
-
-			if ( ! modVars.empty() ) {
-				std::map< std::string, DeclarationWithType* > assignOps;
-				// xxx - this needs to use constructors, not assignment operators
-				// assume the assignment operator is the first assert param after any "type" parameter
-				for ( Type::ForallList::const_iterator tyVar = funcDecl->get_functionType()->get_forall().begin(); tyVar != funcDecl->get_functionType()->get_forall().end(); ++tyVar ) {
-					if ( (*tyVar)->get_kind() == TypeDecl::Any ) {
-						assert( !(*tyVar)->get_assertions().empty() );
-						assert( (*tyVar)->get_assertions().front()->get_name() == "?=?" );
-						assignOps[ (*tyVar)->get_name() ] = (*tyVar)->get_assertions().front();
-					} // if
-				} // for
-				for ( std::list< DeclarationWithType* >::iterator param = funcDecl->get_functionType()->get_parameters().begin(); param != funcDecl->get_functionType()->get_parameters().end(); ++param ) {
-					std::set< UniqueId >::const_iterator var = modVars.find( (*param)->get_uniqueId() );
-					if ( var != modVars.end() ) {
-						TypeInstType *typeInst = dynamic_cast< TypeInstType* >( (*param)->get_type() );
-						assert( typeInst );
-						std::map< std::string, DeclarationWithType* >::const_iterator assignOp = assignOps.find( typeInst->get_name() );
-						if ( assignOp != assignOps.end() ) {
-							DeclarationWithType *oldParam = *param;
-							*param = (*param)->clone();
-							(*param)->set_mangleName( namer.newName( (*param)->get_mangleName() ) );
-							ApplicationExpr *assign = new ApplicationExpr( new VariableExpr( assignOp->second ) );
-							assign->get_args().push_back( new VariableExpr( oldParam ) );
-							assign->get_args().push_back( new VariableExpr( *param ) );
-							funcDecl->get_statements()->get_kids().push_front( new ExprStmt( noLabels, assign ) );
-							funcDecl->get_statements()->get_kids().push_front( new DeclStmt( noLabels, oldParam ) );
-						} // if
-						modVars.erase( var );
-					} // if
-				} // for
-			} // if
-		} // if
-	}
-
-	// this test is insufficient because it is possible for values to be modified by being passed to other polymorphic
-	// routines (e.g., assignment operators) without having their addresses explicitly taken. Some thought is needed to
-	// make sure that all of the correct cases are identified where copies are necessary.
-	//
-	// As a temporary measure, for correctness at the expense of performance, ignore the modVars list entirely and copy
-	// every parameter of TypeInstType* when visiting the FunctionDecl.
-	void CopyParams::visit( AddressExpr *addrExpr ) {
-		if ( VariableExpr *varExpr = dynamic_cast< VariableExpr* >( addrExpr->get_arg() ) ) {
-			if ( dynamic_cast< TypeInstType* >( varExpr->get_var()->get_type() ) ) {
-				modVars.insert( varExpr->get_var()->get_uniqueId() );
-			} // if
-		} // if
-	}
-} // namespace GenPoly
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/GenPoly/CopyParams.h
===================================================================
--- src/GenPoly/CopyParams.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,29 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// CopyParams.h -- 
-//
-// Author           : Richard C. Bilson
-// Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 09:23:09 2017
-// Update Count     : 2
-//
-
-#pragma once
-
-#include "SynTree/SynTree.h"
-
-namespace GenPoly {
-	/// Clones by-value parameters which have been passed by-reference for polymorphism
-	void copyParams( std::list< Declaration* > &translationUnit );
-} // namespace GenPoly
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/GenPoly/DeclMutator.cc
===================================================================
--- src/GenPoly/DeclMutator.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,195 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// DeclMutator.cc --
-//
-// Author           : Aaron B. Moss
-// Created On       : Fri Nov 27 14:44:00 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Thu Jun 22 13:49:00 2017
-// Update Count     : 4
-//
-
-#include "DeclMutator.h"
-
-#include <memory>                  // for allocator_traits<>::value_type
-
-#include "Common/SemanticError.h"  // for SemanticError
-#include "SynTree/Declaration.h"   // for Declaration
-#include "SynTree/Expression.h"    // for Expression
-#include "SynTree/Label.h"         // for Label, noLabels
-#include "SynTree/Statement.h"     // for CatchStmt, Statement, CompoundStmt
-
-namespace GenPoly {
-	DeclMutator::DeclMutator() : Mutator(), declsToAdd(1), declsToAddAfter(1) {}
-
-	DeclMutator::~DeclMutator() {}
-
-	void DeclMutator::mutateDeclarationList( std::list< Declaration* > &decls ) {
-		for ( std::list< Declaration* >::iterator decl = decls.begin(); ; ++decl ) {
-			// splice in new declarations after previous decl
-			decls.splice( decl, declsToAddAfter.back() );
-
-			if ( decl == decls.end() ) break;
-
-			// run mutator on declaration
-			*decl = maybeMutate( *decl, *this );
-
-			// splice in new declarations before current decl
-			decls.splice( decl, declsToAdd.back() );
-		}
-	}
-
-	void DeclMutator::doBeginScope() {
-		// add new decl lists for inside of scope
-		declsToAdd.resize( declsToAdd.size()+1 );
-		declsToAddAfter.resize( declsToAddAfter.size()+1 );
-	}
-
-	void DeclMutator::doEndScope() {
-		// splice any leftover declarations from this scope onto the containing scope
-		std::vector< std::list< Declaration* > >::reverse_iterator back = declsToAdd.rbegin();
-		std::vector< std::list< Declaration* > >::reverse_iterator newBack = back + 1;
-		newBack->splice( newBack->end(), *back );
-		declsToAdd.pop_back();
-
-		back = declsToAddAfter.rbegin();
-		newBack = back + 1;
-		newBack->splice( newBack->end(), *back );
-		declsToAddAfter.pop_back();
-	}
-
-	Statement* DeclMutator::mutateStatement( Statement *stmt ) {
-		// shunt over to compound statement handling if applicable
-		CompoundStmt *compoundStmt = dynamic_cast< CompoundStmt* >(stmt);
-		if ( compoundStmt ) return mutate( compoundStmt );
-
-		doBeginScope();
-
-		// run mutator on statement
-		stmt = maybeMutate( stmt, *this );
-		// return if no declarations to add
-		if ( declsToAdd.back().empty() && declsToAddAfter.back().empty() ) {
-			doEndScope();
-			return stmt;
-		}
-
-		// otherwise add declarations to new compound statement
-		CompoundStmt *compound = new CompoundStmt( noLabels );
-		for ( std::list< Declaration* >::iterator decl = declsToAdd.back().begin(); decl != declsToAdd.back().end(); ++decl ) {
-			DeclStmt *declStmt = new DeclStmt( noLabels, *decl );
-			compound->get_kids().push_back( declStmt );
-		}
-		declsToAdd.back().clear();
-
-		// add mutated statement
-		compound->get_kids().push_back( stmt );
-
-		// add declarations after to new compound statement
-		for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) {
-			DeclStmt *declStmt = new DeclStmt( noLabels, *decl );
-			compound->get_kids().push_back( declStmt );
-		}
-		declsToAddAfter.back().clear();
-
-		doEndScope();
-		return compound;
-	}
-
-	void DeclMutator::mutateStatementList( std::list< Statement* > &stmts ) {
-		doBeginScope();
-
-
-		for ( std::list< Statement* >::iterator stmt = stmts.begin(); ; ++stmt ) {
-			// add any new declarations after the previous statement
-			for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) {
-				DeclStmt *declStmt = new DeclStmt( noLabels, *decl );
-				stmts.insert( stmt, declStmt );
-			}
-			declsToAddAfter.back().clear();
-
-			if ( stmt == stmts.end() ) break;
-
-			// run mutator on statement
-			*stmt = maybeMutate( *stmt, *this );
-
-			// add any new declarations before the statement
-			for ( std::list< Declaration* >::iterator decl = declsToAdd.back().begin(); decl != declsToAdd.back().end(); ++decl ) {
-				DeclStmt *declStmt = new DeclStmt( noLabels, *decl );
-				stmts.insert( stmt, declStmt );
-			}
-			declsToAdd.back().clear();
-		}
-
-		doEndScope();
-	}
-
-	void DeclMutator::addDeclaration( Declaration *decl ) {
-		declsToAdd.back().push_back( decl );
-	}
-
-	void DeclMutator::addDeclarationAfter( Declaration *decl ) {
-		declsToAddAfter.back().push_back( decl );
-	}
-
-	CompoundStmt* DeclMutator::mutate(CompoundStmt *compoundStmt) {
-		mutateStatementList( compoundStmt->get_kids() );
-		return compoundStmt;
-	}
-
-	Statement* DeclMutator::mutate(IfStmt *ifStmt) {
-		ifStmt->set_condition( maybeMutate( ifStmt->get_condition(), *this ) );
-		ifStmt->set_thenPart( mutateStatement( ifStmt->get_thenPart() ) );
-		ifStmt->set_elsePart( mutateStatement( ifStmt->get_elsePart() ) );
-		return ifStmt;
-	}
-
-	Statement* DeclMutator::mutate(WhileStmt *whileStmt) {
-		whileStmt->set_condition( maybeMutate( whileStmt->get_condition(), *this ) );
-		whileStmt->set_body(  mutateStatement( whileStmt->get_body() ) );
-		return whileStmt;
-	}
-
-	Statement* DeclMutator::mutate(ForStmt *forStmt) {
-		mutateAll( forStmt->get_initialization(), *this );
-		forStmt->set_condition(  maybeMutate( forStmt->get_condition(), *this ) );
-		forStmt->set_increment(  maybeMutate( forStmt->get_increment(), *this ) );
-		forStmt->set_body(  mutateStatement( forStmt->get_body() ) );
-		return forStmt;
-	}
-
-	Statement* DeclMutator::mutate(SwitchStmt *switchStmt) {
-		switchStmt->set_condition( maybeMutate( switchStmt->get_condition(), *this ) );
-		mutateAll( switchStmt->get_statements(), *this );
-		return switchStmt;
-	}
-
-	Statement* DeclMutator::mutate(CaseStmt *caseStmt) {
-		caseStmt->set_condition( maybeMutate( caseStmt->get_condition(), *this ) );
-		mutateAll( caseStmt->get_statements(), *this );
-		return caseStmt;
-	}
-
-	Statement* DeclMutator::mutate(TryStmt *tryStmt) {
-		tryStmt->set_block( maybeMutate( tryStmt->get_block(), *this ) );
-		mutateAll( tryStmt->get_catchers(), *this );
-		tryStmt->set_finally( maybeMutate( tryStmt->get_finally(), *this ) );
-		return tryStmt;
-	}
-
-	Statement* DeclMutator::mutate(CatchStmt *catchStmt) {
-		catchStmt->set_decl( maybeMutate( catchStmt->get_decl(), *this ) );
-		catchStmt->set_cond( maybeMutate( catchStmt->get_cond(), *this ) );
-		catchStmt->set_body( mutateStatement( catchStmt->get_body() ) );
-		return catchStmt;
-	}
-}  // namespace GenPoly
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/GenPoly/DeclMutator.h
===================================================================
--- src/GenPoly/DeclMutator.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,71 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// DeclMutator.h --
-//
-// Author           : Aaron B. Moss
-// Created On       : Fri Nov 27 14:44:00 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 09:21:12 2017
-// Update Count     : 4
-//
-
-#pragma once
-
-#include <list>               // for list
-#include <vector>             // for vector
-
-#include "SynTree/Mutator.h"  // for Mutator
-#include "SynTree/SynTree.h"  // for Visitor Nodes
-
-namespace GenPoly {
-	/// Mutates a list of declarations, providing a means of adding new declarations into the list
-	class DeclMutator : public Mutator {
-	  public:
-		typedef Mutator Parent;
-
-		DeclMutator();
-		virtual ~DeclMutator();
-
-		using Parent::mutate;
-		virtual CompoundStmt* mutate(CompoundStmt *compoundStmt);
-		virtual Statement* mutate(IfStmt *ifStmt);
-		virtual Statement* mutate(WhileStmt *whileStmt);
-		virtual Statement* mutate(ForStmt *forStmt);
-		virtual Statement* mutate(SwitchStmt *switchStmt);
-		virtual Statement* mutate(CaseStmt *caseStmt);
-		virtual Statement* mutate(TryStmt *tryStmt);
-		virtual Statement* mutate(CatchStmt *catchStmt);
-
-		/// Mutates a list of declarations with this visitor
-		void mutateDeclarationList(std::list< Declaration* >& decls);
-
-		/// Called on entry to a new scope; overriders should call this as a super-class call
-		virtual void doBeginScope();
-		/// Called on exit from a scope; overriders should call this as a super-class call
-		virtual void doEndScope();
-	  protected:
-		/// Mutate a statement that forms its own scope
-		Statement* mutateStatement( Statement *stmt );
-		/// Mutate a list of statements that form a scope
-		void mutateStatementList( std::list< Statement* > &stmts );
-		/// Add a declaration to the list to be added before the current position
-		void addDeclaration( Declaration* decl );
-		/// Add a declaration to the list to be added after the current position
-		void addDeclarationAfter( Declaration* decl );
-	  private:
-		/// A stack of declarations to add before the current declaration or statement
-		std::vector< std::list< Declaration* > > declsToAdd;
-		/// A stack of declarations to add after the current declaration or statement
-		std::vector< std::list< Declaration* > > declsToAddAfter;
-	};
-} // namespace
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/GenPoly/FindFunction.cc
===================================================================
--- src/GenPoly/FindFunction.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/GenPoly/FindFunction.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -18,4 +18,5 @@
 #include <utility>                      // for pair
 
+#include "Common/PassVisitor.h"         // for PassVisitor
 #include "Common/SemanticError.h"       // for SemanticError
 #include "GenPoly/ErasableScopedMap.h"  // for ErasableScopedMap<>::iterator
@@ -27,10 +28,11 @@
 
 namespace GenPoly {
-	class FindFunction : public Mutator {
+	class FindFunction : public WithGuards, public WithVisitorRef<FindFunction>, public WithShortCircuiting {
 	  public:
 		FindFunction( std::list< FunctionType* > &functions, const TyVarMap &tyVars, bool replaceMode, FindFunctionPredicate predicate );
 
-		virtual Type *mutate( FunctionType *functionType );
-		virtual Type *mutate( PointerType *pointerType );
+		void premutate( FunctionType * functionType );
+		Type * postmutate( FunctionType * functionType );
+		void premutate( PointerType * pointerType );
 	  private:
 		void handleForall( const Type::ForallList &forall );
@@ -43,10 +45,10 @@
 
 	void findFunction( Type *type, std::list< FunctionType* > &functions, const TyVarMap &tyVars, FindFunctionPredicate predicate ) {
-		FindFunction finder( functions, tyVars, false, predicate );
+		PassVisitor<FindFunction> finder( functions, tyVars, false, predicate );
 		type->acceptMutator( finder );
 	}
 
 	void findAndReplaceFunction( Type *&type, std::list< FunctionType* > &functions, const TyVarMap &tyVars, FindFunctionPredicate predicate ) {
-		FindFunction finder( functions, tyVars, true, predicate );
+		PassVisitor<FindFunction> finder( functions, tyVars, true, predicate );
 		type = type->acceptMutator( finder );
 	}
@@ -57,6 +59,6 @@
 
 	void FindFunction::handleForall( const Type::ForallList &forall ) {
-		for ( Type::ForallList::const_iterator i = forall.begin(); i != forall.end(); ++i ) {
-			TyVarMap::iterator var = tyVars.find( (*i)->get_name() );
+		for ( const Declaration * td : forall ) {
+			TyVarMap::iterator var = tyVars.find( td->name );
 			if ( var != tyVars.end() ) {
 				tyVars.erase( var->first );
@@ -65,8 +67,12 @@
 	}
 
-	Type * FindFunction::mutate( FunctionType *functionType ) {
-		tyVars.beginScope();
+	void FindFunction::premutate( FunctionType * functionType ) {
+		visit_children = false;
+		GuardScope( tyVars );
 		handleForall( functionType->get_forall() );
-		mutateAll( functionType->get_returnVals(), *this );
+		mutateAll( functionType->get_returnVals(), *visitor );
+	}
+
+	Type * FindFunction::postmutate( FunctionType * functionType ) {
 		Type *ret = functionType;
 		if ( predicate( functionType, tyVars ) ) {
@@ -77,14 +83,10 @@
 			} // if
 		} // if
-		tyVars.endScope();
 		return ret;
 	}
 
-	Type * FindFunction::mutate( PointerType *pointerType ) {
-		tyVars.beginScope();
+	void FindFunction::premutate( PointerType * pointerType ) {
+		GuardScope( tyVars );
 		handleForall( pointerType->get_forall() );
-		Type *ret = Mutator::mutate( pointerType );
-		tyVars.endScope();
-		return ret;
 	}
 } // namespace GenPoly
Index: src/GenPoly/GenPoly.cc
===================================================================
--- src/GenPoly/GenPoly.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/GenPoly/GenPoly.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -432,4 +432,22 @@
 	}
 
+	bool needsBoxing( Type * param, Type * arg, const TyVarMap &exprTyVars, TypeSubstitution * env ) {
+		// is parameter is not polymorphic, don't need to box
+		if ( ! isPolyType( param, exprTyVars ) ) return false;
+		Type * newType = arg->clone();
+		if ( env ) env->apply( newType );
+		std::unique_ptr<Type> manager( newType );
+		// if the argument's type is polymorphic, we don't need to box again!
+		return ! isPolyType( newType );
+	}
+
+	bool needsBoxing( Type * param, Type * arg, ApplicationExpr * appExpr, TypeSubstitution * env ) {
+		FunctionType * function = getFunctionType( appExpr->function->result );
+		assertf( function, "ApplicationExpr has non-function type: %s", toString( appExpr->function->result ).c_str() );
+		TyVarMap exprTyVars( TypeDecl::Data{} );
+		makeTyVarMap( function, exprTyVars );
+		return needsBoxing( param, arg, exprTyVars, env );
+	}
+
 	void addToTyVarMap( TypeDecl * tyVar, TyVarMap &tyVarMap ) {
 		// xxx - should this actually be insert?
Index: src/GenPoly/GenPoly.h
===================================================================
--- src/GenPoly/GenPoly.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/GenPoly/GenPoly.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -80,4 +80,10 @@
 	bool typesPolyCompatible( Type *aty, Type *bty );
 
+	/// true if arg requires boxing given exprTyVars
+	bool needsBoxing( Type * param, Type * arg, const TyVarMap &exprTyVars, TypeSubstitution * env );
+
+	/// true if arg requires boxing in the call to appExpr
+	bool needsBoxing( Type * param, Type * arg, ApplicationExpr * appExpr, TypeSubstitution * env );
+
 	/// Adds the type variable `tyVar` to `tyVarMap`
 	void addToTyVarMap( TypeDecl * tyVar, TyVarMap &tyVarMap );
Index: src/GenPoly/InstantiateGeneric.cc
===================================================================
--- src/GenPoly/InstantiateGeneric.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/GenPoly/InstantiateGeneric.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -238,6 +238,6 @@
 					assertf( false, "Ttype parameters are not currently allowed as parameters to generic types." );
 					break;
-				case TypeDecl::Any:
-					assertf( false, "otype parameters handled by baseParam->isComplete()." );
+				default:
+					assertf( false, "Unhandled type parameter kind" );
 					break;
 			}
@@ -278,5 +278,6 @@
 		substituteMembers( base->get_members(), baseParams, typeSubs );
 
-		deleteAll( baseParams );
+		// xxx - can't delete type parameters because they may have assertions that are used
+		// deleteAll( baseParams );
 		baseParams.clear();
 
Index: src/GenPoly/PolyMutator.cc
===================================================================
--- src/GenPoly/PolyMutator.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,187 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// PolyMutator.cc --
-//
-// Author           : Richard C. Bilson
-// Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Thu Jun 22 13:47:00 2017
-// Update Count     : 17
-//
-
-#include "PolyMutator.h"
-
-#include "Common/SemanticError.h"  // for SemanticError
-#include "Common/utility.h"        // for ValueGuard
-#include "SynTree/Declaration.h"   // for Declaration, TypeDecl, TypeDecl::Data
-#include "SynTree/Expression.h"    // for Expression, UntypedExpr, StmtExpr ...
-#include "SynTree/Initializer.h"   // for SingleInit, Initializer (ptr only)
-#include "SynTree/Label.h"         // for Label, noLabels
-#include "SynTree/Mutator.h"       // for maybeMutate, mutateAll
-#include "SynTree/Statement.h"     // for CatchStmt, CompoundStmt, ForStmt
-
-class TypeSubstitution;
-
-namespace GenPoly {
-	PolyMutator::PolyMutator() : scopeTyVars( TypeDecl::Data{} ), env( 0 ) {}
-
-	void PolyMutator::mutateStatementList( std::list< Statement* > &statements ) {
-		SemanticError errors;
-
-		for ( std::list< Statement* >::iterator i = statements.begin(); i != statements.end(); ++i ) {
-			if ( ! stmtsToAddAfter.empty() ) {
-				statements.splice( i, stmtsToAddAfter );
-			} // if
-			try {
-				*i = (*i)->acceptMutator( *this );
-			} catch ( SemanticError &e ) {
-				errors.append( e );
-			} // try
-			if ( ! stmtsToAdd.empty() ) {
-				statements.splice( i, stmtsToAdd );
-			} // if
-		} // for
-		if ( ! stmtsToAddAfter.empty() ) {
-			statements.splice( statements.end(), stmtsToAddAfter );
-		} // if
-		if ( ! errors.isEmpty() ) {
-			throw errors;
-		}
-	}
-
-	Statement * PolyMutator::mutateStatement( Statement *stmt ) {
-		// don't want statements from outer CompoundStmts to be added to this CompoundStmt
-		ValueGuard< std::list< Statement* > > oldStmtsToAdd( stmtsToAdd );
-		ValueGuard< std::list< Statement* > > oldStmtsToAddAfter( stmtsToAddAfter );
-		ValueGuard< TypeSubstitution * > oldEnv( env );
-		stmtsToAdd.clear();
-		stmtsToAddAfter.clear();
-
-		Statement *newStmt = maybeMutate( stmt, *this );
-		if ( ! stmtsToAdd.empty() || ! stmtsToAddAfter.empty() ) {
-			CompoundStmt *compound = new CompoundStmt( noLabels );
-			compound->get_kids().splice( compound->get_kids().end(), stmtsToAdd );
-			compound->get_kids().push_back( newStmt );
-			compound->get_kids().splice( compound->get_kids().end(), stmtsToAddAfter );
-			// doEndScope();
-			return compound;
-		} else {
-			return newStmt;
-		}
-	}
-
-	Expression * PolyMutator::mutateExpression( Expression *expr ) {
-		if ( expr ) {
-			if ( expr->get_env() ) {
-				env = expr->get_env();
-			}
-			// xxx - should env be cloned (or moved) onto the result of the mutate?
-			return expr->acceptMutator( *this );
-		} else {
-			return expr;
-		}
-	}
-
-	CompoundStmt * PolyMutator::mutate(CompoundStmt *compoundStmt) {
-		doBeginScope();
-		mutateStatementList( compoundStmt->get_kids() );
-		doEndScope();
-		return compoundStmt;
-	}
-
-	Statement * PolyMutator::mutate(IfStmt *ifStmt) {
-		ifStmt->set_condition(  mutateExpression( ifStmt->get_condition() ) );
-		ifStmt->set_thenPart(  mutateStatement( ifStmt->get_thenPart() ) );
-		ifStmt->set_elsePart(  mutateStatement( ifStmt->get_elsePart() ) );
-		return ifStmt;
-	}
-
-	Statement * PolyMutator::mutate(WhileStmt *whileStmt) {
-		whileStmt->set_condition(  mutateExpression( whileStmt->get_condition() ) );
-		whileStmt->set_body(  mutateStatement( whileStmt->get_body() ) );
-		return whileStmt;
-	}
-
-	Statement * PolyMutator::mutate(ForStmt *forStmt) {
-		mutateAll( forStmt->get_initialization(), *this );
-		forStmt->set_condition(  mutateExpression( forStmt->get_condition() ) );
-		forStmt->set_increment(  mutateExpression( forStmt->get_increment() ) );
-		forStmt->set_body(  mutateStatement( forStmt->get_body() ) );
-		return forStmt;
-	}
-
-	Statement * PolyMutator::mutate(SwitchStmt *switchStmt) {
-		switchStmt->set_condition( mutateExpression( switchStmt->get_condition() ) );
-		mutateStatementList( switchStmt->get_statements() );
-		return switchStmt;
-	}
-
-	Statement * PolyMutator::mutate(CaseStmt *caseStmt) {
-		caseStmt->set_condition(  mutateExpression( caseStmt->get_condition() ) );
-		mutateStatementList( caseStmt->get_statements() );
-		return caseStmt;
-	}
-
-	Statement * PolyMutator::mutate(TryStmt *tryStmt) {
-		tryStmt->set_block( maybeMutate( tryStmt->get_block(), *this ) );
-		mutateAll( tryStmt->get_catchers(), *this );
-		tryStmt->set_finally( maybeMutate( tryStmt->get_finally(), *this ) );
-		return tryStmt;
-	}
-
-	Statement * PolyMutator::mutate(CatchStmt *cathStmt) {
-		cathStmt->set_body( mutateStatement( cathStmt->get_body() ) );
-		cathStmt->set_cond( maybeMutate( cathStmt->get_cond(), *this ) );
-		cathStmt->set_decl( maybeMutate( cathStmt->get_decl(), *this ) );
-		return cathStmt;
-	}
-
-	Statement * PolyMutator::mutate(ReturnStmt *retStmt) {
-		retStmt->set_expr( mutateExpression( retStmt->get_expr() ) );
-		return retStmt;
-	}
-
-	Statement * PolyMutator::mutate(ExprStmt *exprStmt) {
-		exprStmt->set_expr( mutateExpression( exprStmt->get_expr() ) );
-		return exprStmt;
-	}
-
-
-	Expression * PolyMutator::mutate(UntypedExpr *untypedExpr) {
-		for ( std::list< Expression* >::iterator i = untypedExpr->get_args().begin(); i != untypedExpr->get_args().end(); ++i ) {
-			*i = mutateExpression( *i );
-		} // for
-		return untypedExpr;
-	}
-
-	Expression *PolyMutator::mutate( StmtExpr * stmtExpr ) {
-		// don't want statements from outer CompoundStmts to be added to this StmtExpr
-		ValueGuard< std::list< Statement* > > oldStmtsToAdd( stmtsToAdd );
-		ValueGuard< std::list< Statement* > > oldStmtsToAddAfter( stmtsToAddAfter );
-		ValueGuard< TypeSubstitution * > oldEnv( env );
-
-		// xxx - not sure if this is needed, along with appropriate reset, but I don't think so...
-		// ValueGuard< TyVarMap > oldScopeTyVars( scopeTyVars );
-
-		stmtsToAdd.clear();
-		stmtsToAddAfter.clear();
-		// scopeTyVars.clear();
-
-		return Parent::mutate( stmtExpr );
-	}
-
-	Initializer *PolyMutator::mutate( SingleInit *singleInit ) {
-		singleInit->set_value( mutateExpression( singleInit->get_value() ) );
-		return singleInit;
-	}
-} // namespace GenPoly
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/GenPoly/PolyMutator.h
===================================================================
--- src/GenPoly/PolyMutator.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,67 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// PolyMutator.h --
-//
-// Author           : Richard C. Bilson
-// Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 09:20:31 2017
-// Update Count     : 7
-//
-
-#pragma once
-
-#include <list>               // for list
-
-#include "GenPoly.h"          // for TyVarMap
-#include "SynTree/Mutator.h"  // for Mutator
-#include "SynTree/SynTree.h"  // for Visitor Nodes
-
-namespace GenPoly {
-	class PolyMutator : public Mutator {
-	  public:
-		typedef Mutator Parent;
-		using Parent::mutate;
-
-		PolyMutator();
-
-		virtual CompoundStmt* mutate(CompoundStmt *compoundStmt);
-		virtual Statement* mutate(IfStmt *ifStmt);
-		virtual Statement* mutate(WhileStmt *whileStmt);
-		virtual Statement* mutate(ForStmt *forStmt);
-		virtual Statement* mutate(SwitchStmt *switchStmt);
-		virtual Statement* mutate(CaseStmt *caseStmt);
-		virtual Statement* mutate(TryStmt *returnStmt);
-		virtual Statement* mutate(CatchStmt *catchStmt);
-		virtual Statement* mutate(ExprStmt *catchStmt);
-		virtual Statement* mutate(ReturnStmt *catchStmt);
-
-		virtual Expression* mutate(UntypedExpr *untypedExpr);
-		virtual Expression* mutate( StmtExpr *stmtExpr );
-
-		virtual Initializer* mutate(SingleInit *SingleInit);
-
-		// template method
-		virtual void doBeginScope() {}
-		virtual void doEndScope() {}
-	  protected:
-		void mutateStatementList( std::list< Statement* > &statements );
-		Statement* mutateStatement( Statement *stmt );
-		Expression* mutateExpression( Expression *expr );
-
-		TyVarMap scopeTyVars;
-		TypeSubstitution *env;
-		std::list< Statement* > stmtsToAdd;
-		std::list< Statement* > stmtsToAddAfter;
-	};
-} // namespace
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/GenPoly/ScrubTyVars.cc
===================================================================
--- src/GenPoly/ScrubTyVars.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/GenPoly/ScrubTyVars.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -40,5 +40,4 @@
 		if ( tyVar != tyVars->end() ) {
 			switch ( tyVar->second.kind ) {
-			  case TypeDecl::Any:
 			  case TypeDecl::Dtype:
 			  case TypeDecl::Ttype:
Index: src/GenPoly/Specialize.cc
===================================================================
--- src/GenPoly/Specialize.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/GenPoly/Specialize.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -22,4 +22,5 @@
 #include <utility>                       // for pair
 
+#include "Common/PassVisitor.h"
 #include "Common/SemanticError.h"        // for SemanticError
 #include "Common/UniqueName.h"           // for UniqueName
@@ -28,5 +29,4 @@
 #include "InitTweak/InitTweak.h"         // for isIntrinsicCallExpr
 #include "Parser/LinkageSpec.h"          // for C
-#include "PolyMutator.h"                 // for PolyMutator
 #include "ResolvExpr/FindOpenVars.h"     // for findOpenVars
 #include "ResolvExpr/TypeEnvironment.h"  // for OpenVarSet, AssertionSet
@@ -43,17 +43,11 @@
 
 namespace GenPoly {
-	class Specialize final : public PolyMutator {
-	  public:
-		using PolyMutator::mutate;
-		virtual Expression * mutate( ApplicationExpr *applicationExpr ) override;
-		virtual Expression * mutate( AddressExpr *castExpr ) override;
-		virtual Expression * mutate( CastExpr *castExpr ) override;
-		// virtual Expression * mutate( LogicalExpr *logicalExpr );
-		// virtual Expression * mutate( ConditionalExpr *conditionalExpr );
-		// virtual Expression * mutate( CommaExpr *commaExpr );
+	struct Specialize final : public WithTypeSubstitution, public WithStmtsToAdd, public WithVisitorRef<Specialize> {
+		Expression * postmutate( ApplicationExpr *applicationExpr );
+		Expression * postmutate( CastExpr *castExpr );
 
 		void handleExplicitParams( ApplicationExpr *appExpr );
 		Expression * createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams );
-		Expression * doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams = nullptr );
+		Expression * doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams );
 
 		std::string paramPrefix = "_p";
@@ -72,13 +66,18 @@
 				if ( ! boundType ) continue;
 				if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( boundType ) ) {
+					// bound to another type variable
 					if ( closedVars.find( typeInst->get_name() ) == closedVars.end() ) {
+						// bound to a closed variable => must specialize
 						return true;
 					} // if
 				} else {
+					// variable is bound to a concrete type => must specialize
 					return true;
 				} // if
 			} // for
+			// none of the type variables are bound
 			return false;
 		} else {
+			// no env
 			return false;
 		} // if
@@ -136,7 +135,7 @@
 			if ( functionParameterSize( fftype ) != functionParameterSize( aftype ) ) return false;
 			// tuple-parameter sizes are the same, but actual parameter sizes differ - must tuple specialize
-			if ( fftype->get_parameters().size() != aftype->get_parameters().size() ) return true;
+			if ( fftype->parameters.size() != aftype->parameters.size() ) return true;
 			// total parameter size can be the same, while individual parameters can have different structure
-			for ( auto params : group_iterate( fftype->get_parameters(), aftype->get_parameters() ) ) {
+			for ( auto params : group_iterate( fftype->parameters, aftype->parameters ) ) {
 				DeclarationWithType * formal = std::get<0>(params);
 				DeclarationWithType * actual = std::get<1>(params);
@@ -152,12 +151,10 @@
 
 	Expression * Specialize::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) {
-		assertf( actual->has_result(), "attempting to specialize an untyped expression" );
+		assertf( actual->result, "attempting to specialize an untyped expression" );
 		if ( needsSpecialization( formalType, actual->get_result(), env ) ) {
 			if ( FunctionType *funType = getFunctionType( formalType ) ) {
-				ApplicationExpr *appExpr;
-				VariableExpr *varExpr;
-				if ( ( appExpr = dynamic_cast<ApplicationExpr*>( actual ) ) ) {
+				if ( ApplicationExpr * appExpr = dynamic_cast<ApplicationExpr*>( actual ) ) {
 					return createThunkFunction( funType, appExpr->get_function(), inferParams );
-				} else if ( ( varExpr = dynamic_cast<VariableExpr*>( actual ) ) ) {
+				} else if ( VariableExpr * varExpr = dynamic_cast<VariableExpr*>( actual ) ) {
 					return createThunkFunction( funType, varExpr, inferParams );
 				} else {
@@ -204,11 +201,11 @@
 	}
 
-	struct EnvTrimmer : public Visitor {
+	struct EnvTrimmer {
 		TypeSubstitution * env, * newEnv;
 		EnvTrimmer( TypeSubstitution * env, TypeSubstitution * newEnv ) : env( env ), newEnv( newEnv ){}
-		virtual void visit( TypeDecl * tyDecl ) {
+		void previsit( TypeDecl * tyDecl ) {
 			// transfer known bindings for seen type variables
-			if ( Type * t = env->lookup( tyDecl->get_name() ) ) {
-				newEnv->add( tyDecl->get_name(), t );
+			if ( Type * t = env->lookup( tyDecl->name ) ) {
+				newEnv->add( tyDecl->name, t );
 			}
 		}
@@ -219,5 +216,5 @@
 		if ( env ) {
 			TypeSubstitution * newEnv = new TypeSubstitution();
-			EnvTrimmer trimmer( env, newEnv );
+			PassVisitor<EnvTrimmer> trimmer( env, newEnv );
 			expr->accept( trimmer );
 			return newEnv;
@@ -277,25 +274,25 @@
 		std::string oldParamPrefix = paramPrefix;
 		paramPrefix += "p";
-		// save stmtsToAdd in oldStmts
+		// save stmtsToAddBefore in oldStmts
 		std::list< Statement* > oldStmts;
-		oldStmts.splice( oldStmts.end(), stmtsToAdd );
-		mutate( appExpr );
+		oldStmts.splice( oldStmts.end(), stmtsToAddBefore );
+		appExpr->acceptMutator( *visitor );
 		paramPrefix = oldParamPrefix;
 		// write any statements added for recursive specializations into the thunk body
-		thunkFunc->get_statements()->get_kids().splice( thunkFunc->get_statements()->get_kids().end(), stmtsToAdd );
-		// restore oldStmts into stmtsToAdd
-		stmtsToAdd.splice( stmtsToAdd.end(), oldStmts );
+		thunkFunc->statements->kids.splice( thunkFunc->statements->kids.end(), stmtsToAddBefore );
+		// restore oldStmts into stmtsToAddBefore
+		stmtsToAddBefore.splice( stmtsToAddBefore.end(), oldStmts );
 
 		// add return (or valueless expression) to the thunk
 		Statement *appStmt;
-		if ( funType->get_returnVals().empty() ) {
+		if ( funType->returnVals.empty() ) {
 			appStmt = new ExprStmt( noLabels, appExpr );
 		} else {
 			appStmt = new ReturnStmt( noLabels, appExpr );
 		} // if
-		thunkFunc->get_statements()->get_kids().push_back( appStmt );
+		thunkFunc->statements->kids.push_back( appStmt );
 
 		// add thunk definition to queue of statements to add
-		stmtsToAdd.push_back( new DeclStmt( noLabels, thunkFunc ) );
+		stmtsToAddBefore.push_back( new DeclStmt( noLabels, thunkFunc ) );
 		// return address of thunk function as replacement expression
 		return new AddressExpr( new VariableExpr( thunkFunc ) );
@@ -304,18 +301,15 @@
 	void Specialize::handleExplicitParams( ApplicationExpr *appExpr ) {
 		// create thunks for the explicit parameters
-		assert( appExpr->get_function()->has_result() );
-		FunctionType *function = getFunctionType( appExpr->get_function()->get_result() );
+		assert( appExpr->function->result );
+		FunctionType *function = getFunctionType( appExpr->function->result );
 		assert( function );
 		std::list< DeclarationWithType* >::iterator formal;
 		std::list< Expression* >::iterator actual;
 		for ( formal = function->get_parameters().begin(), actual = appExpr->get_args().begin(); formal != function->get_parameters().end() && actual != appExpr->get_args().end(); ++formal, ++actual ) {
-			*actual = doSpecialization( (*formal )->get_type(), *actual, &appExpr->get_inferParams() );
-		}
-	}
-
-	Expression * Specialize::mutate( ApplicationExpr *appExpr ) {
-		appExpr->get_function()->acceptMutator( *this );
-		mutateAll( appExpr->get_args(), *this );
-
+			*actual = doSpecialization( (*formal)->get_type(), *actual, &appExpr->get_inferParams() );
+		}
+	}
+
+	Expression * Specialize::postmutate( ApplicationExpr *appExpr ) {
 		if ( ! InitTweak::isIntrinsicCallExpr( appExpr ) ) {
 			// create thunks for the inferred parameters
@@ -331,19 +325,11 @@
 	}
 
-	Expression * Specialize::mutate( AddressExpr *addrExpr ) {
-		addrExpr->get_arg()->acceptMutator( *this );
-		assert( addrExpr->has_result() );
-		addrExpr->set_arg( doSpecialization( addrExpr->get_result(), addrExpr->get_arg() ) );
-		return addrExpr;
-	}
-
-	Expression * Specialize::mutate( CastExpr *castExpr ) {
-		castExpr->get_arg()->acceptMutator( *this );
-		if ( castExpr->get_result()->isVoid() ) {
+	Expression * Specialize::postmutate( CastExpr *castExpr ) {
+		if ( castExpr->result->isVoid() ) {
 			// can't specialize if we don't have a return value
 			return castExpr;
 		}
-		Expression *specialized = doSpecialization( castExpr->get_result(), castExpr->get_arg() );
-		if ( specialized != castExpr->get_arg() ) {
+		Expression *specialized = doSpecialization( castExpr->result, castExpr->arg, &castExpr->inferParams );
+		if ( specialized != castExpr->arg ) {
 			// assume here that the specialization incorporates the cast
 			return specialized;
@@ -353,22 +339,6 @@
 	}
 
-	// Removing these for now. Richard put these in for some reason, but it's not clear why.
-	// In particular, copy constructors produce a comma expression, and with this code the parts
-	// of that comma expression are not specialized, which causes problems.
-
-	// Expression * Specialize::mutate( LogicalExpr *logicalExpr ) {
-	// 	return logicalExpr;
-	// }
-
-	// Expression * Specialize::mutate( ConditionalExpr *condExpr ) {
-	// 	return condExpr;
-	// }
-
-	// Expression * Specialize::mutate( CommaExpr *commaExpr ) {
-	// 	return commaExpr;
-	// }
-
 	void convertSpecializations( std::list< Declaration* >& translationUnit ) {
-		Specialize spec;
+		PassVisitor<Specialize> spec;
 		mutateAll( translationUnit, spec );
 	}
Index: src/GenPoly/module.mk
===================================================================
--- src/GenPoly/module.mk	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/GenPoly/module.mk	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -6,5 +6,5 @@
 ## file "LICENCE" distributed with Cforall.
 ##
-## module.mk -- 
+## module.mk --
 ##
 ## Author           : Richard C. Bilson
@@ -17,10 +17,7 @@
 SRC += GenPoly/Box.cc \
        GenPoly/GenPoly.cc \
-       GenPoly/PolyMutator.cc \
        GenPoly/ScrubTyVars.cc \
        GenPoly/Lvalue.cc \
        GenPoly/Specialize.cc \
-       GenPoly/CopyParams.cc \
        GenPoly/FindFunction.cc \
-       GenPoly/DeclMutator.cc \
        GenPoly/InstantiateGeneric.cc
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/InitTweak/FixInit.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -36,7 +36,5 @@
 #include "FixGlobalInit.h"             // for fixGlobalInit
 #include "GenInit.h"                   // for genCtorDtor
-#include "GenPoly/DeclMutator.h"       // for DeclMutator
 #include "GenPoly/GenPoly.h"           // for getFunctionType
-#include "GenPoly/PolyMutator.h"       // for PolyMutator
 #include "InitTweak.h"                 // for getFunctionName, getCallArg
 #include "Parser/LinkageSpec.h"        // for C, Spec, Cforall, isBuiltin
@@ -46,5 +44,4 @@
 #include "SymTab/Indexer.h"            // for Indexer
 #include "SymTab/Mangler.h"            // for Mangler
-#include "SynTree/AddStmtVisitor.h"    // for AddStmtVisitor
 #include "SynTree/Attribute.h"         // for Attribute
 #include "SynTree/Constant.h"          // for Constant
@@ -58,5 +55,4 @@
 #include "SynTree/TypeSubstitution.h"  // for TypeSubstitution, operator<<
 #include "SynTree/Visitor.h"           // for acceptAll, maybeAccept
-#include "Tuples/Tuples.h"             // for isTtype
 
 bool ctordtorp = false; // print all debug
@@ -97,5 +93,5 @@
 			/// true if type does not need to be copy constructed to ensure correctness
 			bool skipCopyConstruct( Type * type );
-			void copyConstructArg( Expression *& arg, ImplicitCopyCtorExpr * impCpCtorExpr );
+			void copyConstructArg( Expression *& arg, ImplicitCopyCtorExpr * impCpCtorExpr, Type * formal );
 			void destructRet( ObjectDecl * ret, ImplicitCopyCtorExpr * impCpCtorExpr );
 
@@ -187,5 +183,5 @@
 		};
 
-		class FixCopyCtors final : public GenPoly::PolyMutator {
+		class FixCopyCtors final : public WithStmtsToAdd, public WithShortCircuiting, public WithVisitorRef<FixCopyCtors> {
 		  public:
 			FixCopyCtors( UnqCount & unqCount ) : unqCount( unqCount ){}
@@ -194,9 +190,7 @@
 			static void fixCopyCtors( std::list< Declaration * > &translationUnit, UnqCount & unqCount );
 
-			typedef GenPoly::PolyMutator Parent;
-			using Parent::mutate;
-			virtual Expression * mutate( ImplicitCopyCtorExpr * impCpCtorExpr ) override;
-			virtual Expression * mutate( UniqueExpr * unqExpr ) override;
-			virtual Expression * mutate( StmtExpr * stmtExpr ) override;
+			Expression * postmutate( ImplicitCopyCtorExpr * impCpCtorExpr );
+			void premutate( StmtExpr * stmtExpr );
+			void premutate( UniqueExpr * unqExpr );
 
 			UnqCount & unqCount;
@@ -220,10 +214,10 @@
 			void emit( CodeLocation, const Params &... params );
 
-			FunctionDecl * function = 0;
+			FunctionDecl * function = nullptr;
 			std::set< DeclarationWithType * > unhandled;
 			std::map< DeclarationWithType *, CodeLocation > usedUninit;
-			ObjectDecl * thisParam = 0;
+			ObjectDecl * thisParam = nullptr;
 			bool isCtor = false; // true if current function is a constructor
-			StructDecl * structDecl = 0;
+			StructDecl * structDecl = nullptr;
 		};
 
@@ -243,11 +237,9 @@
 		};
 
-		class FixCtorExprs final : public GenPoly::DeclMutator {
-		  public:
+		struct FixCtorExprs final : public WithDeclsToAdd, public WithIndexer {
 			/// expands ConstructorExpr nodes into comma expressions, using a temporary for the first argument
 			static void fix( std::list< Declaration * > & translationUnit );
 
-			using GenPoly::DeclMutator::mutate;
-			virtual Expression * mutate( ConstructorExpr * ctorExpr ) override;
+			Expression * postmutate( ConstructorExpr * ctorExpr );
 		};
 	} // namespace
@@ -268,4 +260,5 @@
 
 		GenStructMemberCalls::generate( translationUnit );
+
 		// xxx - ctor expansion currently has to be after FixCopyCtors, because there is currently a
 		// hack in the way untyped assignments are generated, where the first argument cannot have
@@ -297,5 +290,5 @@
 			for ( std::list< Declaration * >::iterator i = translationUnit.begin(); i != translationUnit.end(); ++i ) {
 				try {
-					*i = maybeMutate( *i, fixer );
+					maybeMutate( *i, fixer );
 					translationUnit.splice( i, fixer.pass.staticDtorDecls );
 				} catch( SemanticError &e ) {
@@ -316,5 +309,5 @@
 
 		void FixCopyCtors::fixCopyCtors( std::list< Declaration * > & translationUnit, UnqCount & unqCount ) {
-			FixCopyCtors fixer( unqCount );
+			PassVisitor<FixCopyCtors> fixer( unqCount );
 			mutateAll( translationUnit, fixer );
 		}
@@ -326,21 +319,19 @@
 
 		void FixCtorExprs::fix( std::list< Declaration * > & translationUnit ) {
-			FixCtorExprs fixer;
-			fixer.mutateDeclarationList( translationUnit );
+			PassVisitor<FixCtorExprs> fixer;
+			mutateAll( translationUnit, fixer );
 		}
 
 		Expression * InsertImplicitCalls::postmutate( ApplicationExpr * appExpr ) {
-			assert( appExpr );
-
 			if ( VariableExpr * function = dynamic_cast< VariableExpr * > ( appExpr->get_function() ) ) {
-				if ( LinkageSpec::isBuiltin( function->get_var()->get_linkage() ) ) {
+				if ( function->var->linkage.is_builtin ) {
 					// optimization: don't need to copy construct in order to call intrinsic functions
 					return appExpr;
 				} else if ( DeclarationWithType * funcDecl = dynamic_cast< DeclarationWithType * > ( function->get_var() ) ) {
 					FunctionType * ftype = dynamic_cast< FunctionType * >( GenPoly::getFunctionType( funcDecl->get_type() ) );
-					assert( ftype );
-					if ( CodeGen::isConstructor( funcDecl->get_name() ) && ftype->get_parameters().size() == 2 ) {
-						Type * t1 = getPointerBase( ftype->get_parameters().front()->get_type() );
-						Type * t2 = ftype->get_parameters().back()->get_type();
+					assertf( ftype, "Function call without function type: %s", toString( funcDecl ).c_str() );
+					if ( CodeGen::isConstructor( funcDecl->get_name() ) && ftype->parameters.size() == 2 ) {
+						Type * t1 = getPointerBase( ftype->parameters.front()->get_type() );
+						Type * t2 = ftype->parameters.back()->get_type();
 						assert( t1 );
 
@@ -368,7 +359,5 @@
 		}
 
-		bool ResolveCopyCtors::skipCopyConstruct( Type * type ) {
-			return dynamic_cast< VarArgsType * >( type ) || dynamic_cast< ReferenceType * >( type ) || GenPoly::getFunctionType( type ) || Tuples::isTtype( type );
-		}
+		bool ResolveCopyCtors::skipCopyConstruct( Type * type ) { return ! isConstructable( type ); }
 
 		Expression * ResolveCopyCtors::makeCtorDtor( const std::string & fname, ObjectDecl * var, Expression * cpArg ) {
@@ -377,11 +366,12 @@
 			ImplicitCtorDtorStmt * stmt = genCtorDtor( fname, var, cpArg );
 			ExprStmt * exprStmt = strict_dynamic_cast< ExprStmt * >( stmt->get_callStmt() );
-			Expression * untyped = exprStmt->get_expr();
+			Expression * resolved = exprStmt->expr;
+			exprStmt->expr = nullptr; // take ownership of expr
 
 			// resolve copy constructor
 			// should only be one alternative for copy ctor and dtor expressions, since all arguments are fixed
 			// (VariableExpr and already resolved expression)
-			CP_CTOR_PRINT( std::cerr << "ResolvingCtorDtor " << untyped << std::endl; )
-			Expression * resolved = ResolvExpr::findVoidExpression( untyped, indexer );
+			CP_CTOR_PRINT( std::cerr << "ResolvingCtorDtor " << resolved << std::endl; )
+			ResolvExpr::findVoidExpression( resolved, indexer );
 			assert( resolved );
 			if ( resolved->get_env() ) {
@@ -391,21 +381,21 @@
 				resolved->set_env( nullptr );
 			} // if
-
 			delete stmt;
 			return resolved;
 		}
 
-		void ResolveCopyCtors::copyConstructArg( Expression *& arg, ImplicitCopyCtorExpr * impCpCtorExpr ) {
+		void ResolveCopyCtors::copyConstructArg( Expression *& arg, ImplicitCopyCtorExpr * impCpCtorExpr, Type * formal ) {
 			static UniqueName tempNamer("_tmp_cp");
 			assert( env );
 			CP_CTOR_PRINT( std::cerr << "Type Substitution: " << *env << std::endl; )
-			assert( arg->has_result() );
-			Type * result = arg->get_result();
+			assert( arg->result );
+			Type * result = arg->result;
 			if ( skipCopyConstruct( result ) ) return; // skip certain non-copyable types
 
-			// type may involve type variables, so apply type substitution to get temporary variable's actual type
+			// type may involve type variables, so apply type substitution to get temporary variable's actual type.
+			// Use applyFree so that types bound in function pointers are not substituted, e.g. in forall(dtype T) void (*)(T).
 			result = result->clone();
-			env->apply( result );
-			ObjectDecl * tmp = new ObjectDecl( tempNamer.newName(), Type::StorageClasses(), LinkageSpec::C, 0, result, 0 );
+			env->applyFree( result );
+			ObjectDecl * tmp = ObjectDecl::newObject( "__tmp", result, nullptr );
 			tmp->get_type()->set_const( false );
 
@@ -417,13 +407,19 @@
 				// if the chosen constructor is intrinsic, the copy is unnecessary, so
 				// don't create the temporary and don't call the copy constructor
-				VariableExpr * function = dynamic_cast< VariableExpr * >( appExpr->get_function() );
-				assert( function );
-				if ( function->get_var()->get_linkage() == LinkageSpec::Intrinsic ) return;
-			}
+				VariableExpr * function = strict_dynamic_cast< VariableExpr * >( appExpr->function );
+				if ( function->var->linkage == LinkageSpec::Intrinsic ) {
+					// arguments that need to be boxed need a temporary regardless of whether the copy constructor is intrinsic,
+					// so that the object isn't changed inside of the polymorphic function
+					if ( ! GenPoly::needsBoxing( formal, result, impCpCtorExpr->callExpr, env ) ) return;
+				}
+			}
+
+			// set a unique name for the temporary once it's certain the call is necessary
+			tmp->name = tempNamer.newName();
 
 			// replace argument to function call with temporary
 			arg = new CommaExpr( cpCtor, new VariableExpr( tmp ) );
-			impCpCtorExpr->get_tempDecls().push_back( tmp );
-			impCpCtorExpr->get_dtors().push_front( makeCtorDtor( "^?{}", tmp ) );
+			impCpCtorExpr->tempDecls.push_back( tmp );
+			impCpCtorExpr->dtors.push_front( makeCtorDtor( "^?{}", tmp ) );
 		}
 
@@ -435,9 +431,19 @@
 			CP_CTOR_PRINT( std::cerr << "ResolveCopyCtors: " << impCpCtorExpr << std::endl; )
 
-			ApplicationExpr * appExpr = impCpCtorExpr->get_callExpr();
+			ApplicationExpr * appExpr = impCpCtorExpr->callExpr;
 
 			// take each argument and attempt to copy construct it.
-			for ( Expression * & arg : appExpr->get_args() ) {
-				copyConstructArg( arg, impCpCtorExpr );
+			FunctionType * ftype = GenPoly::getFunctionType( appExpr->function->result );
+			assert( ftype );
+			auto & params = ftype->parameters;
+			auto iter = params.begin();
+			for ( Expression * & arg : appExpr->args ) {
+				Type * formal = nullptr;
+				if ( iter != params.end() ) {
+					DeclarationWithType * param = *iter++;
+					formal = param->get_type();
+				}
+
+				copyConstructArg( arg, impCpCtorExpr, formal );
 			} // for
 
@@ -445,15 +451,15 @@
 			// initialized with the return value and is destructed later
 			// xxx - handle named return values?
-			Type * result = appExpr->get_result();
+			Type * result = appExpr->result;
 			if ( ! result->isVoid() ) {
 				static UniqueName retNamer("_tmp_cp_ret");
 				result = result->clone();
 				env->apply( result );
-				ObjectDecl * ret = new ObjectDecl( retNamer.newName(), Type::StorageClasses(), LinkageSpec::C, 0, result, 0 );
-				ret->get_type()->set_const( false );
-				impCpCtorExpr->get_returnDecls().push_back( ret );
+				ObjectDecl * ret = ObjectDecl::newObject( retNamer.newName(), result, nullptr );
+				ret->type->set_const( false );
+				impCpCtorExpr->returnDecls.push_back( ret );
 				CP_CTOR_PRINT( std::cerr << "makeCtorDtor for a return" << std::endl; )
 				if ( ! dynamic_cast< ReferenceType * >( result ) ) {
-					// destructing lvalue returns is bad because it can cause multiple destructor calls to the same object - the returned object is not a temporary
+					// destructing reference returns is bad because it can cause multiple destructor calls to the same object - the returned object is not a temporary
 					destructRet( ret, impCpCtorExpr );
 				}
@@ -472,5 +478,5 @@
 				result = result->clone();
 				env->apply( result );
-				ObjectDecl * ret = new ObjectDecl( retNamer.newName(), Type::StorageClasses(), LinkageSpec::C, 0, result, 0 );
+				ObjectDecl * ret = ObjectDecl::newObject( retNamer.newName(), result, nullptr );
 				ret->get_type()->set_const( false );
 				stmtExpr->get_returnDecls().push_front( ret );
@@ -493,4 +499,18 @@
 				visit_children = false;
 			}
+		}
+
+		// to prevent warnings (‘_unq0’ may be used uninitialized in this function),
+		// insert an appropriate zero initializer for UniqueExpr temporaries.
+		Initializer * makeInit( Type * t ) {
+			if ( StructInstType * inst = dynamic_cast< StructInstType * >( t ) ) {
+				// initizer for empty struct must be empty
+				if ( inst->baseStruct->members.empty() ) return new ListInit({});
+			} else if ( UnionInstType * inst = dynamic_cast< UnionInstType * >( t ) ) {
+				// initizer for empty union must be empty
+				if ( inst->baseUnion->members.empty() ) return new ListInit({});
+			}
+
+			return new ListInit( { new SingleInit( new ConstantExpr( Constant::from_int( 0 ) ) ) } );
 		}
 
@@ -509,5 +529,5 @@
 			} else {
 				// expr isn't a call expr, so create a new temporary variable to use to hold the value of the unique expression
-				unqExpr->set_object( new ObjectDecl( toString("_unq", unqExpr->get_id()), Type::StorageClasses(), LinkageSpec::C, nullptr, unqExpr->get_result()->clone(), nullptr ) );
+				unqExpr->set_object( ObjectDecl::newObject( toString("_unq", unqExpr->get_id()), unqExpr->get_result()->clone(), makeInit( unqExpr->get_result() ) ) );
 				unqExpr->set_var( new VariableExpr( unqExpr->get_object() ) );
 			}
@@ -515,8 +535,7 @@
 		}
 
-		Expression * FixCopyCtors::mutate( ImplicitCopyCtorExpr * impCpCtorExpr ) {
+		Expression * FixCopyCtors::postmutate( ImplicitCopyCtorExpr * impCpCtorExpr ) {
 			CP_CTOR_PRINT( std::cerr << "FixCopyCtors: " << impCpCtorExpr << std::endl; )
 
-			impCpCtorExpr = strict_dynamic_cast< ImplicitCopyCtorExpr * >( Parent::mutate( impCpCtorExpr ) );
 			std::list< ObjectDecl * > & tempDecls = impCpCtorExpr->get_tempDecls();
 			std::list< ObjectDecl * > & returnDecls = impCpCtorExpr->get_returnDecls();
@@ -525,8 +544,8 @@
 			// add all temporary declarations and their constructors
 			for ( ObjectDecl * obj : tempDecls ) {
-				stmtsToAdd.push_back( new DeclStmt( noLabels, obj ) );
+				stmtsToAddBefore.push_back( new DeclStmt( noLabels, obj ) );
 			} // for
 			for ( ObjectDecl * obj : returnDecls ) {
-				stmtsToAdd.push_back( new DeclStmt( noLabels, obj ) );
+				stmtsToAddBefore.push_back( new DeclStmt( noLabels, obj ) );
 			} // for
 
@@ -536,5 +555,4 @@
 			} // for
 
-			// xxx - update to work with multiple return values
 			ObjectDecl * returnDecl = returnDecls.empty() ? nullptr : returnDecls.front();
 			Expression * callExpr = impCpCtorExpr->get_callExpr();
@@ -561,6 +579,5 @@
 				Expression * retExpr = new CommaExpr( assign, new VariableExpr( returnDecl ) );
 				// move env from callExpr to retExpr
-				retExpr->set_env( callExpr->get_env() );
-				callExpr->set_env( nullptr );
+				std::swap( retExpr->env, callExpr->env );
 				return retExpr;
 			} else {
@@ -569,21 +586,23 @@
 		}
 
-		Expression * FixCopyCtors::mutate( StmtExpr * stmtExpr ) {
+		void FixCopyCtors::premutate( StmtExpr * stmtExpr ) {
 			// function call temporaries should be placed at statement-level, rather than nested inside of a new statement expression,
 			// since temporaries can be shared across sub-expressions, e.g.
 			//   [A, A] f();
 			//   g([A] x, [A] y);
-			//   f(g());
+			//   g(f());
 			// f is executed once, so the return temporary is shared across the tuple constructors for x and y.
+			// Explicitly mutating children instead of mutating the inner compound statment forces the temporaries to be added
+			// to the outer context, rather than inside of the statement expression.
+			visit_children = false;
 			std::list< Statement * > & stmts = stmtExpr->get_statements()->get_kids();
 			for ( Statement *& stmt : stmts ) {
-				stmt = stmt->acceptMutator( *this );
+				stmt = stmt->acceptMutator( *visitor );
 			} // for
-			// stmtExpr = strict_dynamic_cast< StmtExpr * >( Parent::mutate( stmtExpr ) );
 			assert( stmtExpr->get_result() );
 			Type * result = stmtExpr->get_result();
 			if ( ! result->isVoid() ) {
 				for ( ObjectDecl * obj : stmtExpr->get_returnDecls() ) {
-					stmtsToAdd.push_back( new DeclStmt( noLabels, obj ) );
+					stmtsToAddBefore.push_back( new DeclStmt( noLabels, obj ) );
 				} // for
 				// add destructors after current statement
@@ -592,8 +611,7 @@
 				} // for
 				// must have a non-empty body, otherwise it wouldn't have a result
-				CompoundStmt * body = stmtExpr->get_statements();
-				assert( ! body->get_kids().empty() );
+				assert( ! stmts.empty() );
 				assert( ! stmtExpr->get_returnDecls().empty() );
-				body->get_kids().push_back( new ExprStmt( noLabels, new VariableExpr( stmtExpr->get_returnDecls().front() ) ) );
+				stmts.push_back( new ExprStmt( noLabels, new VariableExpr( stmtExpr->get_returnDecls().front() ) ) );
 				stmtExpr->get_returnDecls().clear();
 				stmtExpr->get_dtors().clear();
@@ -601,12 +619,11 @@
 			assert( stmtExpr->get_returnDecls().empty() );
 			assert( stmtExpr->get_dtors().empty() );
-			return stmtExpr;
-		}
-
-		Expression * FixCopyCtors::mutate( UniqueExpr * unqExpr ) {
+		}
+
+		void FixCopyCtors::premutate( UniqueExpr * unqExpr ) {
+			visit_children = false;
 			unqCount[ unqExpr->get_id() ]--;
 			static std::unordered_map< int, std::list< Statement * > > dtors;
 			static std::unordered_map< int, UniqueExpr * > unqMap;
-			static std::unordered_set< int > addDeref;
 			// has to be done to clean up ImplicitCopyCtorExpr nodes, even when this node was skipped in previous passes
 			if ( unqMap.count( unqExpr->get_id() ) ) {
@@ -619,33 +636,19 @@
 					stmtsToAddAfter.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
 				}
-				if ( addDeref.count( unqExpr->get_id() ) ) {
-					// other UniqueExpr was dereferenced because it was an lvalue return, so this one should be too
-					return UntypedExpr::createDeref( unqExpr );
-				}
-				return unqExpr;
-			}
-			FixCopyCtors fixer( unqCount );
+				return;
+			}
+			PassVisitor<FixCopyCtors> fixer( unqCount );
 			unqExpr->set_expr( unqExpr->get_expr()->acceptMutator( fixer ) ); // stmtexprs contained should not be separately fixed, so this must occur after the lookup
-			stmtsToAdd.splice( stmtsToAdd.end(), fixer.stmtsToAdd );
+			stmtsToAddBefore.splice( stmtsToAddBefore.end(), fixer.pass.stmtsToAddBefore );
 			unqMap[unqExpr->get_id()] = unqExpr;
 			if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
 				stmtsToAddAfter.splice( stmtsToAddAfter.end(), dtors[ unqExpr->get_id() ] );
 			} else { // remember dtors for last instance of unique expr
-				dtors[ unqExpr->get_id() ] = fixer.stmtsToAddAfter;
-			}
-			if ( UntypedExpr * deref = dynamic_cast< UntypedExpr * >( unqExpr->get_expr() ) ) {
-				// unique expression is now a dereference, because the inner expression is an lvalue returning function call.
-				// Normalize the expression by dereferencing the unique expression, rather than the inner expression
-				// (i.e. move the dereference out a level)
-				assert( getFunctionName( deref ) == "*?" );
-				unqExpr->set_expr( getCallArg( deref, 0 ) );
-				getCallArg( deref, 0 ) = unqExpr;
-				addDeref.insert( unqExpr->get_id() );
-				return deref;
-			}
-			return unqExpr;
-		}
-
-		DeclarationWithType *FixInit::postmutate( ObjectDecl *objDecl ) {
+				dtors[ unqExpr->get_id() ] = fixer.pass.stmtsToAddAfter;
+			}
+			return;
+		}
+
+		DeclarationWithType * FixInit::postmutate( ObjectDecl *objDecl ) {
 			// since this removes the init field from objDecl, it must occur after children are mutated (i.e. postmutate)
 			if ( ConstructorInit * ctorInit = dynamic_cast< ConstructorInit * >( objDecl->get_init() ) ) {
@@ -745,22 +748,25 @@
 					} else {
 						ImplicitCtorDtorStmt * implicit = strict_dynamic_cast< ImplicitCtorDtorStmt * > ( ctor );
-						ExprStmt * ctorStmt = dynamic_cast< ExprStmt * >( implicit->get_callStmt() );
+						ExprStmt * ctorStmt = dynamic_cast< ExprStmt * >( implicit->callStmt );
 						ApplicationExpr * ctorCall = nullptr;
-						if ( ctorStmt && (ctorCall = isIntrinsicCallExpr( ctorStmt->get_expr() )) && ctorCall->get_args().size() == 2 ) {
+						if ( ctorStmt && (ctorCall = isIntrinsicCallExpr( ctorStmt->expr )) && ctorCall->get_args().size() == 2 ) {
 							// clean up intrinsic copy constructor calls by making them into SingleInits
-							objDecl->set_init( new SingleInit( ctorCall->get_args().back() ) );
-							ctorCall->get_args().pop_back();
+							Expression * ctorArg = ctorCall->args.back();
+							std::swap( ctorArg->env, ctorCall->env );
+							objDecl->init = new SingleInit( ctorArg );
+
+							ctorCall->args.pop_back();
 						} else {
 							stmtsToAddAfter.push_back( ctor );
-							objDecl->set_init( nullptr );
-							ctorInit->set_ctor( nullptr );
+							objDecl->init = nullptr;
+							ctorInit->ctor = nullptr;
 						}
 					} // if
-				} else if ( Initializer * init = ctorInit->get_init() ) {
-					objDecl->set_init( init );
-					ctorInit->set_init( nullptr );
+				} else if ( Initializer * init = ctorInit->init ) {
+					objDecl->init = init;
+					ctorInit->init = nullptr;
 				} else {
 					// no constructor and no initializer, which is okay
-					objDecl->set_init( nullptr );
+					objDecl->init = nullptr;
 				} // if
 				delete ctorInit;
@@ -819,7 +825,9 @@
 					assert( ! ctorInit->get_ctor() || ! ctorInit->get_init() );
 					Statement * dtor = ctorInit->get_dtor();
+					// don't need to call intrinsic dtor, because it does nothing, but
+					// non-intrinsic dtors must be called
 					if ( dtor && ! isIntrinsicSingleArgCallStmt( dtor ) ) {
-						// don't need to call intrinsic dtor, because it does nothing, but
-						// non-intrinsic dtors must be called
+						// set dtor location to the object's location for error messages
+						ctorInit->dtor->location = objDecl->location;
 						reverseDeclOrder.front().push_front( objDecl );
 					} // if
@@ -832,4 +840,6 @@
 			GuardValue( labelVars );
 			labelVars.clear();
+			// LabelFinder does not recurse into FunctionDecl, so need to visit
+			// its children manually.
 			maybeAccept( funcDecl->type, finder );
 			maybeAccept( funcDecl->statements, finder );
@@ -933,6 +943,19 @@
 		}
 
+		void addIds( SymTab::Indexer & indexer, const std::list< DeclarationWithType * > & decls ) {
+			for ( auto d : decls ) {
+				indexer.addId( d );
+			}
+		}
+
+		void addTypes( SymTab::Indexer & indexer, const std::list< TypeDecl * > & tds ) {
+			for ( auto td : tds ) {
+				indexer.addType( td );
+				addIds( indexer, td->assertions );
+			}
+		}
+
 		void GenStructMemberCalls::previsit( FunctionDecl * funcDecl ) {
-			GuardValue( funcDecl );
+			GuardValue( function );
 			GuardValue( unhandled );
 			GuardValue( usedUninit );
@@ -967,17 +990,4 @@
 		}
 
-		void addIds( SymTab::Indexer & indexer, const std::list< DeclarationWithType * > & decls ) {
-			for ( auto d : decls ) {
-				indexer.addId( d );
-			}
-		}
-
-		void addTypes( SymTab::Indexer & indexer, const std::list< TypeDecl * > & tds ) {
-			for ( auto td : tds ) {
-				indexer.addType( td );
-				addIds( indexer, td->assertions );
-			}
-		}
-
 		void GenStructMemberCalls::postvisit( FunctionDecl * funcDecl ) {
 			// remove the unhandled objects from usedUninit, because a call is inserted
@@ -1012,4 +1022,6 @@
 					// skip non-DWT members
 					if ( ! field ) continue;
+					// skip non-constructable members
+					if ( ! tryConstruct( field ) ) continue;
 					// skip handled members
 					if ( ! unhandled.count( field ) ) continue;
@@ -1130,5 +1142,5 @@
 		}
 
-		DeclarationWithType * MutatingResolver::mutate( ObjectDecl *objectDecl ) {
+		DeclarationWithType * MutatingResolver::mutate( ObjectDecl * objectDecl ) {
 			// add object to the indexer assumes that there will be no name collisions
 			// in generated code. If this changes, add mutate methods for entities with
@@ -1138,16 +1150,18 @@
 		}
 
-		Expression* MutatingResolver::mutate( UntypedExpr *untypedExpr ) {
-			return strict_dynamic_cast< ApplicationExpr * >( ResolvExpr::findVoidExpression( untypedExpr, indexer ) );
-		}
-
-		Expression * FixCtorExprs::mutate( ConstructorExpr * ctorExpr ) {
+		Expression * MutatingResolver::mutate( UntypedExpr * untypedExpr ) {
+			Expression * newExpr = untypedExpr;
+			ResolvExpr::findVoidExpression( newExpr, indexer );
+			return newExpr;
+		}
+
+		Expression * FixCtorExprs::postmutate( ConstructorExpr * ctorExpr ) {
 			static UniqueName tempNamer( "_tmp_ctor_expr" );
 			// xxx - is the size check necessary?
-			assert( ctorExpr->has_result() && ctorExpr->get_result()->size() == 1 );
+			assert( ctorExpr->result && ctorExpr->get_result()->size() == 1 );
 
 			// xxx - ideally we would reuse the temporary generated from the copy constructor passes from within firstArg if it exists and not generate a temporary if it's unnecessary.
-			ObjectDecl * tmp = new ObjectDecl( tempNamer.newName(), Type::StorageClasses(), LinkageSpec::C, nullptr, ctorExpr->get_result()->clone(), nullptr );
-			addDeclaration( tmp );
+			ObjectDecl * tmp = ObjectDecl::newObject( tempNamer.newName(), ctorExpr->get_result()->clone(), nullptr );
+			declsToAddBefore.push_back( tmp );
 
 			// xxx - this can be TupleAssignExpr now. Need to properly handle this case.
@@ -1158,26 +1172,13 @@
 			delete ctorExpr;
 
+			// build assignment and replace constructor's first argument with new temporary
 			Expression *& firstArg = callExpr->get_args().front();
-
-			// xxx - hack in 'fake' assignment operator until resolver can easily be called in this pass. Once the resolver can be used in PassVisitor, this hack goes away.
-
-			// generate the type of assignment operator using the type of tmp minus any reference types
-			Type * type = tmp->get_type()->stripReferences();
-			FunctionType * ftype = SymTab::genAssignType( type );
-
-			// generate fake assignment decl and call it using &tmp and &firstArg
-			// since tmp is guaranteed to be a reference and we want to assign pointers
-			FunctionDecl * assignDecl = new FunctionDecl( "?=?", Type::StorageClasses(), LinkageSpec::Intrinsic, ftype, nullptr );
-			ApplicationExpr * assign = new ApplicationExpr( VariableExpr::functionPointer( assignDecl ) );
-			assign->get_args().push_back( new AddressExpr( new VariableExpr( tmp ) ) );
-			Expression * addrArg = new AddressExpr( firstArg );
-			// if firstArg has type T&&, then &firstArg has type T*&.
-			// Cast away the reference to a value type so that the argument
-			// matches the assignment's parameter types
-			if ( dynamic_cast<ReferenceType *>( addrArg->get_result() ) ) {
-				addrArg = new CastExpr( addrArg, addrArg->get_result()->stripReferences()->clone() );
-			}
-			assign->get_args().push_back( addrArg );
+			Expression * assign = new UntypedExpr( new NameExpr( "?=?" ), { new AddressExpr( new VariableExpr( tmp ) ), new AddressExpr( firstArg ) } );
 			firstArg = new VariableExpr( tmp );
+
+			// resolve assignment and dispose of new env
+			ResolvExpr::findVoidExpression( assign, indexer );
+			delete assign->env;
+			assign->env = nullptr;
 
 			// for constructor expr:
Index: src/InitTweak/GenInit.cc
===================================================================
--- src/InitTweak/GenInit.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/InitTweak/GenInit.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -26,5 +26,4 @@
 #include "Common/UniqueName.h"     // for UniqueName
 #include "Common/utility.h"        // for ValueGuard, maybeClone
-#include "GenPoly/DeclMutator.h"   // for DeclMutator
 #include "GenPoly/GenPoly.h"       // for getFunctionType, isPolyType
 #include "GenPoly/ScopedSet.h"     // for ScopedSet, ScopedSet<>::const_iter...
@@ -62,5 +61,5 @@
 	};
 
-	struct CtorDtor : public WithGuards, public WithShortCircuiting  {
+	struct CtorDtor : public WithGuards, public WithShortCircuiting, public WithVisitorRef<CtorDtor>  {
 		/// create constructor and destructor statements for object declarations.
 		/// the actual call statements will be added in after the resolver has run
@@ -75,10 +74,7 @@
 		// that need to be constructed or destructed
 		void previsit( StructDecl *aggregateDecl );
-		void previsit( __attribute__((unused)) UnionDecl    * aggregateDecl ) { visit_children = false; }
-		void previsit( __attribute__((unused)) EnumDecl     * aggregateDecl ) { visit_children = false; }
-		void previsit( __attribute__((unused)) TraitDecl    * aggregateDecl ) { visit_children = false; }
-		void previsit( __attribute__((unused)) TypeDecl     * typeDecl )      { visit_children = false; }
-		void previsit( __attribute__((unused)) TypedefDecl  * typeDecl )      { visit_children = false; }
-		void previsit( __attribute__((unused)) FunctionType * funcType )      { visit_children = false; }
+		void previsit( AggregateDecl * ) { visit_children = false; }
+		void previsit( NamedTypeDecl * ) { visit_children = false; }
+		void previsit( FunctionType * ) { visit_children = false; }
 
 		void previsit( CompoundStmt * compoundStmt );
@@ -89,15 +85,9 @@
 		// should not have a ConstructorInit generated.
 
-		bool isManaged( ObjectDecl * objDecl ) const ; // determine if object is managed
-		bool isManaged( Type * type ) const; // determine if type is managed
-		void handleDWT( DeclarationWithType * dwt ); // add type to managed if ctor/dtor
-		GenPoly::ScopedSet< std::string > managedTypes;
+		ManagedTypes managedTypes;
 		bool inFunction = false;
 	};
 
-	class HoistArrayDimension final : public GenPoly::DeclMutator {
-	  public:
-		typedef GenPoly::DeclMutator Parent;
-
+	struct HoistArrayDimension final : public WithDeclsToAdd, public WithShortCircuiting, public WithGuards {
 		/// hoist dimension from array types in object declaration so that it uses a single
 		/// const variable of type size_t, so that side effecting array dimensions are only
@@ -105,19 +95,12 @@
 		static void hoistArrayDimension( std::list< Declaration * > & translationUnit );
 
-	  private:
-		using Parent::mutate;
-
-		virtual DeclarationWithType * mutate( ObjectDecl * objectDecl ) override;
-		virtual DeclarationWithType * mutate( FunctionDecl *functionDecl ) override;
+		void premutate( ObjectDecl * objectDecl );
+		DeclarationWithType * postmutate( ObjectDecl * objectDecl );
+		void premutate( FunctionDecl *functionDecl );
 		// should not traverse into any of these declarations to find objects
 		// that need to be constructed or destructed
-		virtual Declaration* mutate( StructDecl *aggregateDecl ) override { return aggregateDecl; }
-		virtual Declaration* mutate( UnionDecl *aggregateDecl ) override { return aggregateDecl; }
-		virtual Declaration* mutate( EnumDecl *aggregateDecl ) override { return aggregateDecl; }
-		virtual Declaration* mutate( TraitDecl *aggregateDecl ) override { return aggregateDecl; }
-		virtual TypeDecl* mutate( TypeDecl *typeDecl ) override { return typeDecl; }
-		virtual Declaration* mutate( TypedefDecl *typeDecl ) override { return typeDecl; }
-
-		virtual Type* mutate( FunctionType *funcType ) override { return funcType; }
+		void premutate( AggregateDecl * ) { visit_children = false; }
+		void premutate( NamedTypeDecl * ) { visit_children = false; }
+		void premutate( FunctionType * ) { visit_children = false; }
 
 		void hoist( Type * type );
@@ -128,10 +111,10 @@
 
 	void genInit( std::list< Declaration * > & translationUnit ) {
-		ReturnFixer::makeReturnTemp( translationUnit );
+		fixReturnStatements( translationUnit );
 		HoistArrayDimension::hoistArrayDimension( translationUnit );
 		CtorDtor::generateCtorDtor( translationUnit );
 	}
 
-	void ReturnFixer::makeReturnTemp( std::list< Declaration * > & translationUnit ) {
+	void fixReturnStatements( std::list< Declaration * > & translationUnit ) {
 		PassVisitor<ReturnFixer> fixer;
 		mutateAll( translationUnit, fixer );
@@ -143,12 +126,17 @@
 		// hands off if the function returns a reference - we don't want to allocate a temporary if a variable's address
 		// is being returned
-		if ( returnStmt->get_expr() && returnVals.size() == 1 && ! dynamic_cast< ReferenceType * >( returnVals.front()->get_type() ) ) {
+		if ( returnStmt->expr && returnVals.size() == 1 && isConstructable( returnVals.front()->get_type() ) ) {
 			// explicitly construct the return value using the return expression and the retVal object
-			assertf( returnVals.front()->get_name() != "", "Function %s has unnamed return value\n", funcName.c_str() );
-
-			stmtsToAddBefore.push_back( genCtorDtor( "?{}", dynamic_cast< ObjectDecl *>( returnVals.front() ), returnStmt->get_expr() ) );
+			assertf( returnVals.front()->name != "", "Function %s has unnamed return value\n", funcName.c_str() );
+
+			ObjectDecl * retVal = strict_dynamic_cast< ObjectDecl * >( returnVals.front() );
+			if ( VariableExpr * varExpr = dynamic_cast< VariableExpr * >( returnStmt->expr ) ) {
+				// return statement has already been mutated - don't need to do it again
+				if ( varExpr->var == retVal ) return;
+			}
+			stmtsToAddBefore.push_back( genCtorDtor( "?{}", retVal, returnStmt->get_expr() ) );
 
 			// return the retVal object
-			returnStmt->set_expr( new VariableExpr( returnVals.front() ) );
+			returnStmt->expr = new VariableExpr( returnVals.front() );
 		} // if
 	}
@@ -158,6 +146,6 @@
 		GuardValue( funcName );
 
-		ftype = functionDecl->get_functionType();
-		funcName = functionDecl->get_name();
+		ftype = functionDecl->type;
+		funcName = functionDecl->name;
 	}
 
@@ -165,13 +153,16 @@
 	// which would be incorrect if it is a side-effecting computation.
 	void HoistArrayDimension::hoistArrayDimension( std::list< Declaration * > & translationUnit ) {
-		HoistArrayDimension hoister;
-		hoister.mutateDeclarationList( translationUnit );
-	}
-
-	DeclarationWithType * HoistArrayDimension::mutate( ObjectDecl * objectDecl ) {
+		PassVisitor<HoistArrayDimension> hoister;
+		mutateAll( translationUnit, hoister );
+	}
+
+	void HoistArrayDimension::premutate( ObjectDecl * objectDecl ) {
+		GuardValue( storageClasses );
 		storageClasses = objectDecl->get_storageClasses();
-		DeclarationWithType * temp = Parent::mutate( objectDecl );
+	}
+
+	DeclarationWithType * HoistArrayDimension::postmutate( ObjectDecl * objectDecl ) {
 		hoist( objectDecl->get_type() );
-		return temp;
+		return objectDecl;
 	}
 
@@ -194,5 +185,5 @@
 
 			arrayType->set_dimension( new VariableExpr( arrayDimension ) );
-			addDeclaration( arrayDimension );
+			declsToAddBefore.push_back( arrayDimension );
 
 			hoist( arrayType->get_base() );
@@ -201,9 +192,6 @@
 	}
 
-	DeclarationWithType * HoistArrayDimension::mutate( FunctionDecl *functionDecl ) {
-		ValueGuard< bool > oldInFunc( inFunction );
-		inFunction = true;
-		DeclarationWithType * decl = Parent::mutate( functionDecl );
-		return decl;
+	void HoistArrayDimension::premutate( FunctionDecl * ) {
+		GuardValue( inFunction );
 	}
 
@@ -213,6 +201,6 @@
 	}
 
-	bool CtorDtor::isManaged( Type * type ) const {
-		// at least for now, references are never constructed
+	bool ManagedTypes::isManaged( Type * type ) const {
+		// references are never constructed
 		if ( dynamic_cast< ReferenceType * >( type ) ) return false;
 		// need to clear and reset qualifiers when determining if a type is managed
@@ -221,13 +209,13 @@
 		if ( TupleType * tupleType = dynamic_cast< TupleType * > ( type ) ) {
 			// tuple is also managed if any of its components are managed
-			if ( std::any_of( tupleType->get_types().begin(), tupleType->get_types().end(), [&](Type * type) { return isManaged( type ); }) ) {
+			if ( std::any_of( tupleType->types.begin(), tupleType->types.end(), [&](Type * type) { return isManaged( type ); }) ) {
 				return true;
 			}
 		}
 		// a type is managed if it appears in the map of known managed types, or if it contains any polymorphism (is a type variable or generic type containing a type variable)
-		return managedTypes.find( SymTab::Mangler::mangle( type ) ) != managedTypes.end() || GenPoly::isPolyType( type );
-	}
-
-	bool CtorDtor::isManaged( ObjectDecl * objDecl ) const {
+		return managedTypes.find( SymTab::Mangler::mangleConcrete( type ) ) != managedTypes.end() || GenPoly::isPolyType( type );
+	}
+
+	bool ManagedTypes::isManaged( ObjectDecl * objDecl ) const {
 		Type * type = objDecl->get_type();
 		while ( ArrayType * at = dynamic_cast< ArrayType * >( type ) ) {
@@ -237,5 +225,5 @@
 	}
 
-	void CtorDtor::handleDWT( DeclarationWithType * dwt ) {
+	void ManagedTypes::handleDWT( DeclarationWithType * dwt ) {
 		// if this function is a user-defined constructor or destructor, mark down the type as "managed"
 		if ( ! LinkageSpec::isOverridable( dwt->get_linkage() ) && CodeGen::isCtorDtor( dwt->get_name() ) ) {
@@ -244,7 +232,26 @@
 			Type * type = InitTweak::getPointerBase( params.front()->get_type() );
 			assert( type );
-			managedTypes.insert( SymTab::Mangler::mangle( type ) );
-		}
-	}
+			managedTypes.insert( SymTab::Mangler::mangleConcrete( type ) );
+		}
+	}
+
+	void ManagedTypes::handleStruct( StructDecl * aggregateDecl ) {
+		// don't construct members, but need to take note if there is a managed member,
+		// because that means that this type is also managed
+		for ( Declaration * member : aggregateDecl->get_members() ) {
+			if ( ObjectDecl * field = dynamic_cast< ObjectDecl * >( member ) ) {
+				if ( isManaged( field ) ) {
+					// generic parameters should not play a role in determining whether a generic type is constructed - construct all generic types, so that
+					// polymorphic constructors make generic types managed types
+					StructInstType inst( Type::Qualifiers(), aggregateDecl );
+					managedTypes.insert( SymTab::Mangler::mangleConcrete( &inst ) );
+					break;
+				}
+			}
+		}
+	}
+
+	void ManagedTypes::beginScope() { managedTypes.beginScope(); }
+	void ManagedTypes::endScope() { managedTypes.endScope(); }
 
 	ImplicitCtorDtorStmt * genCtorDtor( const std::string & fname, ObjectDecl * objDecl, Expression * arg ) {
@@ -291,8 +298,8 @@
 
 	void CtorDtor::previsit( ObjectDecl * objDecl ) {
-		handleDWT( objDecl );
+		managedTypes.handleDWT( objDecl );
 		// hands off if @=, extern, builtin, etc.
 		// even if unmanaged, try to construct global or static if initializer is not constexpr, since this is not legal C
-		if ( tryConstruct( objDecl ) && ( isManaged( objDecl ) || ((! inFunction || objDecl->get_storageClasses().is_static ) && ! isConstExpr( objDecl->get_init() ) ) ) ) {
+		if ( tryConstruct( objDecl ) && ( managedTypes.isManaged( objDecl ) || ((! inFunction || objDecl->get_storageClasses().is_static ) && ! isConstExpr( objDecl->get_init() ) ) ) ) {
 			// constructed objects cannot be designated
 			if ( isDesignated( objDecl->get_init() ) ) throw SemanticError( "Cannot include designations in the initializer for a managed Object. If this is really what you want, then initialize with @=.\n", objDecl );
@@ -305,8 +312,9 @@
 
 	void CtorDtor::previsit( FunctionDecl *functionDecl ) {
+		visit_children = false;  // do not try and construct parameters or forall parameters
 		GuardValue( inFunction );
 		inFunction = true;
 
-		handleDWT( functionDecl );
+		managedTypes.handleDWT( functionDecl );
 
 		GuardScope( managedTypes );
@@ -314,12 +322,9 @@
 		for ( auto & tyDecl : functionDecl->get_functionType()->get_forall() ) {
 			for ( DeclarationWithType *& assertion : tyDecl->get_assertions() ) {
-				handleDWT( assertion );
+				managedTypes.handleDWT( assertion );
 			}
 		}
 
-		PassVisitor<CtorDtor> newCtorDtor;
-		newCtorDtor.pass = *this;
-		maybeAccept( functionDecl->get_statements(), newCtorDtor );
-		visit_children = false;  // do not try and construct parameters or forall parameters - must happen after maybeAccept
+		maybeAccept( functionDecl->get_statements(), *visitor );
 	}
 
@@ -327,18 +332,8 @@
 		visit_children = false; // do not try to construct and destruct aggregate members
 
-		// don't construct members, but need to take note if there is a managed member,
-		// because that means that this type is also managed
-		for ( Declaration * member : aggregateDecl->get_members() ) {
-			if ( ObjectDecl * field = dynamic_cast< ObjectDecl * >( member ) ) {
-				if ( isManaged( field ) ) {
-					StructInstType inst( Type::Qualifiers(), aggregateDecl );
-					managedTypes.insert( SymTab::Mangler::mangle( &inst ) );
-					break;
-				}
-			}
-		}
-	}
-
-	void CtorDtor::previsit( __attribute__((unused)) CompoundStmt * compoundStmt ) {
+		managedTypes.handleStruct( aggregateDecl );
+	}
+
+	void CtorDtor::previsit( CompoundStmt * ) {
 		GuardScope( managedTypes );
 	}
Index: src/InitTweak/GenInit.h
===================================================================
--- src/InitTweak/GenInit.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/InitTweak/GenInit.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -16,8 +16,10 @@
 #pragma once
 
-#include <list>               // for list
-#include <string>             // for string
+#include <list>                // for list
+#include <string>              // for string
 
-#include "SynTree/SynTree.h"  // for Visitor Nodes
+#include "SynTree/SynTree.h"   // for Visitor Nodes
+
+#include "GenPoly/ScopedSet.h" // for ScopedSet
 
 namespace InitTweak {
@@ -25,9 +27,26 @@
 	void genInit( std::list< Declaration * > & translationUnit );
 
-  /// generates a single ctor/dtor statement using objDecl as the 'this' parameter and arg as the optional argument
-  ImplicitCtorDtorStmt * genCtorDtor( const std::string & fname, ObjectDecl * objDecl, Expression * arg = nullptr );
+	/// Converts return statements into copy constructor calls on the hidden return variable
+	void fixReturnStatements( std::list< Declaration * > & translationUnit );
+
+	/// generates a single ctor/dtor statement using objDecl as the 'this' parameter and arg as the optional argument
+	ImplicitCtorDtorStmt * genCtorDtor( const std::string & fname, ObjectDecl * objDecl, Expression * arg = nullptr );
 
 	/// creates an appropriate ConstructorInit node which contains a constructor, destructor, and C-initializer
 	ConstructorInit * genCtorInit( ObjectDecl * objDecl );
+
+	class ManagedTypes {
+	public:
+		bool isManaged( ObjectDecl * objDecl ) const ; // determine if object is managed
+		bool isManaged( Type * type ) const; // determine if type is managed
+
+		void handleDWT( DeclarationWithType * dwt ); // add type to managed if ctor/dtor
+		void handleStruct( StructDecl * aggregateDecl ); // add type to managed if child is managed
+
+		void beginScope();
+		void endScope();
+	private:
+		GenPoly::ScopedSet< std::string > managedTypes;
+	};
 } // namespace
 
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/InitTweak/InitTweak.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -1,3 +1,2 @@
-#include <stddef.h>                // for NULL
 #include <algorithm>               // for find, all_of
 #include <cassert>                 // for assertf, assert, strict_dynamic_cast
@@ -23,4 +22,5 @@
 #include "SynTree/Type.h"          // for FunctionType, ArrayType, PointerType
 #include "SynTree/Visitor.h"       // for Visitor, maybeAccept
+#include "Tuples/Tuples.h"         // for Tuples::isTtype
 
 class UntypedValofExpr;
@@ -170,4 +170,13 @@
 	}
 
+	bool InitExpander::addReference() {
+		bool added = false;
+		for ( Expression *& expr : cur ) {
+			expr = new AddressExpr( expr );
+			added = true;
+		}
+		return added;
+	}
+
 	namespace {
 		/// given index i, dimension d, initializer init, and callExpr f, generates
@@ -184,5 +193,5 @@
 			callExpr->get_args().splice( callExpr->get_args().end(), args );
 
-			*out++ = new IfStmt( noLabels, cond, new ExprStmt( noLabels, callExpr ), NULL );
+			*out++ = new IfStmt( noLabels, cond, new ExprStmt( noLabels, callExpr ), nullptr );
 
 			UntypedExpr * increment = new UntypedExpr( new NameExpr( "++?" ) );
@@ -250,18 +259,18 @@
 	// To accomplish this, generate switch statement, consuming all of expander's elements
 	Statement * InitImpl::buildListInit( UntypedExpr * dst, std::list< Expression * > & indices ) {
-		if ( ! init ) return NULL;
+		if ( ! init ) return nullptr;
 		CompoundStmt * block = new CompoundStmt( noLabels );
 		build( dst, indices.begin(), indices.end(), init, back_inserter( block->get_kids() ) );
 		if ( block->get_kids().empty() ) {
 			delete block;
-			return NULL;
+			return nullptr;
 		} else {
-			init = NULL; // init was consumed in creating the list init
+			init = nullptr; // init was consumed in creating the list init
 			return block;
 		}
 	}
 
-	Statement * ExprImpl::buildListInit( __attribute((unused)) UntypedExpr * dst, __attribute((unused)) std::list< Expression * > & indices ) {
-		return NULL;
+	Statement * ExprImpl::buildListInit( UntypedExpr *, std::list< Expression * > & ) {
+		return nullptr;
 	}
 
@@ -270,9 +279,30 @@
 	}
 
-	bool tryConstruct( ObjectDecl * objDecl ) {
+	Type * getTypeofThis( FunctionType * ftype ) {
+		assertf( ftype, "getTypeofThis: nullptr ftype" );
+		ObjectDecl * thisParam = getParamThis( ftype );
+		ReferenceType * refType = strict_dynamic_cast< ReferenceType * >( thisParam->type );
+		return refType->base;
+	}
+
+	ObjectDecl * getParamThis( FunctionType * ftype ) {
+		assertf( ftype, "getParamThis: nullptr ftype" );
+		auto & params = ftype->parameters;
+		assertf( ! params.empty(), "getParamThis: ftype with 0 parameters: %s", toString( ftype ).c_str() );
+		return strict_dynamic_cast< ObjectDecl * >( params.front() );
+	}
+
+	bool tryConstruct( DeclarationWithType * dwt ) {
+		ObjectDecl * objDecl = dynamic_cast< ObjectDecl * >( dwt );
+		if ( ! objDecl ) return false;
 		return ! LinkageSpec::isBuiltin( objDecl->get_linkage() ) &&
-			(objDecl->get_init() == NULL ||
-				( objDecl->get_init() != NULL && objDecl->get_init()->get_maybeConstructed() ))
-			&& ! objDecl->get_storageClasses().is_extern;
+			(objDecl->get_init() == nullptr ||
+				( objDecl->get_init() != nullptr && objDecl->get_init()->get_maybeConstructed() ))
+			&& ! objDecl->get_storageClasses().is_extern
+			&& isConstructable( objDecl->type );
+	}
+
+	bool isConstructable( Type * type ) {
+		return ! dynamic_cast< VarArgsType * >( type ) && ! dynamic_cast< ReferenceType * >( type ) && ! dynamic_cast< FunctionType * >( type ) && ! Tuples::isTtype( type );
 	}
 
@@ -314,5 +344,5 @@
 		collectCtorDtorCalls( stmt, matches );
 		assert( matches.size() <= 1 );
-		return matches.size() == 1 ? matches.front() : NULL;
+		return matches.size() == 1 ? matches.front() : nullptr;
 	}
 
@@ -332,9 +362,9 @@
 			assert( expr );
 			if ( VariableExpr * varExpr = dynamic_cast< VariableExpr * >( expr ) ) {
-				return varExpr->get_var();
+				return varExpr->var;
 			} else if ( MemberExpr * memberExpr = dynamic_cast< MemberExpr * >( expr ) ) {
-				return memberExpr->get_member();
+				return memberExpr->member;
 			} else if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( expr ) ) {
-				return getCalledFunction( castExpr->get_arg() );
+				return getCalledFunction( castExpr->arg );
 			} else if ( UntypedExpr * untypedExpr = dynamic_cast< UntypedExpr * >( expr ) ) {
 				return handleDerefCalledFunction( untypedExpr );
@@ -342,5 +372,7 @@
 				return handleDerefCalledFunction( appExpr );
 			} else if ( AddressExpr * addrExpr = dynamic_cast< AddressExpr * >( expr ) ) {
-				return getCalledFunction( addrExpr->get_arg() );
+				return getCalledFunction( addrExpr->arg );
+			} else if ( CommaExpr * commaExpr = dynamic_cast< CommaExpr * >( expr ) ) {
+				return getCalledFunction( commaExpr->arg2 );
 			}
 			return nullptr;
@@ -359,10 +391,10 @@
 	ApplicationExpr * isIntrinsicCallExpr( Expression * expr ) {
 		ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( expr );
-		if ( ! appExpr ) return NULL;
+		if ( ! appExpr ) return nullptr;
 		DeclarationWithType * function = getCalledFunction( appExpr->get_function() );
 		assertf( function, "getCalledFunction returned nullptr: %s", toString( appExpr->get_function() ).c_str() );
 		// check for Intrinsic only - don't want to remove all overridable ctor/dtors because autogenerated ctor/dtor
 		// will call all member dtors, and some members may have a user defined dtor.
-		return function->get_linkage() == LinkageSpec::Intrinsic ? appExpr : NULL;
+		return function->get_linkage() == LinkageSpec::Intrinsic ? appExpr : nullptr;
 	}
 
@@ -482,5 +514,5 @@
 			return refType->get_base();
 		} else {
-			return NULL;
+			return nullptr;
 		}
 	}
@@ -488,5 +520,5 @@
 	Type * isPointerType( Type * type ) {
 		if ( getPointerBase( type ) ) return type;
-		else return NULL;
+		else return nullptr;
 	}
 
@@ -557,11 +589,11 @@
 	FunctionDecl * isCopyFunction( Declaration * decl, const std::string & fname ) {
 		FunctionDecl * function = dynamic_cast< FunctionDecl * >( decl );
-		if ( ! function ) return 0;
-		if ( function->get_name() != fname ) return 0;
-		FunctionType * ftype = function->get_functionType();
-		if ( ftype->get_parameters().size() != 2 ) return 0;
+		if ( ! function ) return nullptr;
+		if ( function->name != fname ) return nullptr;
+		FunctionType * ftype = function->type;
+		if ( ftype->parameters.size() != 2 ) return nullptr;
 
 		Type * t1 = getPointerBase( ftype->get_parameters().front()->get_type() );
-		Type * t2 = ftype->get_parameters().back()->get_type();
+		Type * t2 = ftype->parameters.back()->get_type();
 		assert( t1 );
 
@@ -583,7 +615,7 @@
 	}
 	FunctionDecl * isDefaultConstructor( Declaration * decl ) {
-		if ( isConstructor( decl->get_name() ) ) {
+		if ( isConstructor( decl->name ) ) {
 			if ( FunctionDecl * func = dynamic_cast< FunctionDecl * >( decl ) ) {
-				if ( func->get_functionType()->get_parameters().size() == 1 ) {
+				if ( func->type->parameters.size() == 1 ) {
 					return func;
 				}
Index: src/InitTweak/InitTweak.h
===================================================================
--- src/InitTweak/InitTweak.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/InitTweak/InitTweak.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -30,9 +30,18 @@
 	FunctionDecl * isCopyFunction( Declaration * decl, const std::string & fname );
 
+	/// returns the base type of the first parameter to a constructor/destructor/assignment function
+	Type * getTypeofThis( FunctionType * ftype );
+
+	/// returns the first parameter of a constructor/destructor/assignment function
+	ObjectDecl * getParamThis( FunctionType * ftype );
+
 	/// transform Initializer into an argument list that can be passed to a call expression
 	std::list< Expression * > makeInitList( Initializer * init );
 
-	/// True if the resolver should try to construct objDecl
-	bool tryConstruct( ObjectDecl * objDecl );
+	/// True if the resolver should try to construct dwt
+	bool tryConstruct( DeclarationWithType * dwt );
+
+	/// True if the type can have a user-defined constructor
+	bool isConstructable( Type * t );
 
 	/// True if the Initializer contains designations
@@ -96,4 +105,5 @@
 		void addArrayIndex( Expression * index, Expression * dimension );
 		void clearArrayIndices();
+		bool addReference();
 
 		class ExpanderImpl;
Index: src/MakeLibCfa.cc
===================================================================
--- src/MakeLibCfa.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/MakeLibCfa.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -119,4 +119,5 @@
 			newDecls.push_back( funcDecl );
 
+			Statement * stmt = nullptr;
 			switch ( opInfo.type ) {
 			  case CodeGen::OT_INDEX:
@@ -128,8 +129,11 @@
 			  case CodeGen::OT_POSTFIXASSIGN:
 			  case CodeGen::OT_INFIXASSIGN:
+					// return the recursive call
+					stmt = new ReturnStmt( noLabels, newExpr );
+					break;
 			  case CodeGen::OT_CTOR:
 			  case CodeGen::OT_DTOR:
-			  	// return the recursive call
-					funcDecl->get_statements()->get_kids().push_back( new ReturnStmt( std::list< Label >(), newExpr ) );
+					// execute the recursive call
+					stmt = new ExprStmt( noLabels, newExpr );
 					break;
 			  case CodeGen::OT_CONSTANT:
@@ -138,4 +142,5 @@
 				assert( false );
 			} // switch
+			funcDecl->get_statements()->push_back( stmt );
 		}
 	} // namespace
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Makefile.in	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -172,11 +172,8 @@
 	GenPoly/driver_cfa_cpp-Box.$(OBJEXT) \
 	GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT) \
-	GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT) \
 	GenPoly/driver_cfa_cpp-ScrubTyVars.$(OBJEXT) \
 	GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT) \
 	GenPoly/driver_cfa_cpp-Specialize.$(OBJEXT) \
-	GenPoly/driver_cfa_cpp-CopyParams.$(OBJEXT) \
 	GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) \
-	GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT) \
 	GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) \
 	InitTweak/driver_cfa_cpp-GenInit.$(OBJEXT) \
@@ -253,5 +250,4 @@
 	SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) \
 	SynTree/driver_cfa_cpp-Mutator.$(OBJEXT) \
-	SynTree/driver_cfa_cpp-AddStmtVisitor.$(OBJEXT) \
 	SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) \
 	SynTree/driver_cfa_cpp-Attribute.$(OBJEXT) \
@@ -497,32 +493,30 @@
 	ControlStruct/ForExprMutator.cc \
 	ControlStruct/ExceptTranslate.cc GenPoly/Box.cc \
-	GenPoly/GenPoly.cc GenPoly/PolyMutator.cc \
-	GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \
-	GenPoly/CopyParams.cc GenPoly/FindFunction.cc \
-	GenPoly/DeclMutator.cc GenPoly/InstantiateGeneric.cc \
-	InitTweak/GenInit.cc InitTweak/FixInit.cc \
-	InitTweak/FixGlobalInit.cc InitTweak/InitTweak.cc \
-	Parser/parser.yy Parser/lex.ll Parser/TypedefTable.cc \
-	Parser/ParseNode.cc Parser/DeclarationNode.cc \
-	Parser/ExpressionNode.cc Parser/StatementNode.cc \
-	Parser/InitializerNode.cc Parser/TypeData.cc \
-	Parser/LinkageSpec.cc Parser/parserutility.cc \
-	ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \
-	ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \
-	ResolvExpr/CommonType.cc ResolvExpr/ConversionCost.cc \
-	ResolvExpr/CastCost.cc ResolvExpr/PtrsCastable.cc \
-	ResolvExpr/AdjustExprType.cc ResolvExpr/AlternativePrinter.cc \
-	ResolvExpr/Resolver.cc ResolvExpr/ResolveTypeof.cc \
-	ResolvExpr/RenameVars.cc ResolvExpr/FindOpenVars.cc \
-	ResolvExpr/PolyCost.cc ResolvExpr/Occurs.cc \
-	ResolvExpr/TypeEnvironment.cc ResolvExpr/CurrentObject.cc \
-	SymTab/Indexer.cc SymTab/Mangler.cc SymTab/Validate.cc \
-	SymTab/FixFunction.cc SymTab/ImplementationType.cc \
-	SymTab/TypeEquality.cc SymTab/Autogen.cc SynTree/Type.cc \
-	SynTree/VoidType.cc SynTree/BasicType.cc \
-	SynTree/PointerType.cc SynTree/ArrayType.cc \
-	SynTree/ReferenceType.cc SynTree/FunctionType.cc \
-	SynTree/ReferenceToType.cc SynTree/TupleType.cc \
-	SynTree/TypeofType.cc SynTree/AttrType.cc \
+	GenPoly/GenPoly.cc GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc \
+	GenPoly/Specialize.cc GenPoly/FindFunction.cc \
+	GenPoly/InstantiateGeneric.cc InitTweak/GenInit.cc \
+	InitTweak/FixInit.cc InitTweak/FixGlobalInit.cc \
+	InitTweak/InitTweak.cc Parser/parser.yy Parser/lex.ll \
+	Parser/TypedefTable.cc Parser/ParseNode.cc \
+	Parser/DeclarationNode.cc Parser/ExpressionNode.cc \
+	Parser/StatementNode.cc Parser/InitializerNode.cc \
+	Parser/TypeData.cc Parser/LinkageSpec.cc \
+	Parser/parserutility.cc ResolvExpr/AlternativeFinder.cc \
+	ResolvExpr/Alternative.cc ResolvExpr/Unify.cc \
+	ResolvExpr/PtrsAssignable.cc ResolvExpr/CommonType.cc \
+	ResolvExpr/ConversionCost.cc ResolvExpr/CastCost.cc \
+	ResolvExpr/PtrsCastable.cc ResolvExpr/AdjustExprType.cc \
+	ResolvExpr/AlternativePrinter.cc ResolvExpr/Resolver.cc \
+	ResolvExpr/ResolveTypeof.cc ResolvExpr/RenameVars.cc \
+	ResolvExpr/FindOpenVars.cc ResolvExpr/PolyCost.cc \
+	ResolvExpr/Occurs.cc ResolvExpr/TypeEnvironment.cc \
+	ResolvExpr/CurrentObject.cc SymTab/Indexer.cc \
+	SymTab/Mangler.cc SymTab/Validate.cc SymTab/FixFunction.cc \
+	SymTab/ImplementationType.cc SymTab/TypeEquality.cc \
+	SymTab/Autogen.cc SynTree/Type.cc SynTree/VoidType.cc \
+	SynTree/BasicType.cc SynTree/PointerType.cc \
+	SynTree/ArrayType.cc SynTree/ReferenceType.cc \
+	SynTree/FunctionType.cc SynTree/ReferenceToType.cc \
+	SynTree/TupleType.cc SynTree/TypeofType.cc SynTree/AttrType.cc \
 	SynTree/VarArgsType.cc SynTree/ZeroOneType.cc \
 	SynTree/Constant.cc SynTree/Expression.cc SynTree/TupleExpr.cc \
@@ -535,8 +529,8 @@
 	SynTree/NamedTypeDecl.cc SynTree/TypeDecl.cc \
 	SynTree/Initializer.cc SynTree/Visitor.cc SynTree/Mutator.cc \
-	SynTree/AddStmtVisitor.cc SynTree/TypeSubstitution.cc \
-	SynTree/Attribute.cc SynTree/VarExprReplacer.cc \
-	Tuples/TupleAssignment.cc Tuples/TupleExpansion.cc \
-	Tuples/Explode.cc Virtual/ExpandCasts.cc
+	SynTree/TypeSubstitution.cc SynTree/Attribute.cc \
+	SynTree/VarExprReplacer.cc Tuples/TupleAssignment.cc \
+	Tuples/TupleExpansion.cc Tuples/Explode.cc \
+	Virtual/ExpandCasts.cc
 MAINTAINERCLEANFILES = Parser/parser.output ${libdir}/${notdir \
 	${cfa_cpplib_PROGRAMS}}
@@ -717,6 +711,4 @@
 GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT): GenPoly/$(am__dirstamp) \
 	GenPoly/$(DEPDIR)/$(am__dirstamp)
-GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT): GenPoly/$(am__dirstamp) \
-	GenPoly/$(DEPDIR)/$(am__dirstamp)
 GenPoly/driver_cfa_cpp-ScrubTyVars.$(OBJEXT): GenPoly/$(am__dirstamp) \
 	GenPoly/$(DEPDIR)/$(am__dirstamp)
@@ -725,10 +717,6 @@
 GenPoly/driver_cfa_cpp-Specialize.$(OBJEXT): GenPoly/$(am__dirstamp) \
 	GenPoly/$(DEPDIR)/$(am__dirstamp)
-GenPoly/driver_cfa_cpp-CopyParams.$(OBJEXT): GenPoly/$(am__dirstamp) \
-	GenPoly/$(DEPDIR)/$(am__dirstamp)
 GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT):  \
 	GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp)
-GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT): GenPoly/$(am__dirstamp) \
-	GenPoly/$(DEPDIR)/$(am__dirstamp)
 GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT):  \
 	GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp)
@@ -929,6 +917,4 @@
 SynTree/driver_cfa_cpp-Mutator.$(OBJEXT): SynTree/$(am__dirstamp) \
 	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/driver_cfa_cpp-AddStmtVisitor.$(OBJEXT):  \
-	SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp)
 SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT):  \
 	SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp)
@@ -1007,11 +993,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-Mutate.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Box.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-CopyParams.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-DeclMutator.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-FindFunction.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-GenPoly.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Lvalue.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-ScrubTyVars.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Specialize.Po@am__quote@
@@ -1056,5 +1039,4 @@
 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-TypeEquality.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Validate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-AddStmtVisitor.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-AddressExpr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-AggregateDecl.Po@am__quote@
@@ -1450,18 +1432,4 @@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-GenPoly.obj `if test -f 'GenPoly/GenPoly.cc'; then $(CYGPATH_W) 'GenPoly/GenPoly.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/GenPoly.cc'; fi`
 
-GenPoly/driver_cfa_cpp-PolyMutator.o: GenPoly/PolyMutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-PolyMutator.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Tpo -c -o GenPoly/driver_cfa_cpp-PolyMutator.o `test -f 'GenPoly/PolyMutator.cc' || echo '$(srcdir)/'`GenPoly/PolyMutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GenPoly/PolyMutator.cc' object='GenPoly/driver_cfa_cpp-PolyMutator.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-PolyMutator.o `test -f 'GenPoly/PolyMutator.cc' || echo '$(srcdir)/'`GenPoly/PolyMutator.cc
-
-GenPoly/driver_cfa_cpp-PolyMutator.obj: GenPoly/PolyMutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-PolyMutator.obj -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Tpo -c -o GenPoly/driver_cfa_cpp-PolyMutator.obj `if test -f 'GenPoly/PolyMutator.cc'; then $(CYGPATH_W) 'GenPoly/PolyMutator.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/PolyMutator.cc'; fi`
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GenPoly/PolyMutator.cc' object='GenPoly/driver_cfa_cpp-PolyMutator.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-PolyMutator.obj `if test -f 'GenPoly/PolyMutator.cc'; then $(CYGPATH_W) 'GenPoly/PolyMutator.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/PolyMutator.cc'; fi`
-
 GenPoly/driver_cfa_cpp-ScrubTyVars.o: GenPoly/ScrubTyVars.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-ScrubTyVars.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-ScrubTyVars.Tpo -c -o GenPoly/driver_cfa_cpp-ScrubTyVars.o `test -f 'GenPoly/ScrubTyVars.cc' || echo '$(srcdir)/'`GenPoly/ScrubTyVars.cc
@@ -1506,18 +1474,4 @@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-Specialize.obj `if test -f 'GenPoly/Specialize.cc'; then $(CYGPATH_W) 'GenPoly/Specialize.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/Specialize.cc'; fi`
 
-GenPoly/driver_cfa_cpp-CopyParams.o: GenPoly/CopyParams.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-CopyParams.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-CopyParams.Tpo -c -o GenPoly/driver_cfa_cpp-CopyParams.o `test -f 'GenPoly/CopyParams.cc' || echo '$(srcdir)/'`GenPoly/CopyParams.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-CopyParams.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-CopyParams.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GenPoly/CopyParams.cc' object='GenPoly/driver_cfa_cpp-CopyParams.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-CopyParams.o `test -f 'GenPoly/CopyParams.cc' || echo '$(srcdir)/'`GenPoly/CopyParams.cc
-
-GenPoly/driver_cfa_cpp-CopyParams.obj: GenPoly/CopyParams.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-CopyParams.obj -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-CopyParams.Tpo -c -o GenPoly/driver_cfa_cpp-CopyParams.obj `if test -f 'GenPoly/CopyParams.cc'; then $(CYGPATH_W) 'GenPoly/CopyParams.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/CopyParams.cc'; fi`
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-CopyParams.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-CopyParams.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GenPoly/CopyParams.cc' object='GenPoly/driver_cfa_cpp-CopyParams.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-CopyParams.obj `if test -f 'GenPoly/CopyParams.cc'; then $(CYGPATH_W) 'GenPoly/CopyParams.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/CopyParams.cc'; fi`
-
 GenPoly/driver_cfa_cpp-FindFunction.o: GenPoly/FindFunction.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-FindFunction.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-FindFunction.Tpo -c -o GenPoly/driver_cfa_cpp-FindFunction.o `test -f 'GenPoly/FindFunction.cc' || echo '$(srcdir)/'`GenPoly/FindFunction.cc
@@ -1534,18 +1488,4 @@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-FindFunction.obj `if test -f 'GenPoly/FindFunction.cc'; then $(CYGPATH_W) 'GenPoly/FindFunction.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/FindFunction.cc'; fi`
 
-GenPoly/driver_cfa_cpp-DeclMutator.o: GenPoly/DeclMutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-DeclMutator.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-DeclMutator.Tpo -c -o GenPoly/driver_cfa_cpp-DeclMutator.o `test -f 'GenPoly/DeclMutator.cc' || echo '$(srcdir)/'`GenPoly/DeclMutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-DeclMutator.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-DeclMutator.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GenPoly/DeclMutator.cc' object='GenPoly/driver_cfa_cpp-DeclMutator.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-DeclMutator.o `test -f 'GenPoly/DeclMutator.cc' || echo '$(srcdir)/'`GenPoly/DeclMutator.cc
-
-GenPoly/driver_cfa_cpp-DeclMutator.obj: GenPoly/DeclMutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-DeclMutator.obj -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-DeclMutator.Tpo -c -o GenPoly/driver_cfa_cpp-DeclMutator.obj `if test -f 'GenPoly/DeclMutator.cc'; then $(CYGPATH_W) 'GenPoly/DeclMutator.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/DeclMutator.cc'; fi`
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-DeclMutator.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-DeclMutator.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='GenPoly/DeclMutator.cc' object='GenPoly/driver_cfa_cpp-DeclMutator.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-DeclMutator.obj `if test -f 'GenPoly/DeclMutator.cc'; then $(CYGPATH_W) 'GenPoly/DeclMutator.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/DeclMutator.cc'; fi`
-
 GenPoly/driver_cfa_cpp-InstantiateGeneric.o: GenPoly/InstantiateGeneric.cc
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc
@@ -2583,18 +2523,4 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Mutator.obj `if test -f 'SynTree/Mutator.cc'; then $(CYGPATH_W) 'SynTree/Mutator.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Mutator.cc'; fi`
-
-SynTree/driver_cfa_cpp-AddStmtVisitor.o: SynTree/AddStmtVisitor.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-AddStmtVisitor.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-AddStmtVisitor.Tpo -c -o SynTree/driver_cfa_cpp-AddStmtVisitor.o `test -f 'SynTree/AddStmtVisitor.cc' || echo '$(srcdir)/'`SynTree/AddStmtVisitor.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-AddStmtVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-AddStmtVisitor.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='SynTree/AddStmtVisitor.cc' object='SynTree/driver_cfa_cpp-AddStmtVisitor.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-AddStmtVisitor.o `test -f 'SynTree/AddStmtVisitor.cc' || echo '$(srcdir)/'`SynTree/AddStmtVisitor.cc
-
-SynTree/driver_cfa_cpp-AddStmtVisitor.obj: SynTree/AddStmtVisitor.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-AddStmtVisitor.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-AddStmtVisitor.Tpo -c -o SynTree/driver_cfa_cpp-AddStmtVisitor.obj `if test -f 'SynTree/AddStmtVisitor.cc'; then $(CYGPATH_W) 'SynTree/AddStmtVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/AddStmtVisitor.cc'; fi`
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-AddStmtVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-AddStmtVisitor.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='SynTree/AddStmtVisitor.cc' object='SynTree/driver_cfa_cpp-AddStmtVisitor.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-AddStmtVisitor.obj `if test -f 'SynTree/AddStmtVisitor.cc'; then $(CYGPATH_W) 'SynTree/AddStmtVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/AddStmtVisitor.cc'; fi`
 
 SynTree/driver_cfa_cpp-TypeSubstitution.o: SynTree/TypeSubstitution.cc
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Parser/DeclarationNode.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 12:34:05 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Thr Aug 10 17:02:00 2017
-// Update Count     : 1021
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sat Sep 23 18:16:48 2017
+// Update Count     : 1024
 //
 
@@ -40,6 +40,6 @@
 using namespace std;
 
-// These must remain in the same order as the corresponding DeclarationNode enumerations.
-const char * DeclarationNode::basicTypeNames[] = { "void", "_Bool", "char", "int", "float", "double", "long double", "NoBasicTypeNames" };
+// These must harmonize with the corresponding DeclarationNode enumerations.
+const char * DeclarationNode::basicTypeNames[] = { "void", "_Bool", "char", "int", "float", "double", "long double", "int128", "float80", "float128", "NoBasicTypeNames" };
 const char * DeclarationNode::complexTypeNames[] = { "_Complex", "_Imaginary", "NoComplexTypeNames" };
 const char * DeclarationNode::signednessNames[] = { "signed", "unsigned", "NoSignednessNames" };
@@ -1031,8 +1031,9 @@
 
 	if ( variable.tyClass != NoTypeClass ) {
-		static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Dtype, TypeDecl::Ftype, TypeDecl::Ttype };
-		assertf( sizeof(kindMap)/sizeof(kindMap[0] == NoTypeClass-1), "DeclarationNode::build: kindMap is out of sync." );
+		// otype is internally converted to dtype + otype parameters
+		static const TypeDecl::Kind kindMap[] = { TypeDecl::Dtype, TypeDecl::Dtype, TypeDecl::Ftype, TypeDecl::Ttype };
+		assertf( sizeof(kindMap)/sizeof(kindMap[0]) == NoTypeClass, "DeclarationNode::build: kindMap is out of sync." );
 		assertf( variable.tyClass < sizeof(kindMap)/sizeof(kindMap[0]), "Variable's tyClass is out of bounds." );
-		TypeDecl * ret = new TypeDecl( *name, Type::StorageClasses(), nullptr, kindMap[ variable.tyClass ], variable.initializer ? variable.initializer->buildType() : nullptr );
+		TypeDecl * ret = new TypeDecl( *name, Type::StorageClasses(), nullptr, kindMap[ variable.tyClass ], variable.tyClass == Otype, variable.initializer ? variable.initializer->buildType() : nullptr );
 		buildList( variable.assertions, ret->get_assertions() );
 		return ret;
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Parser/ExpressionNode.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Sep 14 23:09:34 2017
-// Update Count     : 690
+// Last Modified On : Wed Sep 27 22:51:55 2017
+// Update Count     : 781
 //
 
@@ -60,4 +60,37 @@
 static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
 
+static const char * lnthsInt[2][6] = {
+	{ "int8_t", "int16_t", "int32_t", "int64_t", "size_t", },
+	{ "uint8_t", "uint16_t", "uint32_t", "uint64_t", "size_t", }
+}; // lnthsInt
+
+static inline void checkLNInt( string & str, int & lnth, int & size ) {
+	string::size_type posn = str.find_first_of( "lL" ), start = posn;
+  if ( posn == string::npos ) return;
+	size = 4;											// assume largest size
+	posn += 1;											// advance to size
+	if ( str[posn] == '8' ) {							// 8
+		lnth = 0;
+	} else if ( str[posn] == '1' ) {
+		posn += 1;
+		if ( str[posn] == '6' ) {						// 16
+			lnth = 1;
+		} else {										// 128
+			posn += 1;
+			lnth = 5;
+		} // if
+	} else {
+		if ( str[posn] == '3' ) {						// 32
+			lnth = 2;
+		} else if ( str[posn] == '6' ) {				// 64
+			lnth = 3;
+		} else {
+			assertf( false, "internal error, bad integral length %s", str.c_str() );
+		} // if
+		posn += 1;
+	} // if
+	str.erase( start, posn - start + 1 );				// remove length suffix
+} // checkLNInt
+
 static void sepNumeric( string & str, string & units ) {
 	string::size_type posn = str.find_first_of( "`" );
@@ -69,15 +102,17 @@
 
 Expression * build_constantInteger( string & str ) {
-	static const BasicType::Kind kind[2][5] = {
+	static const BasicType::Kind kind[2][6] = {
 		// short (h) must be before char (hh)
-		{ BasicType::ShortSignedInt, BasicType::SignedChar, BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
-		{ BasicType::ShortUnsignedInt, BasicType::UnsignedChar, BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
+		{ BasicType::ShortSignedInt, BasicType::SignedChar, BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt, BasicType::SignedInt128, },
+		{ BasicType::ShortUnsignedInt, BasicType::UnsignedChar, BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt, BasicType::UnsignedInt128, },
 	};
 
-	string units;										// units
+	string units;
 	sepNumeric( str, units );							// separate constant from units
 
 	bool dec = true, Unsigned = false;					// decimal, unsigned constant
-	int size;											// 0 => short, 1 => char, 2 => int, 3 => long int, 4 => long long int, 5 => size_t
+	int size;											// 0 => short, 1 => char, 2 => int, 3 => long int, 4 => long long int, 5 => int128
+	int lnth = -1;										// literal length
+
 	unsigned long long int v;							// converted integral value
 	size_t last = str.length() - 1;						// last character of constant
@@ -140,4 +175,6 @@
 			} // if
 			str.erase( last - size - 1, size + 1 );		// remove 'h'/"hh"
+		} else {										// suffix "ln" ?
+			checkLNInt( str, lnth, size );
 		} // if
 	} else if ( checkL( str[ last ] ) ) {				// suffix 'l' ?
@@ -163,14 +200,23 @@
 		str.erase( last - size, size + 1 );				// remove 'h'/"hh"
 	} else if ( checkZ( str[last] ) ) {					// suffix 'z' ?
-		size = 5;
+		lnth = 4;
 		str.erase( last, 1 );							// remove 'z'
-	} // if
-
+	} else {											// suffix "ln" ?
+		checkLNInt( str, lnth, size );
+	} // if
+
+	assert( 0 <= size && size < 6 );
+	// Constant type is correct for overload resolving.
 	ret = new ConstantExpr( Constant( new BasicType( noQualifiers, kind[Unsigned][size] ), str, v ) );
-	if ( Unsigned && size < 2 ) {						// less than int ?
-		// int i = -1uh => 65535 not -1, so cast is necessary for unsigned, which eliminates warnings for large values.
+	if ( Unsigned && size < 2 ) {						// hh or h, less than int ?
+		// int i = -1uh => 65535 not -1, so cast is necessary for unsigned, which unfortunately eliminates warnings for large values.
 		ret = new CastExpr( ret, new BasicType( Type::Qualifiers(), kind[Unsigned][size] ) );
-	} else if ( size == 5 ) {							// explicit cast to size_t
-		ret = new CastExpr( ret, new TypeInstType( Type::Qualifiers(), "size_t", false ) );
+	} else if ( lnth != -1 ) {							// explicit length ?
+		if ( lnth == 5 ) {								// int128 ?
+			size = 5;
+			ret = new CastExpr( ret, new BasicType( Type::Qualifiers(), kind[Unsigned][size] ) );
+		} else {
+			ret = new CastExpr( ret, new TypeInstType( Type::Qualifiers(), lnthsInt[Unsigned][lnth], false ) );
+		} // if
 	} // if
   CLEANUP:
@@ -182,4 +228,26 @@
 	return ret;
 } // build_constantInteger
+
+
+static inline void checkLNFloat( string & str, int & lnth, int & size ) {
+	string::size_type posn = str.find_first_of( "lL" ), start = posn;
+  if ( posn == string::npos ) return;
+	size = 2;											// assume largest size
+	lnth = 0;
+	posn += 1;											// advance to size
+	if ( str[posn] == '3' ) {							// 32
+		size = 0;
+	} else if ( str[posn] == '6' ) {					// 64
+		size = 1;
+	} else if ( str[posn] == '8' || str[posn] == '1' ) { // 80, 128
+		size = 2;
+		if ( str[posn] == '1' ) posn += 1;
+	} else {
+		assertf( false, "internal error, bad floating point length %s", str.c_str() );
+	} // if
+	posn += 1;
+	str.erase( start, posn - start + 1 );				// remove length suffix
+} // checkLNFloat
+
 
 Expression * build_constantFloat( string & str ) {
@@ -189,9 +257,10 @@
 	};
 
-	string units;										// units
+	string units;
 	sepNumeric( str, units );							// separate constant from units
 
 	bool complx = false;								// real, complex
-	int size = 1;										// 0 => float, 1 => double (default), 2 => long double
+	int size = 1;										// 0 => float, 1 => double, 2 => long double
+	int lnth = -1;										// literal length
 	// floating-point constant has minimum of 2 characters: 1. or .1
 	size_t last = str.length() - 1;
@@ -211,4 +280,7 @@
 	} else if ( checkL( str[last] ) ) {					// long double ?
 		size = 2;
+	} else {
+		size = 1;										// double (default)
+		checkLNFloat( str, lnth, size );
 	} // if
 	if ( ! complx && checkI( str[last - 1] ) ) {		// imaginary ?
@@ -216,5 +288,9 @@
 	} // if
 
+	assert( 0 <= size && size < 3 );
 	Expression * ret = new ConstantExpr( Constant( new BasicType( noQualifiers, kind[complx][size] ), str, v ) );
+	if ( lnth != -1 ) {									// explicit length ?
+		ret = new CastExpr( ret, new BasicType( Type::Qualifiers(), kind[complx][size] ) );
+	} // if
 	if ( units.length() != 0 ) {
 		ret = new UntypedExpr( new NameExpr( units ), { ret } );
@@ -321,5 +397,5 @@
 
 NameExpr * build_varref( const string * name ) {
-	NameExpr * expr = new NameExpr( *name, nullptr );
+	NameExpr * expr = new NameExpr( *name );
 	delete name;
 	return expr;
@@ -412,5 +488,5 @@
 	list< Expression * > args;
 	buildMoveList( expr_node, args );
-	return new UntypedExpr( maybeMoveBuild< Expression >(function), args, nullptr );
+	return new UntypedExpr( maybeMoveBuild< Expression >(function), args );
 } // build_func
 
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Parser/ParseNode.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Sep 14 23:09:39 2017
-// Update Count     : 815
+// Last Modified On : Sat Sep 23 18:11:22 2017
+// Update Count     : 821
 //
 
@@ -47,6 +47,4 @@
 #define YYLTYPE_IS_DECLARED 1 /* alert the parser that we have our own definition */
 
-extern char * yyfilename;
-extern int yylineno;
 extern YYLTYPE yylloc;
 
@@ -197,18 +195,18 @@
 class DeclarationNode : public ParseNode {
   public:
-	enum BasicType { Void, Bool, Char, Int, Float, Double, LongDouble, NoBasicType };
+	// These enumerations must harmonize with their names.
+	enum BasicType { Void, Bool, Char, Int, Float, Double, LongDouble, Int128, Float80, Float128, NoBasicType };
+	static const char * basicTypeNames[];
 	enum ComplexType { Complex, Imaginary, NoComplexType };
+	static const char * complexTypeNames[];
 	enum Signedness { Signed, Unsigned, NoSignedness };
+	static const char * signednessNames[];
 	enum Length { Short, Long, LongLong, NoLength };
+	static const char * lengthNames[];
 	enum Aggregate { Struct, Union, Trait, Coroutine, Monitor, Thread, NoAggregate };
+	static const char * aggregateNames[];
 	enum TypeClass { Otype, Dtype, Ftype, Ttype, NoTypeClass };
+	static const char * typeClassNames[];
 	enum BuiltinType { Valist, Zero, One, NoBuiltinType };
-
-	static const char * basicTypeNames[];
-	static const char * complexTypeNames[];
-	static const char * signednessNames[];
-	static const char * lengthNames[];
-	static const char * aggregateNames[];
-	static const char * typeClassNames[];
 	static const char * builtinTypeNames[];
 
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Parser/StatementNode.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -234,5 +234,5 @@
 		target,
 		maybeMoveBuild<Statement >( stmt ),
-		maybeMoveBuild<Expression>( when )
+		notZeroExpr( maybeMoveBuild<Expression>( when ) )
 	});
 
@@ -250,8 +250,8 @@
 	delete targetExpr;
 
-	node->clauses.push_back( WaitForStmt::Clause{
+	node->clauses.insert( node->clauses.begin(), WaitForStmt::Clause{
 		std::move( target ),
 		maybeMoveBuild<Statement >( stmt ),
-		maybeMoveBuild<Expression>( when )
+		notZeroExpr( maybeMoveBuild<Expression>( when ) )
 	});
 
@@ -265,9 +265,9 @@
 		node->timeout.time      = maybeMoveBuild<Expression>( timeout );
 		node->timeout.statement = maybeMoveBuild<Statement >( stmt    );
-		node->timeout.condition = maybeMoveBuild<Expression>( when    );
+		node->timeout.condition = notZeroExpr( maybeMoveBuild<Expression>( when ) );
 	}
 	else {
-		node->orelse.statement  = maybeMoveBuild<Statement >( stmt    );
-		node->orelse.condition  = maybeMoveBuild<Expression>( when    );
+		node->orelse.statement  = maybeMoveBuild<Statement >( stmt );
+		node->orelse.condition  = notZeroExpr( maybeMoveBuild<Expression>( when ) );
 	}
 
@@ -280,17 +280,11 @@
 	node->timeout.time      = maybeMoveBuild<Expression>( timeout );
 	node->timeout.statement = maybeMoveBuild<Statement >( stmt    );
-	node->timeout.condition = maybeMoveBuild<Expression>( when    );
+	node->timeout.condition = notZeroExpr( maybeMoveBuild<Expression>( when ) );
 
 	node->orelse.statement = maybeMoveBuild<Statement >( else_stmt );
-	node->orelse.condition = maybeMoveBuild<Expression>( else_when );
+	node->orelse.condition  = notZeroExpr( maybeMoveBuild<Expression>( else_when ) );
 
 	return node;
 }
-
-// WaitForStmt::Target build_waitfor( const std::string * name, ExpressionNode * arguments ) {
-// 	 return WaitForStmt::Clause{
-
-// 	 };
-// }
 
 Statement *build_compound( StatementNode *first ) {
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Parser/TypeData.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Sep  1 23:13:38 2017
-// Update Count     : 569
+// Last Modified On : Mon Sep 25 18:33:41 2017
+// Update Count     : 587
 //
 
@@ -98,4 +98,5 @@
 } // TypeData::TypeData
 
+
 TypeData::~TypeData() {
 	delete base;
@@ -161,4 +162,5 @@
 	} // switch
 } // TypeData::~TypeData
+
 
 TypeData * TypeData::clone() const {
@@ -235,4 +237,5 @@
 } // TypeData::clone
 
+
 void TypeData::print( ostream &os, int indent ) const {
 	for ( int i = 0; i < Type::NumTypeQualifier; i += 1 ) {
@@ -399,10 +402,12 @@
 } // TypeData::print
 
+
 template< typename ForallList >
 void buildForall( const DeclarationNode * firstNode, ForallList &outputList ) {
 	buildList( firstNode, outputList );
-	for ( typename ForallList::iterator i = outputList.begin(); i != outputList.end(); ++i ) {
+	auto n = firstNode;
+	for ( typename ForallList::iterator i = outputList.begin(); i != outputList.end(); ++i, n = (DeclarationNode*)n->get_next() ) {
 		TypeDecl * td = static_cast<TypeDecl *>(*i);
-		if ( td->get_kind() == TypeDecl::Any ) {
+		if ( n->variable.tyClass == DeclarationNode::Otype ) {
 			// add assertion parameters to `type' tyvars in reverse order
 			// add dtor:  void ^?{}(T *)
@@ -430,5 +435,6 @@
 		} // if
 	} // for
-}
+} // buildForall
+
 
 Type * typebuild( const TypeData * td ) {
@@ -477,4 +483,5 @@
 } // typebuild
 
+
 TypeData * typeextractAggregate( const TypeData * td, bool toplevel ) {
 	TypeData * ret = nullptr;
@@ -504,8 +511,14 @@
 } // typeextractAggregate
 
+
 Type::Qualifiers buildQualifiers( const TypeData * td ) {
 	return td->qualifiers;
 } // buildQualifiers
 
+
+static string genTSError( string msg, DeclarationNode::BasicType basictype ) {
+	throw SemanticError( string( "invalid type specifier \"" ) + msg + "\" for type \"" + DeclarationNode::basicTypeNames[basictype] + "\"." );
+} // genTSError
+
 Type * buildBasicType( const TypeData * td ) {
 	BasicType::Kind ret;
@@ -513,8 +526,10 @@
 	switch ( td->basictype ) {
 	  case DeclarationNode::Void:
-		if ( td->signedness != DeclarationNode::NoSignedness && td->length != DeclarationNode::NoLength ) {
-			throw SemanticError( "invalid type specifier \"void\" in type: ", td );
-		} // if
-
+		if ( td->signedness != DeclarationNode::NoSignedness ) {
+			genTSError( DeclarationNode::signednessNames[ td->signedness ], td->basictype );
+		} // if
+		if ( td->length != DeclarationNode::NoLength ) {
+			genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
+		} // if
 		return new VoidType( buildQualifiers( td ) );
 		break;
@@ -522,8 +537,8 @@
 	  case DeclarationNode::Bool:
 		if ( td->signedness != DeclarationNode::NoSignedness ) {
-			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::signednessNames[ td->signedness ] + " in type: ", td );
+			genTSError( DeclarationNode::signednessNames[ td->signedness ], td->basictype );
 		} // if
 		if ( td->length != DeclarationNode::NoLength ) {
-			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::lengthNames[ td->length ] + " in type: ", td );
+			genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
 		} // if
 
@@ -538,5 +553,5 @@
 
 		if ( td->length != DeclarationNode::NoLength ) {
-			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::lengthNames[ td->length ] + " in type: ", td );
+			genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
 		} // if
 
@@ -557,5 +572,14 @@
 		break;
 
+	  case DeclarationNode::Int128:
+		ret = td->signedness == 1 ? BasicType::UnsignedInt128 : BasicType::SignedInt128;
+		if ( td->length != DeclarationNode::NoLength ) {
+			genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
+		} // if
+		break;
+
 	  case DeclarationNode::Float:
+	  case DeclarationNode::Float80:
+	  case DeclarationNode::Float128:
 	  case DeclarationNode::Double:
 	  case DeclarationNode::LongDouble:					// not set until below
@@ -568,11 +592,11 @@
 	  FloatingPoint: ;
 		if ( td->signedness != DeclarationNode::NoSignedness ) {
-			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::signednessNames[ td->signedness ] + " in type: ", td );
+			genTSError( DeclarationNode::signednessNames[ td->signedness ], td->basictype );
 		} // if
 		if ( td->length == DeclarationNode::Short || td->length == DeclarationNode::LongLong ) {
-			throw SemanticError( string( "invalid type specifier " ) + DeclarationNode::lengthNames[ td->length ] + " in type: ", td );
+			genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
 		} // if
 		if ( td->basictype == DeclarationNode::Float && td->length == DeclarationNode::Long ) {
-			throw SemanticError( "invalid type specifier \"long\" in type: ", td );
+			genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
 		} // if
 		if ( td->length == DeclarationNode::Long ) {
@@ -593,5 +617,5 @@
 		goto Integral;
 	  default:
-	  	assert(false);
+	  	assertf( false, "unknown basic type" );
 		return nullptr;
 	} // switch
@@ -601,4 +625,5 @@
 	return bt;
 } // buildBasicType
+
 
 PointerType * buildPointer( const TypeData * td ) {
@@ -612,4 +637,5 @@
 	return pt;
 } // buildPointer
+
 
 ArrayType * buildArray( const TypeData * td ) {
@@ -626,4 +652,5 @@
 } // buildArray
 
+
 ReferenceType * buildReference( const TypeData * td ) {
 	ReferenceType * rt;
@@ -637,4 +664,5 @@
 } // buildReference
 
+
 AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ) {
 	assert( td->kind == TypeData::Aggregate );
@@ -665,4 +693,5 @@
 	return at;
 } // buildAggregate
+
 
 ReferenceToType * buildComAggInst( const TypeData * type, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ) {
@@ -722,4 +751,5 @@
 } // buildAggInst
 
+
 ReferenceToType * buildAggInst( const TypeData * td ) {
 	assert( td->kind == TypeData::AggregateInst );
@@ -761,4 +791,5 @@
 } // buildAggInst
 
+
 NamedTypeDecl * buildSymbolic( const TypeData * td, const string & name, Type::StorageClasses scs, LinkageSpec::Spec linkage ) {
 	assert( td->kind == TypeData::Symbolic );
@@ -768,5 +799,5 @@
 		ret = new TypedefDecl( name, scs, typebuild( td->base ), linkage );
 	} else {
-		ret = new TypeDecl( name, scs, typebuild( td->base ), TypeDecl::Any );
+		ret = new TypeDecl( name, scs, typebuild( td->base ), TypeDecl::Dtype, true );
 	} // if
 	buildList( td->symbolic.params, ret->get_parameters() );
@@ -774,4 +805,5 @@
 	return ret;
 } // buildSymbolic
+
 
 EnumDecl * buildEnum( const TypeData * td, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ) {
@@ -790,4 +822,5 @@
 } // buildEnum
 
+
 TypeInstType * buildSymbolicInst( const TypeData * td ) {
 	assert( td->kind == TypeData::SymbolicInst );
@@ -797,4 +830,5 @@
 	return ret;
 } // buildSymbolicInst
+
 
 TupleType * buildTuple( const TypeData * td ) {
@@ -807,4 +841,5 @@
 } // buildTuple
 
+
 TypeofType * buildTypeof( const TypeData * td ) {
 	assert( td->kind == TypeData::Typeof );
@@ -813,4 +848,5 @@
 	return new TypeofType( buildQualifiers( td ), td->typeexpr->build() );
 } // buildTypeof
+
 
 Declaration * buildDecl( const TypeData * td, const string &name, Type::StorageClasses scs, Expression * bitfieldWidth, Type::FuncSpecifiers funcSpec, LinkageSpec::Spec linkage, Expression *asmName, Initializer * init, std::list< Attribute * > attributes ) {
@@ -836,4 +872,5 @@
 	return nullptr;
 } // buildDecl
+
 
 FunctionType * buildFunction( const TypeData * td ) {
@@ -857,4 +894,5 @@
 	return ft;
 } // buildFunction
+
 
 // Transform KR routine declarations into C99 routine declarations:
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Parser/lex.ll	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Sun Sep 10 22:29:15 2017
- * Update Count     : 620
+ * Last Modified On : Wed Oct 25 13:53:56 2017
+ * Update Count     : 634
  */
 
@@ -93,5 +93,6 @@
 				// numeric constants, CFA: '_' in constant
 hex_quad {hex}("_"?{hex}){3}
-length ("ll"|"LL"|[lL])|("hh"|"HH"|[hH])
+size_opt (8|16|32|64|128)?
+length ("ll"|"LL"|[lL]{size_opt})|("hh"|"HH"|[hH])
 integer_suffix_opt ("_"?(([uU]({length}?[iI]?)|([iI]{length}))|([iI]({length}?[uU]?)|([uU]{length}))|({length}([iI]?[uU]?)|([uU][iI]))|[zZ]))?{user_suffix_opt}
 
@@ -109,5 +110,7 @@
 				// GCC: D (double) and iI (imaginary) suffixes, and DL (long double)
 exponent "_"?[eE]"_"?[+-]?{decimal_digits}
-floating_suffix ([fFdDlL]?[iI]?)|([iI][lLfFdD])
+floating_size 32|64|80|128
+floating_length ([fFdDlL]|[lL]{floating_size})
+floating_suffix ({floating_length}?[iI]?)|([iI]{floating_length})
 floating_suffix_opt ("_"?({floating_suffix}|"DL"))?{user_suffix_opt}
 decimal_digits ({decimal})|({decimal}({decimal}|"_")*{decimal})
@@ -230,9 +233,12 @@
 __extension__	{ KEYWORD_RETURN(EXTENSION); }			// GCC
 extern			{ KEYWORD_RETURN(EXTERN); }
-fallthrough		{ KEYWORD_RETURN(FALLTHRU); }			// CFA
 fallthru		{ KEYWORD_RETURN(FALLTHRU); }			// CFA
+fallthrough		{ KEYWORD_RETURN(FALLTHROUGH); }		// CFA
 finally			{ KEYWORD_RETURN(FINALLY); }			// CFA
 float			{ KEYWORD_RETURN(FLOAT); }
-__float128		{ KEYWORD_RETURN(FLOAT); }				// GCC
+__float80		{ KEYWORD_RETURN(FLOAT80); }			// GCC
+float80			{ KEYWORD_RETURN(FLOAT80); }			// GCC
+__float128		{ KEYWORD_RETURN(FLOAT128); }			// GCC
+float128		{ KEYWORD_RETURN(FLOAT128); }			// GCC
 for				{ KEYWORD_RETURN(FOR); }
 forall			{ KEYWORD_RETURN(FORALL); }				// CFA
@@ -249,6 +255,6 @@
 __inline__		{ KEYWORD_RETURN(INLINE); }				// GCC
 int				{ KEYWORD_RETURN(INT); }
-__int128		{ KEYWORD_RETURN(INT); }				// GCC
-__int128_t		{ KEYWORD_RETURN(INT); }				// GCC
+__int128		{ KEYWORD_RETURN(INT128); }				// GCC
+int128			{ KEYWORD_RETURN(INT128); }				// GCC
 __label__		{ KEYWORD_RETURN(LABEL); }				// GCC
 long			{ KEYWORD_RETURN(LONG); }
@@ -285,5 +291,4 @@
 __typeof		{ KEYWORD_RETURN(TYPEOF); }				// GCC
 __typeof__		{ KEYWORD_RETURN(TYPEOF); }				// GCC
-__uint128_t		{ KEYWORD_RETURN(INT); }				// GCC
 union			{ KEYWORD_RETURN(UNION); }
 unsigned		{ KEYWORD_RETURN(UNSIGNED); }
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Parser/parser.yy	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Sep 14 23:07:12 2017
-// Update Count     : 2815
+// Last Modified On : Wed Oct 25 12:28:54 2017
+// Update Count     : 2893
 //
 
@@ -43,5 +43,5 @@
 #define YYDEBUG_LEXER_TEXT (yylval)						// lexer loads this up each time
 #define YYDEBUG 1										// get the pretty debugging code to compile
-#define YYERROR_VERBOSE
+#define YYERROR_VERBOSE									// more information in syntax errors
 
 #undef __GNUC_MINOR__
@@ -117,25 +117,22 @@
 bool forall = false;									// aggregate have one or more forall qualifiers ?
 
-# define YYLLOC_DEFAULT(Cur, Rhs, N)                            \
-do                                                              \
-	if (N) {                                                      \
-		(Cur).first_line   = YYRHSLOC(Rhs, 1).first_line;           \
-		(Cur).first_column = YYRHSLOC(Rhs, 1).first_column;         \
-		(Cur).last_line    = YYRHSLOC(Rhs, N).last_line;            \
-		(Cur).last_column  = YYRHSLOC(Rhs, N).last_column;          \
-		(Cur).filename     = YYRHSLOC(Rhs, 1).filename;             \
-	} else {                                                      \
-		(Cur).first_line   = (Cur).last_line   =                    \
-			YYRHSLOC(Rhs, 0).last_line;                               \
-		(Cur).first_column = (Cur).last_column =                    \
-			YYRHSLOC(Rhs, 0).last_column;                             \
-		(Cur).filename     = YYRHSLOC(Rhs, 0).filename;             \
-	}                                                             \
-while (0)
+// https://www.gnu.org/software/bison/manual/bison.html#Location-Type
+#define YYLLOC_DEFAULT(Cur, Rhs, N)												\
+if ( N ) {																		\
+	(Cur).first_line   = YYRHSLOC( Rhs, 1 ).first_line;							\
+	(Cur).first_column = YYRHSLOC( Rhs, 1 ).first_column;						\
+	(Cur).last_line    = YYRHSLOC( Rhs, N ).last_line;							\
+	(Cur).last_column  = YYRHSLOC( Rhs, N ).last_column;						\
+	(Cur).filename     = YYRHSLOC( Rhs, 1 ).filename;							\
+} else {																		\
+	(Cur).first_line   = (Cur).last_line = YYRHSLOC( Rhs, 0 ).last_line;		\
+	(Cur).first_column = (Cur).last_column = YYRHSLOC( Rhs, 0 ).last_column;	\
+	(Cur).filename     = YYRHSLOC( Rhs, 0 ).filename;							\
+}
 %}
 
 %define parse.error verbose
 
-// Types declaration
+// Types declaration for productions
 %union
 {
@@ -173,4 +170,5 @@
 %token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED
 %token BOOL COMPLEX IMAGINARY							// C99
+%token INT128 FLOAT80 FLOAT128							// GCC
 %token ZERO_T ONE_T										// CFA
 %token VALIST											// GCC
@@ -182,5 +180,5 @@
 %token ATTRIBUTE EXTENSION								// GCC
 %token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN
-%token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH WHEN WAITFOR // CFA
+%token CHOOSE DISABLE ENABLE FALLTHRU FALLTHROUGH TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH WHEN WAITFOR // CFA
 %token ASM												// C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
 %token ALIGNAS ALIGNOF GENERIC STATICASSERT				// C11
@@ -252,4 +250,5 @@
 %type<sn> exception_statement			handler_clause				finally_clause
 %type<catch_kind> handler_key
+%type<sn> mutex_statement
 %type<en> when_clause					when_clause_opt				waitfor						timeout
 %type<sn> waitfor_statement
@@ -363,5 +362,5 @@
 %precedence ELSE	// token precedence for start of else clause in IF/WAITFOR statement
 
-%locations
+%locations			// support location tracking for error messages
 
 %start translation_unit									// parse-tree root
@@ -458,14 +457,8 @@
 	| '(' compound_statement ')'						// GCC, lambda expression
 		{ $$ = new ExpressionNode( new StmtExpr( dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >($2) ) ) ); }
-	| primary_expression '{' argument_expression_list '}' // CFA, constructor call
-		{
-			Token fn;
-			fn.str = new std::string( "?{}" );			// location undefined - use location of '{'?
-			$$ = new ExpressionNode( new ConstructorExpr( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ) );
-		}
 	| type_name '.' no_attr_identifier					// CFA, nested type
-		{ $$ = nullptr; }								// FIX ME
+		{ throw SemanticError("Qualified names are currently unimplemented."); $$ = nullptr; }								// FIX ME
 	| type_name '.' '[' push field_list pop ']'			// CFA, nested type / tuple field selector
-		{ $$ = nullptr; }								// FIX ME
+		{ throw SemanticError("Qualified names are currently unimplemented."); $$ = nullptr; }								// FIX ME
 	;
 
@@ -478,4 +471,10 @@
 		// equivalent to the old x[i,j].
 		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, $4 ) ); }
+	| postfix_expression '{' argument_expression_list '}' // CFA, constructor call
+		{
+			Token fn;
+			fn.str = new std::string( "?{}" );			// location undefined - use location of '{'?
+			$$ = new ExpressionNode( new ConstructorExpr( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ) );
+		}
 	| postfix_expression '(' argument_expression_list ')'
 		{ $$ = new ExpressionNode( build_func( $1, $3 ) ); }
@@ -809,4 +808,5 @@
 	| jump_statement
 	| with_statement
+	| mutex_statement
 	| waitfor_statement
 	| exception_statement
@@ -974,8 +974,13 @@
 	;
 
+fall_through_name:										// CFA
+	FALLTHRU
+	| FALLTHROUGH
+	;
+
 fall_through:											// CFA
-	FALLTHRU
+	fall_through_name
 		{ $$ = nullptr; }
-	| FALLTHRU ';'
+	| fall_through_name ';'
 		{ $$ = nullptr; }
 	;
@@ -1033,4 +1038,10 @@
 	;
 
+// If MUTEX becomes a general qualifier, there are shift/reduce conflicts, so change syntax to "with mutex".
+mutex_statement:
+	MUTEX '(' argument_expression_list ')' statement
+		{ $$ = nullptr; }								// FIX ME
+	;
+
 when_clause:
 	WHEN '(' comma_expression ')'
@@ -1551,6 +1562,4 @@
 	| VOLATILE
 		{ $$ = DeclarationNode::newTypeQualifier( Type::Volatile ); }
-	| MUTEX
-		{ $$ = DeclarationNode::newTypeQualifier( Type::Mutex ); }
 	| ATOMIC
 		{ $$ = DeclarationNode::newTypeQualifier( Type::Atomic ); }
@@ -1606,28 +1615,34 @@
 
 basic_type_name:
-	CHAR
+	VOID
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Void ); }
+	| BOOL												// C99
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
+	| CHAR
 		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Char ); }
+	| INT
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Int ); }
+	| INT128
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Int128 ); }
+	| FLOAT
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Float ); }
+	| FLOAT80
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Float80 ); }
+	| FLOAT128
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Float128 ); }
 	| DOUBLE
 		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Double ); }
-	| FLOAT
-		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Float ); }
-	| INT
-		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Int ); }
-	| LONG
-		{ $$ = DeclarationNode::newLength( DeclarationNode::Long ); }
-	| SHORT
-		{ $$ = DeclarationNode::newLength( DeclarationNode::Short ); }
+	| COMPLEX											// C99
+		{ $$ = DeclarationNode::newComplexType( DeclarationNode::Complex ); }
+	| IMAGINARY											// C99
+		{ $$ = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); }
 	| SIGNED
 		{ $$ = DeclarationNode::newSignedNess( DeclarationNode::Signed ); }
 	| UNSIGNED
 		{ $$ = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); }
-	| VOID
-		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Void ); }
-	| BOOL												// C99
-		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
-	| COMPLEX											// C99
-		{ $$ = DeclarationNode::newComplexType( DeclarationNode::Complex ); }
-	| IMAGINARY											// C99
-		{ $$ = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); }
+	| SHORT
+		{ $$ = DeclarationNode::newLength( DeclarationNode::Short ); }
+	| LONG
+		{ $$ = DeclarationNode::newLength( DeclarationNode::Long ); }
 	| ZERO_T
 		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::Zero ); }
@@ -2476,4 +2491,6 @@
 	| TYPEDEFname
 	| TYPEGENname
+	| FALLTHROUGH
+		{ $$ = Token{ new string( "fallthrough" ), { nullptr, -1 } }; }
 	| CONST
 		{ $$ = Token{ new string( "__const__" ), { nullptr, -1 } }; }
@@ -2699,4 +2716,6 @@
 	paren_identifier attribute_list_opt
 		{ $$ = $1->addQualifiers( $2 ); }
+	| '&' MUTEX paren_identifier attribute_list_opt
+		{ $$ = $3->addPointer( DeclarationNode::newPointer( DeclarationNode::newTypeQualifier( Type::Mutex ), OperKinds::AddressOf ) )->addQualifiers( $4 ); }
 	| identifier_parameter_ptr
 	| identifier_parameter_array attribute_list_opt
@@ -2739,4 +2758,5 @@
 //
 //		typedef int foo;
+//		forall( otype T ) struct foo;
 //		int f( int foo ); // redefine typedef name in new scope
 //
@@ -2746,4 +2766,6 @@
 	typedef attribute_list_opt
 		{ $$ = $1->addQualifiers( $2 ); }
+	| '&' MUTEX typedef attribute_list_opt
+		{ $$ = $3->addPointer( DeclarationNode::newPointer( DeclarationNode::newTypeQualifier( Type::Mutex ), OperKinds::AddressOf ) )->addQualifiers( $4 ); }
 	| type_parameter_ptr
 	| type_parameter_array attribute_list_opt
@@ -2892,4 +2914,6 @@
 abstract_parameter_declarator:
 	abstract_parameter_ptr
+	| '&' MUTEX attribute_list_opt
+		{ $$ = DeclarationNode::newPointer( DeclarationNode::newTypeQualifier( Type::Mutex ), OperKinds::AddressOf )->addQualifiers( $3 ); }
 	| abstract_parameter_array attribute_list_opt
 		{ $$ = $1->addQualifiers( $2 ); }
Index: src/Parser/parserutility.cc
===================================================================
--- src/Parser/parserutility.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Parser/parserutility.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -29,4 +29,5 @@
 
 Expression *notZeroExpr( Expression *orig ) {
+	if( !orig ) return nullptr;
 	UntypedExpr *comparison = new UntypedExpr( new NameExpr( "?!=?" ) );
 	comparison->get_args().push_back( orig );
Index: src/ResolvExpr/AdjustExprType.cc
===================================================================
--- src/ResolvExpr/AdjustExprType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/AdjustExprType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -14,4 +14,5 @@
 //
 
+#include "Common/PassVisitor.h"
 #include "SymTab/Indexer.h"       // for Indexer
 #include "SynTree/Declaration.h"  // for TypeDecl, TypeDecl::Kind::Ftype
@@ -21,25 +22,27 @@
 
 namespace ResolvExpr {
-	class AdjustExprType : public Mutator {
-		typedef Mutator Parent;
-		using Parent::mutate;
+	class AdjustExprType : public WithShortCircuiting {
 	  public:
 		AdjustExprType( const TypeEnvironment &env, const SymTab::Indexer &indexer );
+		void premutate( VoidType * ) { visit_children = false; }
+		void premutate( BasicType * ) { visit_children = false; }
+		void premutate( PointerType * ) { visit_children = false; }
+		void premutate( ArrayType * ) { visit_children = false; }
+		void premutate( FunctionType * ) { visit_children = false; }
+		void premutate( StructInstType * ) { visit_children = false; }
+		void premutate( UnionInstType * ) { visit_children = false; }
+		void premutate( EnumInstType * ) { visit_children = false; }
+		void premutate( TraitInstType * ) { visit_children = false; }
+		void premutate( TypeInstType * ) { visit_children = false; }
+		void premutate( TupleType * ) { visit_children = false; }
+		void premutate( VarArgsType * ) { visit_children = false; }
+		void premutate( ZeroType * ) { visit_children = false; }
+		void premutate( OneType * ) { visit_children = false; }
+
+		Type * postmutate( ArrayType *arrayType );
+		Type * postmutate( FunctionType *functionType );
+		Type * postmutate( TypeInstType *aggregateUseType );
+
 	  private:
-		virtual Type* mutate( VoidType *voidType );
-		virtual Type* mutate( BasicType *basicType );
-		virtual Type* mutate( PointerType *pointerType );
-		virtual Type* mutate( ArrayType *arrayType );
-		virtual Type* mutate( FunctionType *functionType );
-		virtual Type* mutate( StructInstType *aggregateUseType );
-		virtual Type* mutate( UnionInstType *aggregateUseType );
-		virtual Type* mutate( EnumInstType *aggregateUseType );
-		virtual Type* mutate( TraitInstType *aggregateUseType );
-		virtual Type* mutate( TypeInstType *aggregateUseType );
-		virtual Type* mutate( TupleType *tupleType );
-		virtual Type* mutate( VarArgsType *varArgsType );
-		virtual Type* mutate( ZeroType *zeroType );
-		virtual Type* mutate( OneType *oneType );
-
 		const TypeEnvironment &env;
 		const SymTab::Indexer &indexer;
@@ -47,5 +50,5 @@
 
 	void adjustExprType( Type *&type, const TypeEnvironment &env, const SymTab::Indexer &indexer ) {
-		AdjustExprType adjuster( env, indexer );
+		PassVisitor<AdjustExprType> adjuster( env, indexer );
 		Type *newType = type->acceptMutator( adjuster );
 		type = newType;
@@ -56,45 +59,16 @@
 	}
 
-	Type *AdjustExprType::mutate( VoidType *voidType ) {
-		return voidType;
-	}
-
-	Type *AdjustExprType::mutate( BasicType *basicType ) {
-		return basicType;
-	}
-
-	Type *AdjustExprType::mutate( PointerType *pointerType ) {
-		return pointerType;
-	}
-
-	Type *AdjustExprType::mutate( ArrayType *arrayType ) {
-		// need to recursively mutate the base type in order for multi-dimensional arrays to work.
-		PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), arrayType->get_base()->clone()->acceptMutator( *this ) );
+	Type * AdjustExprType::postmutate( ArrayType * arrayType ) {
+		PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), arrayType->base );
+		arrayType->base = nullptr;
 		delete arrayType;
 		return pointerType;
 	}
 
-	Type *AdjustExprType::mutate( FunctionType *functionType ) {
-		PointerType *pointerType = new PointerType( Type::Qualifiers(), functionType );
-		return pointerType;
+	Type * AdjustExprType::postmutate( FunctionType * functionType ) {
+		return new PointerType( Type::Qualifiers(), functionType );
 	}
 
-	Type *AdjustExprType::mutate( StructInstType *aggregateUseType ) {
-		return aggregateUseType;
-	}
-
-	Type *AdjustExprType::mutate( UnionInstType *aggregateUseType ) {
-		return aggregateUseType;
-	}
-
-	Type *AdjustExprType::mutate( EnumInstType *aggregateUseType ) {
-		return aggregateUseType;
-	}
-
-	Type *AdjustExprType::mutate( TraitInstType *aggregateUseType ) {
-		return aggregateUseType;
-	}
-
-	Type *AdjustExprType::mutate( TypeInstType *typeInst ) {
+	Type * AdjustExprType::postmutate( TypeInstType * typeInst ) {
 		EqvClass eqvClass;
 		if ( env.lookup( typeInst->get_name(), eqvClass ) ) {
@@ -113,20 +87,4 @@
 		return typeInst;
 	}
-
-	Type *AdjustExprType::mutate( TupleType *tupleType ) {
-		return tupleType;
-	}
-
-	Type *AdjustExprType::mutate( VarArgsType *varArgsType ) {
-		return varArgsType;
-	}
-
-	Type *AdjustExprType::mutate( ZeroType *zeroType ) {
-		return zeroType;
-	}
-
-	Type *AdjustExprType::mutate( OneType *oneType ) {
-		return oneType;
-	}
 } // namespace ResolvExpr
 
Index: src/ResolvExpr/Alternative.cc
===================================================================
--- src/ResolvExpr/Alternative.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/Alternative.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -66,17 +66,17 @@
 	}
 
-	void Alternative::print( std::ostream &os, int indent ) const {
-		os << std::string( indent, ' ' ) << "Cost " << cost << ": ";
+	void Alternative::print( std::ostream &os, Indenter indent ) const {
+		os << "Cost " << cost << ": ";
 		if ( expr ) {
-			expr->print( os, indent );
-			os << "(types:" << std::endl;
-			os << std::string( indent+4, ' ' );
-			expr->get_result()->print( os, indent + 4 );
-			os << std::endl << ")" << std::endl;
+			expr->print( os, indent+1 );
+			os << std::endl << indent << "(types:" << std::endl;
+			os << indent+1;
+			expr->result->print( os, indent+1 );
+			os << std::endl << indent << ")" << std::endl;
 		} else {
 			os << "Null expression!" << std::endl;
 		} // if
-		os << std::string( indent, ' ' ) << "Environment: ";
-		env.print( os, indent+2 );
+		os << indent << "Environment: ";
+		env.print( os, indent+1 );
 		os << std::endl;
 	}
Index: src/ResolvExpr/Alternative.h
===================================================================
--- src/ResolvExpr/Alternative.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/Alternative.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -39,5 +39,5 @@
 		~Alternative();
 
-		void print( std::ostream &os, int indent = 0 ) const;
+		void print( std::ostream &os, Indenter indent = {} ) const;
 
 		Cost cost;
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -76,5 +76,6 @@
 
 	namespace {
-		void printAlts( const AltList &list, std::ostream &os, int indent = 0 ) {
+		void printAlts( const AltList &list, std::ostream &os, unsigned int indentAmt = 0 ) {
+			Indenter indent = { Indenter::tabsize, indentAmt };
 			for ( AltList::const_iterator i = list.begin(); i != list.end(); ++i ) {
 				i->print( os, indent );
@@ -122,4 +123,8 @@
 						)
 						mapPlace->second.isAmbiguous = true;
+					} else {
+						PRINT(
+							std::cerr << "cost " << candidate->cost << " loses to " << mapPlace->second.candidate->cost << std::endl;
+						)
 					}
 				} else {
@@ -127,8 +132,4 @@
 				}
 			}
-
-			PRINT(
-				std::cerr << "there are " << selected.size() << " alternatives before elimination" << std::endl;
-			)
 
 			// accept the alternatives that were unambiguous
@@ -145,12 +146,12 @@
 			expr->get_result()->accept( global_renamer );
 		}
-
-		void referenceToRvalueConversion( Expression *& expr ) {
-			if ( dynamic_cast< ReferenceType * >( expr->get_result() ) ) {
-				// cast away reference from expr
-				expr = new CastExpr( expr, expr->get_result()->stripReferences()->clone() );
-			}
-		}
 	} // namespace
+
+	void referenceToRvalueConversion( Expression *& expr ) {
+		if ( dynamic_cast< ReferenceType * >( expr->get_result() ) ) {
+			// cast away reference from expr
+			expr = new CastExpr( expr, expr->get_result()->stripReferences()->clone() );
+		}
+	}
 
 	template< typename InputIterator, typename OutputIterator >
@@ -175,15 +176,11 @@
 	}
 
-	void AlternativeFinder::find( Expression *expr, bool adjust, bool prune ) {
+	void AlternativeFinder::find( Expression *expr, bool adjust, bool prune, bool failFast ) {
 		expr->accept( *this );
-		if ( alternatives.empty() ) {
+		if ( failFast && alternatives.empty() ) {
 			throw SemanticError( "No reasonable alternatives for expression ", expr );
 		}
-		for ( AltList::iterator i = alternatives.begin(); i != alternatives.end(); ++i ) {
-			if ( adjust ) {
-				adjustExprType( i->expr->get_result(), i->env, indexer );
-			}
-		}
 		if ( prune ) {
+			auto oldsize = alternatives.size();
 			PRINT(
 				std::cerr << "alternatives before prune:" << std::endl;
@@ -192,18 +189,27 @@
 			AltList::iterator oldBegin = alternatives.begin();
 			pruneAlternatives( alternatives.begin(), alternatives.end(), front_inserter( alternatives ) );
-			if ( alternatives.begin() == oldBegin ) {
+			if ( failFast && alternatives.begin() == oldBegin ) {
 				std::ostringstream stream;
 				AltList winners;
 				findMinCost( alternatives.begin(), alternatives.end(), back_inserter( winners ) );
-				stream << "Cannot choose between " << winners.size() << " alternatives for expression ";
+				stream << "Cannot choose between " << winners.size() << " alternatives for expression\n";
 				expr->print( stream );
-				stream << "Alternatives are:";
-				printAlts( winners, stream, 8 );
+				stream << "Alternatives are:\n";
+				printAlts( winners, stream, 1 );
 				throw SemanticError( stream.str() );
 			}
 			alternatives.erase( oldBegin, alternatives.end() );
+			PRINT(
+				std::cerr << "there are " << oldsize << " alternatives before elimination" << std::endl;
+			)
 			PRINT(
 				std::cerr << "there are " << alternatives.size() << " alternatives after elimination" << std::endl;
 			)
+		}
+		// adjust types after pruning so that types substituted by pruneAlternatives are correctly adjusted
+		for ( AltList::iterator i = alternatives.begin(); i != alternatives.end(); ++i ) {
+			if ( adjust ) {
+				adjustExprType( i->expr->get_result(), i->env, indexer );
+			}
 		}
 
@@ -215,6 +221,14 @@
 	}
 
-	void AlternativeFinder::findWithAdjustment( Expression *expr, bool prune ) {
-		find( expr, true, prune );
+	void AlternativeFinder::findWithAdjustment( Expression *expr ) {
+		find( expr, true );
+	}
+
+	void AlternativeFinder::findWithoutPrune( Expression * expr ) {
+		find( expr, true, false );
+	}
+
+	void AlternativeFinder::maybeFind( Expression * expr ) {
+		find( expr, true, true, false );
 	}
 
@@ -299,5 +313,5 @@
 		Cost convCost = conversionCost( actualType, formalType, indexer, env );
 		PRINT(
-			std::cerr << std::endl << "cost is" << convCost << std::endl;
+			std::cerr << std::endl << "cost is " << convCost << std::endl;
 		)
 		if ( convCost == Cost::infinity ) {
@@ -305,4 +319,7 @@
 		}
 		convCost.incPoly( polyCost( formalType, env, indexer ) + polyCost( actualType, env, indexer ) );
+		PRINT(
+			std::cerr << "cost with polycost is " << convCost << std::endl;
+		)
 		return convCost;
 	}
@@ -310,9 +327,8 @@
 	Cost computeExpressionConversionCost( Expression *& actualExpr, Type * formalType, const SymTab::Indexer &indexer, const TypeEnvironment & env ) {
 		Cost convCost = computeConversionCost( actualExpr->result, formalType, indexer, env );
-		// if ( convCost != Cost::zero ) {
-
-		// xxx - temporary -- ignore poly cost, since this causes some polymorphic functions to be cast, which causes the specialize
-		// pass to try to specialize them, which currently does not work. Once that is fixed, remove the next 3 lines and uncomment the
-		// previous line.
+
+		// if there is a non-zero conversion cost, ignoring poly cost, then the expression requires conversion.
+		// ignore poly cost for now, since this requires resolution of the cast to infer parameters and this
+		// does not currently work for the reason stated below.
 		Cost tmpCost = convCost;
 		tmpCost.incPoly( -tmpCost.get_polyCost() );
@@ -357,4 +373,5 @@
 				if ( function->get_isVarArgs() ) {
 					convCost.incUnsafe();
+					PRINT( std::cerr << "end of formals with varargs function: inc unsafe: " << convCost << std::endl; ; )
 					// convert reference-typed expressions to value-typed expressions
 					referenceToRvalueConversion( *actualExpr );
@@ -365,13 +382,4 @@
 			}
 			Type * formalType = (*formal)->get_type();
-			PRINT(
-				std::cerr << std::endl << "converting ";
-				actualType->print( std::cerr, 8 );
-				std::cerr << std::endl << " to ";
-				formalType->print( std::cerr, 8 );
-				std::cerr << std::endl << "environment is: ";
-				alt.env.print( std::cerr, 8 );
-				std::cerr << std::endl;
-			)
 			convCost += computeExpressionConversionCost( *actualExpr, formalType, indexer, alt.env );
 			++formal; // can't be in for-loop update because of the continue
@@ -481,5 +489,5 @@
 				Alternative newerAlt( newAlt );
 				newerAlt.env = newEnv;
-				assert( (*candidate)->get_uniqueId() );
+				assertf( (*candidate)->get_uniqueId(), "Assertion candidate does not have a unique ID: %s", toString( *candidate ).c_str() );
 				DeclarationWithType *candDecl = static_cast< DeclarationWithType* >( Declaration::declFromId( (*candidate)->get_uniqueId() ) );
 
@@ -507,7 +515,6 @@
 					std::cerr << std::endl;
 				)
-				ApplicationExpr *appExpr = static_cast< ApplicationExpr* >( newerAlt.expr );
 				// follow the current assertion's ID chain to find the correct set of inferred parameters to add the candidate to (i.e. the set of inferred parameters belonging to the entity which requested the assertion parameter).
-				InferredParams * inferParameters = &appExpr->get_inferParams();
+				InferredParams * inferParameters = &newerAlt.expr->get_inferParams();
 				for ( UniqueId id : cur->second.idChain ) {
 					inferParameters = (*inferParameters)[ id ].inferParams.get();
@@ -786,21 +793,21 @@
 		
 		return ! results.empty();
-	}
+	}	
 
 	template<typename OutputIterator>
-	void AlternativeFinder::makeFunctionAlternatives( const Alternative& func, 
-			FunctionType* funcType, const std::vector< AlternativeFinder >& args, 
+	void AlternativeFinder::makeFunctionAlternatives( const Alternative &func, 
+			FunctionType *funcType, const std::vector< AlternativeFinder > &args, 
 			OutputIterator out ) {
 		OpenVarSet funcOpenVars;
 		AssertionSet funcNeed, funcHave;
-		TypeEnvironment funcEnv;
+		TypeEnvironment funcEnv( func.env );
 		makeUnifiableVars( funcType, funcOpenVars, funcNeed );
 		// add all type variables as open variables now so that those not used in the parameter 
 		// list are still considered open.
 		funcEnv.add( funcType->get_forall() );
-
+		
 		if ( targetType && ! targetType->isVoid() && ! funcType->get_returnVals().empty() ) {
 			// attempt to narrow based on expected target type
-			Type* returnType = funcType->get_returnVals().front()->get_type();
+			Type * returnType = funcType->get_returnVals().front()->get_type();
 			if ( ! unify( returnType, targetType, funcEnv, funcNeed, funcHave, funcOpenVars, 
 					indexer ) ) {
@@ -905,14 +912,11 @@
 
 		// find function operators
+		static NameExpr *opExpr = new NameExpr( "?()" );
 		AlternativeFinder funcOpFinder( indexer, env );
-		NameExpr *opExpr = new NameExpr( "?()" );
-		try {
-			funcOpFinder.findWithAdjustment( opExpr );
-		} catch( SemanticError &e ) {
-			// it's ok if there aren't any defined function ops
-		}
+		// it's ok if there aren't any defined function ops
+		funcOpFinder.maybeFind( opExpr);
 		PRINT(
 			std::cerr << "known function ops:" << std::endl;
-			printAlts( funcOpFinder.alternatives, std::cerr, 8 );
+			printAlts( funcOpFinder.alternatives, std::cerr, 1 );
 		)
 
@@ -1028,5 +1032,5 @@
 	bool isLvalue( Expression *expr ) {
 		// xxx - recurse into tuples?
-		return expr->has_result() && ( expr->get_result()->get_lvalue() || dynamic_cast< ReferenceType * >( expr->get_result() ) );
+		return expr->result && ( expr->get_result()->get_lvalue() || dynamic_cast< ReferenceType * >( expr->get_result() ) );
 	}
 
@@ -1103,9 +1107,5 @@
 				thisCost.incSafe( discardedValues );
 				Alternative newAlt( restructureCast( i->expr->clone(), toType ), i->env, i->cost, thisCost );
-				// xxx - this doesn't work at the moment, since inferParameters requires an ApplicationExpr as the alternative.
-				// Once this works, it should be possible to infer parameters on a cast expression and specialize any function.
-
-				// inferParameters( needAssertions, haveAssertions, newAlt, openVars, back_inserter( candidates ) );
-				candidates.emplace_back( std::move( newAlt ) );
+				inferParameters( needAssertions, haveAssertions, newAlt, openVars, back_inserter( candidates ) );
 			} // if
 		} // for
@@ -1123,6 +1123,5 @@
 		AlternativeFinder finder( indexer, env );
 		// don't prune here, since it's guaranteed all alternatives will have the same type
-		// (giving the alternatives different types is half of the point of ConstructorExpr nodes)
-		finder.findWithAdjustment( castExpr->get_arg(), false );
+		finder.findWithoutPrune( castExpr->get_arg() );
 		for ( Alternative & alt : finder.alternatives ) {
 			alternatives.push_back( Alternative(
@@ -1163,5 +1162,5 @@
 		PRINT( std::cerr << "nameExpr is " << nameExpr->get_name() << std::endl; )
 		for ( std::list< DeclarationWithType* >::iterator i = declList.begin(); i != declList.end(); ++i ) {
-			VariableExpr newExpr( *i, nameExpr->get_argName() );
+			VariableExpr newExpr( *i );
 			alternatives.push_back( Alternative( newExpr.clone(), env, Cost::zero ) );
 			PRINT(
@@ -1398,5 +1397,4 @@
 		findSubExprs( tupleExpr->get_exprs().begin(), tupleExpr->get_exprs().end(), back_inserter( subExprAlternatives ) );
 		std::list< AltList > possibilities;
-		// TODO re-write to use iterative method
 		combos( subExprAlternatives.begin(), subExprAlternatives.end(), back_inserter( possibilities ) );
 		for ( std::list< AltList >::const_iterator i = possibilities.begin(); i != possibilities.end(); ++i ) {
@@ -1422,5 +1420,5 @@
 		// don't prune here, since it's guaranteed all alternatives will have the same type
 		// (giving the alternatives different types is half of the point of ConstructorExpr nodes)
-		finder.findWithAdjustment( ctorExpr->get_callExpr(), false );
+		finder.findWithoutPrune( ctorExpr->get_callExpr() );
 		for ( Alternative & alt : finder.alternatives ) {
 			alternatives.push_back( Alternative( new ConstructorExpr( alt.expr->clone() ), alt.env, alt.cost ) );
@@ -1459,5 +1457,5 @@
 		// O(N^2) checks of d-types with e-types
 		for ( InitAlternative & initAlt : initExpr->get_initAlts() ) {
-			Type * toType = resolveTypeof( initAlt.type, indexer );
+			Type * toType = resolveTypeof( initAlt.type->clone(), indexer );
 			SymTab::validateType( toType, &indexer );
 			adjustExprType( toType, env, indexer );
@@ -1488,5 +1486,6 @@
 					// count one safe conversion for each value that is thrown away
 					thisCost.incSafe( discardedValues );
-					candidates.push_back( Alternative( new InitExpr( restructureCast( alt.expr->clone(), toType ), initAlt.designation->clone() ), newEnv, alt.cost, thisCost ) );
+					Alternative newAlt( new InitExpr( restructureCast( alt.expr->clone(), toType ), initAlt.designation->clone() ), newEnv, alt.cost, thisCost );
+					inferParameters( needAssertions, haveAssertions, newAlt, openVars, back_inserter( candidates ) );
 				}
 			}
Index: src/ResolvExpr/AlternativeFinder.h
===================================================================
--- src/ResolvExpr/AlternativeFinder.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/AlternativeFinder.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -61,7 +61,11 @@
 		}
 
-		void find( Expression *expr, bool adjust = false, bool prune = true );
+		void find( Expression *expr, bool adjust = false, bool prune = true, bool failFast = true );
 		/// Calls find with the adjust flag set; adjustment turns array and function types into equivalent pointer types
-		void findWithAdjustment( Expression *expr, bool prune = true );
+		void findWithAdjustment( Expression *expr );
+		/// Calls find with the adjust flag set and prune flag unset; pruning ensures there is at most one alternative per result type
+		void findWithoutPrune( Expression *expr );
+		/// Calls find with the adjust and prune flags set, failFast flags unset; fail fast ensures that there is at least one resulting alternative
+		void maybeFind( Expression *expr );
 		AltList &get_alternatives() { return alternatives; }
 
@@ -77,4 +81,9 @@
 		const SymTab::Indexer &get_indexer() const { return indexer; }
 		const TypeEnvironment &get_environ() const { return env; }
+
+		/// Runs a new alternative finder on each element in [begin, end)
+		/// and writes each alternative finder to out.
+		template< typename InputIterator, typename OutputIterator >
+		void findSubExprs( InputIterator begin, InputIterator end, OutputIterator out );
 	  private:
 		virtual void visit( ApplicationExpr *applicationExpr );
@@ -108,8 +117,4 @@
 		virtual void visit( StmtExpr *stmtExpr );
 		virtual void visit( UntypedInitExpr *initExpr );
-		/// Runs a new alternative finder on each element in [begin, end)
-		/// and writes each alternative finder to out.
-		template< typename InputIterator, typename OutputIterator >
-		void findSubExprs( InputIterator begin, InputIterator end, OutputIterator out );
 
 		/// Adds alternatives for anonymous members
@@ -134,4 +139,5 @@
 
 	Expression *resolveInVoidContext( Expression *expr, const SymTab::Indexer &indexer, TypeEnvironment &env );
+	void referenceToRvalueConversion( Expression *& expr );
 
 	template< typename InputIterator, typename OutputIterator >
Index: src/ResolvExpr/CastCost.cc
===================================================================
--- src/ResolvExpr/CastCost.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/CastCost.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -24,4 +24,9 @@
 #include "typeops.h"                     // for typesCompatibleIgnoreQualifiers
 
+#if 0
+#define PRINT(x) x
+#else
+#define PRINT(x)
+#endif
 
 namespace ResolvExpr {
@@ -52,9 +57,21 @@
 			} // if
 		} // if
+
+		PRINT(
+			std::cerr << "castCost ::: src is ";
+			src->print( std::cerr );
+			std::cerr << std::endl << "dest is ";
+			dest->print( std::cerr );
+			std::cerr << std::endl << "env is" << std::endl;
+			env.print( std::cerr, 8 );
+		)
+
 		if ( typesCompatibleIgnoreQualifiers( src, dest, indexer, env ) ) {
+			PRINT( std::cerr << "compatible!" << std::endl; )
 			return Cost::zero;
 		} else if ( dynamic_cast< VoidType* >( dest ) ) {
 			return Cost::safe;
 		} else if ( ReferenceType * refType = dynamic_cast< ReferenceType * > ( dest ) ) {
+			PRINT( std::cerr << "conversionCost: dest is reference" << std::endl; )
 			return convertToReferenceCost( src, refType, indexer, env, [](Type * t1, Type * t2, const TypeEnvironment & env, const SymTab::Indexer & indexer) {
 				return ptrsCastable( t1, t2, env, indexer );
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/CommonType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 06:59:27 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 16 16:24:31 2017
-// Update Count     : 7
+// Last Modified On : Mon Sep 25 15:18:17 2017
+// Update Count     : 9
 //
 
@@ -61,29 +61,20 @@
 	};
 
-	Type * handleReference( ReferenceType * refType, Type * other, bool widenFirst, bool widenSecond, const SymTab::Indexer &indexer, TypeEnvironment & env, const OpenVarSet &openVars ) {
-		Type * result = nullptr, * common = nullptr;
+	Type * handleReference( Type * t1, Type * t2, bool widenFirst, bool widenSecond, const SymTab::Indexer &indexer, TypeEnvironment & env, const OpenVarSet &openVars ) {
+		Type * common = nullptr;
 		AssertionSet have, need;
 		OpenVarSet newOpen( openVars );
 		// need unify to bind type variables
-		if ( unify( refType->get_base(), other, env, have, need, newOpen, indexer, common ) ) {
-			// std::cerr << "unify success" << std::endl;
-			if ( widenSecond ) {
-				// std::cerr << "widen second" << std::endl;
-				if ( widenFirst || other->get_qualifiers() <= refType->get_qualifiers() ) {
-					result = new ReferenceType( refType->get_qualifiers(), common ); // refType->clone();
-					result->get_qualifiers() |= other->get_qualifiers();
-				}
-			} else if ( widenFirst ) {
-				// std::cerr << "widen first" << std::endl;
-				if ( widenSecond || refType->get_qualifiers() <= other->get_qualifiers() ) {
-					result = common;
-					result->get_qualifiers() |= refType->get_qualifiers();
-				}
-			}
-		} else {
-			// std::cerr << "exact unify failed: " << refType << " " << other << std::endl;
-		}
-		// std::cerr << "common type of reference [" << refType << "] and non-reference [" << other << "] is [" << result << "]" << std::endl;
-		return result;
+		if ( unify( t1, t2, env, have, need, newOpen, indexer, common ) ) {
+			// std::cerr << "unify success: " << widenFirst << " " << widenSecond << std::endl;
+			if ( (widenFirst || t2->get_qualifiers() <= t1->get_qualifiers()) && (widenSecond || t1->get_qualifiers() <= t2->get_qualifiers()) ) {
+				// std::cerr << "widen okay" << std::endl;
+				common->get_qualifiers() |= t1->get_qualifiers();
+				common->get_qualifiers() |= t2->get_qualifiers();
+				return common;
+			}
+		}
+		// std::cerr << "exact unify failed: " << t1 << " " << t2 << std::endl;
+		return nullptr;
 	}
 
@@ -99,8 +90,17 @@
 
 			// special case where one type has a reference depth of 1 larger than the other
-			if ( diff > 0 ) {
-				return handleReference( strict_dynamic_cast<ReferenceType *>( type1 ), type2, widenFirst, widenSecond, indexer, env, openVars );
-			} else if ( diff < 0 ) {
-				return handleReference( strict_dynamic_cast<ReferenceType *>( type2 ), type1, widenSecond, widenFirst, indexer, env, openVars );
+			if ( diff > 0 || diff < 0 ) {
+				Type * result = nullptr;
+				if ( ReferenceType * ref1 = dynamic_cast< ReferenceType * >( type1 ) ) {
+					// formal is reference, so result should be reference
+					result = handleReference( ref1->base, type2, widenFirst, widenSecond, indexer, env, openVars );
+					if ( result ) result = new ReferenceType( ref1->get_qualifiers(), result );
+				} else {
+					// formal is value, so result should be value
+					ReferenceType * ref2 = strict_dynamic_cast< ReferenceType * > ( type2 );
+					result = handleReference( type1, ref2->base, widenFirst, widenSecond, indexer, env, openVars );
+				}
+				// std::cerr << "common type of reference [" << type1 << "] and [" << type2 << "] is [" << result << "]" << std::endl;
+				return result;
 			}
 			// otherwise, both are reference types of the same depth and this is handled by the CommonType visitor.
@@ -150,26 +150,28 @@
 	static const BasicType::Kind combinedType[ BasicType::NUMBER_OF_BASIC_TYPES ][ BasicType::NUMBER_OF_BASIC_TYPES ] =
 	{
-/* 		Bool		Char	SignedChar	UnsignedChar	ShortSignedInt	ShortUnsignedInt	SignedInt	UnsignedInt	LongSignedInt	LongUnsignedInt	LongLongSignedInt	LongLongUnsignedInt	Float	Double	LongDouble	FloatComplex	DoubleComplex	LongDoubleComplex	FloatImaginary	DoubleImaginary	LongDoubleImaginary */
-		/* Bool */ 	{ BasicType::Bool,		BasicType::Char,	BasicType::SignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* Char */ 	{ BasicType::Char,		BasicType::Char,	BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* SignedChar */ 	{ BasicType::SignedChar,	BasicType::UnsignedChar,	BasicType::SignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* UnsignedChar */ 	{ BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* ShortSignedInt */ 	{ BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* ShortUnsignedInt */ 	{ BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* SignedInt */ 	{ BasicType::SignedInt,		BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* UnsignedInt */ 	{ BasicType::UnsignedInt,		BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* LongSignedInt */ 	{ BasicType::LongSignedInt,		BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* LongUnsignedInt */ 	{ BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* LongLongSignedInt */ 	{ BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* LongLongUnsignedInt */ 	{ BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* Float */ 	{ BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* Double */ 	{ BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::LongDouble,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* LongDouble */ 	{ BasicType::LongDouble,		BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex },
-		/* FloatComplex */ 	{ BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* DoubleComplex */ 	{ BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex },
-		/* LongDoubleComplex */ 	{ BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex },
-		/* FloatImaginary */ 	{ BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatImaginary,	BasicType::DoubleImaginary,	BasicType::LongDoubleImaginary },
-		/* DoubleImaginary */ 	{ BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleImaginary,	BasicType::DoubleImaginary,	BasicType::LongDoubleImaginary },
-		/* LongDoubleImaginary */ 	{ BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleImaginary,	BasicType::LongDoubleImaginary,	BasicType::LongDoubleImaginary }
+/* 		Bool		Char	SignedChar	UnsignedChar	ShortSignedInt	ShortUnsignedInt	SignedInt	UnsignedInt	LongSignedInt	LongUnsignedInt	LongLongSignedInt	LongLongUnsignedInt	Float	Double	LongDouble	FloatComplex	DoubleComplex	LongDoubleComplex	FloatImaginary	DoubleImaginary	LongDoubleImaginary   SignedInt128   UnsignedInt128 */
+		/* Bool */ 	{ BasicType::Bool,		BasicType::Char,	BasicType::SignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* Char */ 	{ BasicType::Char,		BasicType::Char,	BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* SignedChar */ 	{ BasicType::SignedChar,	BasicType::UnsignedChar,	BasicType::SignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* UnsignedChar */ 	{ BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* ShortSignedInt */ 	{ BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* ShortUnsignedInt */ 	{ BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* SignedInt */ 	{ BasicType::SignedInt,		BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* UnsignedInt */ 	{ BasicType::UnsignedInt,		BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* LongSignedInt */ 	{ BasicType::LongSignedInt,		BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* LongUnsignedInt */ 	{ BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* LongLongSignedInt */ 	{ BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* LongLongUnsignedInt */ 	{ BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* Float */ 	{ BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::Float,	BasicType::Float, },
+		/* Double */ 	{ BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::LongDouble,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::Double,	BasicType::Double, },
+		/* LongDouble */ 	{ BasicType::LongDouble,		BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDouble,	BasicType::LongDouble, },
+		/* FloatComplex */ 	{ BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::FloatComplex, },
+		/* DoubleComplex */ 	{ BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex, },
+		/* LongDoubleComplex */ 	{ BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex, },
+		/* FloatImaginary */ 	{ BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatImaginary,	BasicType::DoubleImaginary,	BasicType::LongDoubleImaginary,	BasicType::FloatImaginary,	BasicType::FloatImaginary, },
+		/* DoubleImaginary */ 	{ BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleImaginary,	BasicType::DoubleImaginary,	BasicType::LongDoubleImaginary,	BasicType::DoubleImaginary,	BasicType::DoubleImaginary, },
+		/* LongDoubleImaginary */ 	{ BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleImaginary,	BasicType::LongDoubleImaginary,	BasicType::LongDoubleImaginary },
+		/* SignedInt128 */ 	{ BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, },
+		/* UnsignedInt128 */ 	{ BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128, },
 	};
 
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/ConversionCost.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 07:06:19 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar  2 17:35:46 2016
-// Update Count     : 6
+// Last Modified On : Mon Sep 25 15:43:34 2017
+// Update Count     : 10
 //
 
@@ -28,10 +28,10 @@
 
 namespace ResolvExpr {
-	const Cost Cost::zero = Cost( 0, 0, 0, 0 );
-	const Cost Cost::infinity = Cost( -1, -1, -1, -1 );
-	const Cost Cost::unsafe = Cost( 1, 0, 0, 0 );
-	const Cost Cost::poly = Cost( 0, 1, 0, 0 );
-	const Cost Cost::safe = Cost( 0, 0, 1, 0 );
-	const Cost Cost::reference = Cost( 0, 0, 0, 1 );
+	const Cost Cost::zero =      Cost(  0,  0,  0,  0 );
+	const Cost Cost::infinity =  Cost( -1, -1, -1, -1 );
+	const Cost Cost::unsafe =    Cost(  1,  0,  0,  0 );
+	const Cost Cost::poly =      Cost(  0,  1,  0,  0 );
+	const Cost Cost::safe =      Cost(  0,  0,  1,  0 );
+	const Cost Cost::reference = Cost(  0,  0,  0,  1 );
 
 #if 0
@@ -113,7 +113,7 @@
 					int assignResult = func( srcAsRef->get_base(), destAsRef->get_base(), env, indexer );
 					PRINT( std::cerr << "comparing references: " << assignResult << " " << srcAsRef << " " << destAsRef << std::endl; )
-					if ( assignResult < 0 ) {
+					if ( assignResult > 0 ) {
 						return Cost::safe;
-					} else if ( assignResult > 0 ) {
+					} else if ( assignResult < 0 ) {
 						return Cost::unsafe;
 					} // if
@@ -219,28 +219,31 @@
 */
 
-	static const int costMatrix[ BasicType::NUMBER_OF_BASIC_TYPES ][ BasicType::NUMBER_OF_BASIC_TYPES ] =
-	{
-	/* Src \ Dest:	Bool	Char	SChar	UChar	Short	UShort	Int 	UInt	Long	ULong	LLong	ULLong	Float	Double	LDbl	FCplex	DCplex	LDCplex	FImag	DImag	LDImag */
-		/* Bool */ 	{ 0,	1,		1,		2,		3,		4,		5,		6,		6,		7,		8,		9,		10,		11,		12,		11,		12,		13,		-1,		-1,		-1 },
-		/* Char */ 	{ -1,	0,		-1,		1,		2,		3,		4,		5,		5,		6,		7,		8,		9,		10,		11,		10,		11,		12,		-1,		-1,		-1 },
-		/* SChar */ { -1,	-1,		0,		1,		2,		3,		4,		5,		5,		6,		7,		8,		9,		10,		11,		10,		11,		12,		-1,		-1,		-1 },
-		/* UChar */ { -1,	-1,		-1,		0,		1,		2,		3,		4,		4,		5,		6,		7,		8,		9,		10,		9,		10,		11,		-1,		-1,		-1 },
-		/* Short */ { -1,	-1,		-1,		-1,		0,		1,		2,		3,		3,		4,		5,		6,		7,		8,		9,		8,		9,		10,		-1,		-1,		-1 },
-		/* UShort */{ -1,	-1,		-1,		-1,		-1,		0,		1,		2,		2,		3,		4,		5,		6,		7,		8,		7,		8,		9,		-1,		-1,		-1 },
-		/* Int */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		0,		1,		1,		2,		3,		4,		5,		6,		7,		6,		7,		8,		-1,		-1,		-1 },
-		/* UInt */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		0,		-1,		1,		2,		3,		4,		5,		6,		5,		6,		7,		-1,		-1,		-1 },
-		/* Long */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		3,		4,		5,		6,		5,		6,		7,		-1,		-1,		-1 },
-		/* ULong */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		3,		4,		5,		4,		5,		6,		-1,		-1,		-1 },
-		/* LLong */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		3,		4,		3,		4,		5,		-1,		-1,		-1 },
-		/* ULLong */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		3,		2,		3,		4,		-1,		-1,		-1 },
-		/* Float */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		1,		2,		3,		-1,		-1,		-1 },
-		/* Double */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		-1,		1,		2,		-1,		-1,		-1 },
-		/* LDbl */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		-1,		-1,		1,		-1,		-1,		-1 },
-		/* FCplex */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		-1,		-1,		-1 },
-		/* DCplex */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		-1,		-1,		-1 },
-		/* LDCplex */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		-1,		-1,		-1 },
-		/* FImag */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		1,		2,		3,		0,		1,		2 },
-		/* DImag */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		1,		2,		-1,		0,		1 },
-		/* LDImag */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		1,		-1,		-1,		0 }
+	static const int costMatrix[ BasicType::NUMBER_OF_BASIC_TYPES ][ BasicType::NUMBER_OF_BASIC_TYPES ] = {
+	/* Src \ Dest:	Bool	Char	SChar	UChar	Short	UShort	Int 	UInt	Long	ULong	LLong	ULLong	Float	Double	LDbl	FCplex	DCplex	LDCplex	FImag	DImag	LDImag	I128,	U128 */
+		/* Bool */ 	{ 0,	1,		1,		2,		3,		4,		5,		6,		6,		7,		8,		9,		12,		13,		14,		12,		13,		14,		-1,		-1,		-1,		10,		11,	},
+		/* Char */ 	{ -1,	0,		-1,		1,		2,		3,		4,		5,		5,		6,		7,		8,		11,		12,		13,		11,		12,		13,		-1,		-1,		-1,		9,		10,	},
+		/* SChar */ { -1,	-1,		0,		1,		2,		3,		4,		5,		5,		6,		7,		8,		11,		12,		13,		11,		12,		13,		-1,		-1,		-1,		9,		10,	},
+		/* UChar */ { -1,	-1,		-1,		0,		1,		2,		3,		4,		4,		5,		6,		7,		10,		11,		12,		10,		11,		12,		-1,		-1,		-1,		8,		9,	},
+		/* Short */ { -1,	-1,		-1,		-1,		0,		1,		2,		3,		3,		4,		5,		6,		9,		10,		11,		9,		10,		11,		-1,		-1,		-1,		7,		8,	},
+		/* UShort */{ -1,	-1,		-1,		-1,		-1,		0,		1,		2,		2,		3,		4,		5,		8,		9,		10,		8,		9,		10,		-1,		-1,		-1,		6,		7,	},
+		/* Int */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		0,		1,		1,		2,		3,		4,		7,		8,		9,		7,		8,		9,		-1,		-1,		-1,		5,		6,	},
+		/* UInt */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		0,		-1,		1,		2,		3,		6,		7,		8,		6,		7,		8,		-1,		-1,		-1,		4,		5,	},
+		/* Long */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		3,		6,		7,		8,		6,		7,		8,		-1,		-1,		-1,		4,		5,	},
+		/* ULong */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		5,		6,		7,		5,		6,		7,		-1,		-1,		-1,		3,		4,	},
+		/* LLong */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		4,		5,		6,		4,		5,		6,		-1,		-1,		-1,		2,		3,	},
+		/* ULLong */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		3,		4,		5,		3,		4,		5,		-1,		-1,		-1,		1,		2,	},
+
+		/* Float */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		1,		2,		3,		-1,		-1,		-1,		-1,		-1,	},
+		/* Double */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		-1,		1,		2,		-1,		-1,		-1,		-1,		-1,	},
+		/* LDbl */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		-1,		-1,		1,		-1,		-1,		-1,		-1,		-1,	},
+		/* FCplex */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		-1,		-1,		-1,		-1,		-1,	},
+		/* DCplex */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		-1,		-1,		-1,		-1,		-1,	},
+		/* LDCplex */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		-1,		-1,		-1,		-1,		-1,	},
+		/* FImag */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		1,		2,		3,		0,		1,		2,		-1,		-1,	},
+		/* DImag */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		1,		2,		-1,		0,		1,		-1,		-1,	},
+		/* LDImag */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		1,		-1,		-1,		0,		-1,		-1,	},
+
+		/* I128 */  { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		2,		3,		4,		3,		4,		5,		-1,		-1,		-1,		0,		1,	},
+		/* U128 */  { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		1,		2,		3,		2,		3,		4,		-1,		-1,		-1,		-1,		0,	},
 	};
 
@@ -266,5 +269,5 @@
 	}
 
-	void ConversionCost::visit(PointerType *pointerType) {
+	void ConversionCost::visit( PointerType * pointerType ) {
 		if ( PointerType *destAsPtr = dynamic_cast< PointerType* >( dest ) ) {
 			PRINT( std::cerr << pointerType << " ===> " << destAsPtr; )
@@ -281,21 +284,21 @@
 				}
 			} else {  // xxx - this discards qualifiers from consideration -- reducing qualifiers is a safe conversion; is this right?
-				int assignResult = ptrsAssignable( pointerType->get_base(), destAsPtr->get_base(), env );
+				int assignResult = ptrsAssignable( pointerType->base, destAsPtr->base, env );
 				PRINT( std::cerr << " :: " << assignResult << std::endl; )
-				if ( assignResult < 0 && pointerType->get_base()->get_qualifiers() <= destAsPtr->get_qualifiers() ) {
+				if ( assignResult > 0 && pointerType->get_base()->get_qualifiers() <= destAsPtr->get_qualifiers() ) {
 					cost = Cost::safe;
-				} else if ( assignResult > 0 ) {
+				} else if ( assignResult < 0 ) {
 					cost = Cost::unsafe;
 				} // if
 				// assignResult == 0 means Cost::Infinity
 			} // if
-		} else if ( dynamic_cast< ZeroType* >( dest ) != nullptr || dynamic_cast< OneType* >( dest ) != nullptr ) {
+		} else if ( dynamic_cast< ZeroType * >( dest ) ) {
 			cost = Cost::unsafe;
 		} // if
 	}
 
-	void ConversionCost::visit(__attribute((unused)) ArrayType *arrayType) {}
-
-	void ConversionCost::visit(ReferenceType *refType) {
+	void ConversionCost::visit( ArrayType * ) {}
+
+	void ConversionCost::visit( ReferenceType * refType ) {
 		// Note: dest can never be a reference, since it would have been caught in an earlier check
 		assert( ! dynamic_cast< ReferenceType * >( dest ) );
@@ -303,8 +306,8 @@
 		// recursively compute conversion cost from T1 to T2.
 		// cv can be safely dropped because of 'implicit dereference' behavior.
-		refType->get_base()->accept( *this );
-		if ( refType->get_base()->get_qualifiers() == dest->get_qualifiers() ) {
+		refType->base->accept( *this );
+		if ( refType->base->get_qualifiers() == dest->get_qualifiers() ) {
 			cost.incReference();  // prefer exact qualifiers
-		} else if ( refType->get_base()->get_qualifiers() < dest->get_qualifiers() ) {
+		} else if ( refType->base->get_qualifiers() < dest->get_qualifiers() ) {
 			cost.incSafe(); // then gaining qualifiers
 		} else {
@@ -314,23 +317,23 @@
 	}
 
-	void ConversionCost::visit(__attribute((unused)) FunctionType *functionType) {}
-
-	void ConversionCost::visit(StructInstType *inst) {
+	void ConversionCost::visit( FunctionType * ) {}
+
+	void ConversionCost::visit( StructInstType * inst ) {
 		if ( StructInstType *destAsInst = dynamic_cast< StructInstType* >( dest ) ) {
-			if ( inst->get_name() == destAsInst->get_name() ) {
-				cost = Cost::zero;
-			} // if
-		} // if
-	}
-
-	void ConversionCost::visit(UnionInstType *inst) {
-		if ( StructInstType *destAsInst = dynamic_cast< StructInstType* >( dest ) ) {
-			if ( inst->get_name() == destAsInst->get_name() ) {
-				cost = Cost::zero;
-			} // if
-		} // if
-	}
-
-	void ConversionCost::visit( __attribute((unused)) EnumInstType *inst ) {
+			if ( inst->name == destAsInst->name ) {
+				cost = Cost::zero;
+			} // if
+		} // if
+	}
+
+	void ConversionCost::visit( UnionInstType * inst ) {
+		if ( UnionInstType *destAsInst = dynamic_cast< UnionInstType* >( dest ) ) {
+			if ( inst->name == destAsInst->name ) {
+				cost = Cost::zero;
+			} // if
+		} // if
+	}
+
+	void ConversionCost::visit( EnumInstType * ) {
 		static Type::Qualifiers q;
 		static BasicType integer( q, BasicType::SignedInt );
@@ -341,8 +344,7 @@
 	}
 
-	void ConversionCost::visit( __attribute((unused)) TraitInstType *inst) {
-	}
-
-	void ConversionCost::visit(TypeInstType *inst) {
+	void ConversionCost::visit( TraitInstType * ) {}
+
+	void ConversionCost::visit( TypeInstType *inst ) {
 		EqvClass eqvClass;
 		NamedTypeDecl *namedType;
@@ -363,9 +365,9 @@
 	}
 
-	void ConversionCost::visit( __attribute((unused)) TupleType *tupleType) {
+	void ConversionCost::visit( TupleType * tupleType ) {
 		Cost c = Cost::zero;
-		if ( TupleType *destAsTuple = dynamic_cast< TupleType* >( dest ) ) {
-			std::list< Type* >::const_iterator srcIt = tupleType->get_types().begin();
-			std::list< Type* >::const_iterator destIt = destAsTuple->get_types().begin();
+		if ( TupleType * destAsTuple = dynamic_cast< TupleType * >( dest ) ) {
+			std::list< Type * >::const_iterator srcIt = tupleType->get_types().begin();
+			std::list< Type * >::const_iterator destIt = destAsTuple->get_types().begin();
 			while ( srcIt != tupleType->get_types().end() && destIt != destAsTuple->get_types().end() ) {
 				Cost newCost = conversionCost( *srcIt++, *destIt++, indexer, env );
@@ -383,5 +385,5 @@
 	}
 
-	void ConversionCost::visit( __attribute((unused)) VarArgsType *varArgsType) {
+	void ConversionCost::visit( VarArgsType * ) {
 		if ( dynamic_cast< VarArgsType* >( dest ) ) {
 			cost = Cost::zero;
@@ -389,6 +391,6 @@
 	}
 
-	void ConversionCost::visit( __attribute((unused)) ZeroType *zeroType) {
-		if ( dynamic_cast< ZeroType* >( dest ) ) {
+	void ConversionCost::visit( ZeroType * ) {
+		if ( dynamic_cast< ZeroType * >( dest ) ) {
 			cost = Cost::zero;
 		} else if ( BasicType *destAsBasic = dynamic_cast< BasicType* >( dest ) ) {
@@ -406,6 +408,6 @@
 	}
 
-	void ConversionCost::visit( __attribute((unused)) OneType *oneType) {
-		if ( dynamic_cast< OneType* >( dest ) ) {
+	void ConversionCost::visit( OneType * ) {
+		if ( dynamic_cast< OneType * >( dest ) ) {
 			cost = Cost::zero;
 		} else if ( BasicType *destAsBasic = dynamic_cast< BasicType* >( dest ) ) {
Index: src/ResolvExpr/CurrentObject.cc
===================================================================
--- src/ResolvExpr/CurrentObject.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/CurrentObject.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -260,4 +260,5 @@
 
 		AggregateIterator( const std::string & kind, const std::string & name, Type * inst, const MemberList & members ) : kind( kind ), name( name ), inst( inst ), members( members ), curMember( members.begin() ), sub( makeGenericSubstitution( inst ) ) {
+			PRINT( std::cerr << "Creating " << kind << "(" << name << ")"; )
 			init();
 		}
Index: src/ResolvExpr/PolyCost.cc
===================================================================
--- src/ResolvExpr/PolyCost.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/PolyCost.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// PolyCost.cc -- 
+// PolyCost.cc --
 //
 // Author           : Richard C. Bilson
@@ -31,5 +31,5 @@
 	};
 
-	int polyCost( Type *type, const TypeEnvironment &env, const SymTab::Indexer &indexer ) {
+	int polyCost( Type *type, const TypeEnvironment & env, const SymTab::Indexer &indexer ) {
 		PolyCost coster( env, indexer );
 		type->accept( coster );
@@ -37,16 +37,18 @@
 	}
 
-	PolyCost::PolyCost( const TypeEnvironment &env, const SymTab::Indexer &indexer ) : result( 0 ), env( env ), indexer( indexer ) {
+	PolyCost::PolyCost( const TypeEnvironment & env, const SymTab::Indexer & indexer ) : result( 0 ), env( env ), indexer( indexer ) {
 	}
 
-	void PolyCost::visit(TypeInstType *typeInst) {
+	void PolyCost::visit(TypeInstType * typeInst) {
 		EqvClass eqvClass;
-		if ( env.lookup( typeInst->get_name(), eqvClass ) ) {
+		if ( env.lookup( typeInst->name, eqvClass ) ) {
 			if ( eqvClass.type ) {
-				if ( TypeInstType *otherTypeInst = dynamic_cast< TypeInstType* >( eqvClass.type ) ) {
-					if ( indexer.lookupType( otherTypeInst->get_name() ) ) {
+				if ( TypeInstType * otherTypeInst = dynamic_cast< TypeInstType* >( eqvClass.type ) ) {
+					if ( indexer.lookupType( otherTypeInst->name ) ) {
+						// bound to opaque type
 						result += 1;
 					} // if
 				} else {
+					// bound to concrete type
 					result += 1;
 				} // if
Index: src/ResolvExpr/PtrsAssignable.cc
===================================================================
--- src/ResolvExpr/PtrsAssignable.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/PtrsAssignable.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -47,4 +47,5 @@
 
 	int ptrsAssignable( Type *src, Type *dest, const TypeEnvironment &env ) {
+		// std::cerr << "assignable: " << src << " | " << dest << std::endl;
 		if ( TypeInstType *destAsTypeInst = dynamic_cast< TypeInstType* >( dest ) ) {
 			EqvClass eqvClass;
@@ -54,5 +55,7 @@
 		} // if
 		if ( dynamic_cast< VoidType* >( dest ) ) {
-			return 1;
+			// void * = T * for any T is unsafe
+			// xxx - this should be safe, but that currently breaks the build
+			return -1;
 		} else {
 			PtrsAssignable ptrs( dest, env );
@@ -65,8 +68,8 @@
 
 	void PtrsAssignable::visit( __attribute((unused)) VoidType *voidType ) {
-		if ( dynamic_cast< FunctionType* >( dest ) ) {
-			result = 0;
-		} else {
-			result = -1;
+		if ( ! dynamic_cast< FunctionType* >( dest ) ) {
+			// T * = void * is safe for any T that is not a function type.
+			// xxx - this should be unsafe...
+			result = 1;
 		} // if
 	}
@@ -75,7 +78,5 @@
 	void PtrsAssignable::visit( __attribute__((unused)) PointerType *pointerType ) {}
 	void PtrsAssignable::visit( __attribute__((unused)) ArrayType *arrayType ) {}
-	void PtrsAssignable::visit( __attribute__((unused)) FunctionType *functionType ) {
-		result = -1;
-	}
+	void PtrsAssignable::visit( __attribute__((unused)) FunctionType *functionType ) {}
 
 	void PtrsAssignable::visit(  __attribute__((unused)) StructInstType *inst ) {}
@@ -83,8 +84,11 @@
 
 	void PtrsAssignable::visit( EnumInstType * ) {
-		if ( dynamic_cast< EnumInstType* >( dest ) ) {
+		if ( dynamic_cast< BasicType* >( dest ) ) {
+			// int * = E *, etc. is safe. This isn't technically correct, as each
+			// enum has one basic type that it is compatible with, an that type can
+			// differ from enum to enum. Without replicating GCC's internal logic,
+			// there is no way to know which type this particular enum is compatible
+			// with, so punt on this for now.
 			result = 1;
-		} else if ( BasicType *bt = dynamic_cast< BasicType* >( dest ) ) {
-			result = bt->get_kind() == BasicType::SignedInt;
 		}
 	}
@@ -94,7 +98,6 @@
 		EqvClass eqvClass;
 		if ( env.lookup( inst->get_name(), eqvClass ) && eqvClass.type ) {
+			// T * = S * for any S depends on the type bound to T
 			result = ptrsAssignable( eqvClass.type, dest, env );
-		} else {
-			result = 0;
 		} // if
 	}
Index: src/ResolvExpr/PtrsCastable.cc
===================================================================
--- src/ResolvExpr/PtrsCastable.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/PtrsCastable.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -50,25 +50,27 @@
 	};
 
-	int objectCast( Type *src, const TypeEnvironment &env, const SymTab::Indexer &indexer ) {
-		if ( dynamic_cast< FunctionType* >( src ) ) {
-			return -1;
-		} else if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( src ) ) {
-			EqvClass eqvClass;
-			if ( NamedTypeDecl *ntDecl = indexer.lookupType( typeInst->get_name() ) ) {
-				if ( TypeDecl *tyDecl = dynamic_cast< TypeDecl* >( ntDecl ) ) {
-					if ( tyDecl->get_kind() == TypeDecl::Ftype ) {
+	namespace {
+		int objectCast( Type *src, const TypeEnvironment &env, const SymTab::Indexer &indexer ) {
+			if ( dynamic_cast< FunctionType* >( src ) ) {
+				return -1;
+			} else if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( src ) ) {
+				EqvClass eqvClass;
+				if ( NamedTypeDecl *ntDecl = indexer.lookupType( typeInst->get_name() ) ) {
+					if ( TypeDecl *tyDecl = dynamic_cast< TypeDecl* >( ntDecl ) ) {
+						if ( tyDecl->get_kind() == TypeDecl::Ftype ) {
+							return -1;
+						} // if
+					} //if
+				} else if ( env.lookup( typeInst->get_name(), eqvClass ) ) {
+					if ( eqvClass.data.kind == TypeDecl::Ftype ) {
 						return -1;
 					} // if
-				} //if
-			} else if ( env.lookup( typeInst->get_name(), eqvClass ) ) {
-				if ( eqvClass.data.kind == TypeDecl::Ftype ) {
-					return -1;
 				} // if
-			} // if
-		} //if
-		return 1;
-	}
-	int functionCast( Type *src, const TypeEnvironment &env, const SymTab::Indexer &indexer ) {
-		return -1 * objectCast( src, env, indexer );  // reverse the sense of objectCast
+			} //if
+			return 1;
+		}
+		int functionCast( Type *src, const TypeEnvironment &env, const SymTab::Indexer &indexer ) {
+			return -1 * objectCast( src, env, indexer );  // reverse the sense of objectCast
+		}
 	}
 
@@ -93,34 +95,34 @@
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) VoidType *voidType) {
+	void PtrsCastable::visit( VoidType * ) {
 		result = objectCast( dest, env, indexer );
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) BasicType *basicType) {
+	void PtrsCastable::visit( BasicType * ) {
 		result = objectCast( dest, env, indexer );
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) PointerType *pointerType) {
+	void PtrsCastable::visit( PointerType * ) {
 		result = objectCast( dest, env, indexer );
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) ArrayType *arrayType) {
+	void PtrsCastable::visit( ArrayType * ) {
 		result = objectCast( dest, env, indexer );
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) FunctionType *functionType) {
+	void PtrsCastable::visit( FunctionType * ) {
 		// result = -1;
 		result = functionCast( dest, env, indexer );
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) StructInstType *inst) {
+	void PtrsCastable::visit( StructInstType * ) {
 		result = objectCast( dest, env, indexer );
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) UnionInstType *inst) {
+	void PtrsCastable::visit( UnionInstType * ) {
 		result = objectCast( dest, env, indexer );
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) EnumInstType *inst) {
+	void PtrsCastable::visit( EnumInstType * ) {
 		if ( dynamic_cast< EnumInstType* >( dest ) ) {
 			result = 1;
@@ -136,5 +138,5 @@
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) TraitInstType *inst ) {}
+	void PtrsCastable::visit( TraitInstType * ) {}
 
 	void PtrsCastable::visit(TypeInstType *inst) {
@@ -143,17 +145,17 @@
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) TupleType *tupleType) {
+	void PtrsCastable::visit( TupleType * ) {
 		result = objectCast( dest, env, indexer );
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) VarArgsType *varArgsType) {
+	void PtrsCastable::visit( VarArgsType * ) {
 		result = objectCast( dest, env, indexer );
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) ZeroType *zeroType) {
+	void PtrsCastable::visit( ZeroType * ) {
 		result = objectCast( dest, env, indexer );
 	}
 
-	void PtrsCastable::visit( __attribute__((unused)) OneType *oneType) {
+	void PtrsCastable::visit( OneType * ) {
 		result = objectCast( dest, env, indexer );
 	}
Index: src/ResolvExpr/ResolveTypeof.cc
===================================================================
--- src/ResolvExpr/ResolveTypeof.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/ResolveTypeof.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -18,4 +18,5 @@
 #include <cassert>               // for assert
 
+#include "Common/PassVisitor.h"  // for PassVisitor
 #include "Resolver.h"            // for resolveInVoidContext
 #include "SynTree/Expression.h"  // for Expression
@@ -41,8 +42,9 @@
 	}
 
-	class ResolveTypeof : public Mutator {
+	class ResolveTypeof : public WithShortCircuiting {
 	  public:
 		ResolveTypeof( const SymTab::Indexer &indexer ) : indexer( indexer ) {}
-		Type *mutate( TypeofType *typeofType );
+		void premutate( TypeofType *typeofType );
+		Type * postmutate( TypeofType *typeofType );
 
 	  private:
@@ -50,20 +52,24 @@
 	};
 
-	Type *resolveTypeof( Type *type, const SymTab::Indexer &indexer ) {
-		ResolveTypeof mutator( indexer );
+	Type * resolveTypeof( Type *type, const SymTab::Indexer &indexer ) {
+		PassVisitor<ResolveTypeof> mutator( indexer );
 		return type->acceptMutator( mutator );
 	}
 
-	Type *ResolveTypeof::mutate( TypeofType *typeofType ) {
+	void ResolveTypeof::premutate( TypeofType * ) {
+		visit_children = false;
+	}
+
+	Type * ResolveTypeof::postmutate( TypeofType *typeofType ) {
 #if 0
-		std::cout << "resolving typeof: ";
-		typeofType->print( std::cout );
-		std::cout << std::endl;
+		std::cerr << "resolving typeof: ";
+		typeofType->print( std::cerr );
+		std::cerr << std::endl;
 #endif
-		if ( typeofType->get_expr() ) {
-			Expression *newExpr = resolveInVoidContext( typeofType->get_expr(), indexer );
-			assert( newExpr->has_result() && ! newExpr->get_result()->isVoid() );
-			Type *newType = newExpr->get_result();
-			newExpr->set_result( nullptr );
+		if ( typeofType->expr ) {
+			Expression * newExpr = resolveInVoidContext( typeofType->expr, indexer );
+			assert( newExpr->result && ! newExpr->result->isVoid() );
+			Type * newType = newExpr->result;
+			newExpr->result = nullptr;
 			delete typeofType;
 			delete newExpr;
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/Resolver.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -40,4 +40,5 @@
 #include "SynTree/Visitor.h"             // for acceptAll, maybeAccept
 #include "typeops.h"                     // for extractResultType
+#include "Unify.h"                       // for unify
 
 using namespace std;
@@ -52,5 +53,5 @@
 		void previsit( FunctionDecl *functionDecl );
 		void postvisit( FunctionDecl *functionDecl );
-		void previsit( ObjectDecl *functionDecl );
+		void previsit( ObjectDecl *objectDecll );
 		void previsit( TypeDecl *typeDecl );
 		void previsit( EnumDecl * enumDecl );
@@ -71,4 +72,5 @@
 		void previsit( ThrowStmt *throwStmt );
 		void previsit( CatchStmt *catchStmt );
+		void previsit( WaitForStmt * stmt );
 
 		void previsit( SingleInit *singleInit );
@@ -95,4 +97,9 @@
 	}
 
+	void resolveDecl( Declaration * decl, const SymTab::Indexer &indexer ) {
+		PassVisitor<Resolver> resolver( indexer );
+		maybeAccept( decl, resolver );
+	}
+
 	// used in resolveTypeof
 	Expression *resolveInVoidContext( Expression *expr, const SymTab::Indexer &indexer ) {
@@ -102,40 +109,62 @@
 
 	namespace {
-		void finishExpr( Expression *expr, const TypeEnvironment &env ) {
-			expr->set_env( new TypeSubstitution );
+		void finishExpr( Expression *expr, const TypeEnvironment &env, TypeSubstitution * oldenv = nullptr ) {
+			expr->env = oldenv ? oldenv->clone() : new TypeSubstitution;
 			env.makeSubstitution( *expr->get_env() );
 		}
+
+		void removeExtraneousCast( Expression *& expr, const SymTab::Indexer & indexer ) {
+			if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( expr ) ) {
+				if ( ResolvExpr::typesCompatible( castExpr->arg->result, castExpr->result, indexer ) ) {
+					// cast is to the same type as its argument, so it's unnecessary -- remove it
+					expr = castExpr->arg;
+					castExpr->arg = nullptr;
+					std::swap( expr->env, castExpr->env );
+					delete castExpr;
+				}
+			}
+		}
 	} // namespace
 
-	Expression *findVoidExpression( Expression *untyped, const SymTab::Indexer &indexer ) {
+	void findVoidExpression( Expression *& untyped, const SymTab::Indexer &indexer ) {
 		global_renamer.reset();
 		TypeEnvironment env;
 		Expression *newExpr = resolveInVoidContext( untyped, indexer, env );
-		finishExpr( newExpr, env );
-		return newExpr;
+		finishExpr( newExpr, env, untyped->env );
+		delete untyped;
+		untyped = newExpr;
+	}
+
+	void findSingleExpression( Expression *&untyped, const SymTab::Indexer &indexer ) {
+		if ( ! untyped ) return;
+		TypeEnvironment env;
+		AlternativeFinder finder( indexer, env );
+		finder.find( untyped );
+		#if 0
+		if ( finder.get_alternatives().size() != 1 ) {
+			std::cerr << "untyped expr is ";
+			untyped->print( std::cerr );
+			std::cerr << std::endl << "alternatives are:";
+			for ( const Alternative & alt : finder.get_alternatives() ) {
+				alt.print( std::cerr );
+			} // for
+		} // if
+		#endif
+		assertf( finder.get_alternatives().size() == 1, "findSingleExpression: must have exactly one alternative at the end." );
+		Alternative &choice = finder.get_alternatives().front();
+		Expression *newExpr = choice.expr->clone();
+		finishExpr( newExpr, choice.env, untyped->env );
+		delete untyped;
+		untyped = newExpr;
+	}
+
+	void findSingleExpression( Expression *& untyped, Type * type, const SymTab::Indexer & indexer ) {
+		assert( untyped && type );
+		untyped = new CastExpr( untyped, type );
+		findSingleExpression( untyped, indexer );
+		removeExtraneousCast( untyped, indexer );
 	}
 
 	namespace {
-		Expression *findSingleExpression( Expression *untyped, const SymTab::Indexer &indexer ) {
-			TypeEnvironment env;
-			AlternativeFinder finder( indexer, env );
-			finder.find( untyped );
-#if 0
-			if ( finder.get_alternatives().size() != 1 ) {
-				std::cout << "untyped expr is ";
-				untyped->print( std::cout );
-				std::cout << std::endl << "alternatives are:";
-				for ( std::list< Alternative >::const_iterator i = finder.get_alternatives().begin(); i != finder.get_alternatives().end(); ++i ) {
-					i->print( std::cout );
-				} // for
-			} // if
-#endif
-			assertf( finder.get_alternatives().size() == 1, "findSingleExpression: must have exactly one alternative at the end." );
-			Alternative &choice = finder.get_alternatives().front();
-			Expression *newExpr = choice.expr->clone();
-			finishExpr( newExpr, choice.env );
-			return newExpr;
-		}
-
 		bool isIntegralType( Type *type ) {
 			if ( dynamic_cast< EnumInstType * >( type ) ) {
@@ -150,5 +179,5 @@
 		}
 
-		Expression *findIntegralExpression( Expression *untyped, const SymTab::Indexer &indexer ) {
+		void findIntegralExpression( Expression *& untyped, const SymTab::Indexer &indexer ) {
 			TypeEnvironment env;
 			AlternativeFinder finder( indexer, env );
@@ -179,6 +208,7 @@
 				throw SemanticError( "No interpretations for case control expression", untyped );
 			} // if
-			finishExpr( newExpr, *newEnv );
-			return newExpr;
+			finishExpr( newExpr, *newEnv, untyped->env );
+			delete untyped;
+			untyped = newExpr;
 		}
 
@@ -205,8 +235,5 @@
 	void Resolver::handlePtrType( PtrType * type ) {
 		if ( type->get_dimension() ) {
-			CastExpr *castExpr = new CastExpr( type->get_dimension(), SymTab::SizeType->clone() );
-			Expression *newExpr = findSingleExpression( castExpr, indexer );
-			delete type->get_dimension();
-			type->set_dimension( newExpr );
+			findSingleExpression( type->dimension, SymTab::SizeType->clone(), indexer );
 		}
 	}
@@ -238,5 +265,4 @@
 		functionReturn = ResolvExpr::extractResultType( functionDecl->get_functionType() );
 	}
-
 
 	void Resolver::postvisit( FunctionDecl *functionDecl ) {
@@ -262,19 +288,13 @@
 	void Resolver::previsit( ExprStmt *exprStmt ) {
 		visit_children = false;
-		assertf( exprStmt->get_expr(), "ExprStmt has null Expression in resolver" );
-		Expression *newExpr = findVoidExpression( exprStmt->get_expr(), indexer );
-		delete exprStmt->get_expr();
-		exprStmt->set_expr( newExpr );
+		assertf( exprStmt->expr, "ExprStmt has null Expression in resolver" );
+		findVoidExpression( exprStmt->expr, indexer );
 	}
 
 	void Resolver::previsit( AsmExpr *asmExpr ) {
 		visit_children = false;
-		Expression *newExpr = findVoidExpression( asmExpr->get_operand(), indexer );
-		delete asmExpr->get_operand();
-		asmExpr->set_operand( newExpr );
+		findVoidExpression( asmExpr->operand, indexer );
 		if ( asmExpr->get_inout() ) {
-			newExpr = findVoidExpression( asmExpr->get_inout(), indexer );
-			delete asmExpr->get_inout();
-			asmExpr->set_inout( newExpr );
+			findVoidExpression( asmExpr->inout, indexer );
 		} // if
 	}
@@ -287,26 +307,18 @@
 
 	void Resolver::previsit( IfStmt *ifStmt ) {
-		Expression *newExpr = findSingleExpression( ifStmt->get_condition(), indexer );
-		delete ifStmt->get_condition();
-		ifStmt->set_condition( newExpr );
+		findSingleExpression( ifStmt->condition, indexer );
 	}
 
 	void Resolver::previsit( WhileStmt *whileStmt ) {
-		Expression *newExpr = findSingleExpression( whileStmt->get_condition(), indexer );
-		delete whileStmt->get_condition();
-		whileStmt->set_condition( newExpr );
+		findSingleExpression( whileStmt->condition, indexer );
 	}
 
 	void Resolver::previsit( ForStmt *forStmt ) {
-		if ( forStmt->get_condition() ) {
-			Expression * newExpr = findSingleExpression( forStmt->get_condition(), indexer );
-			delete forStmt->get_condition();
-			forStmt->set_condition( newExpr );
+		if ( forStmt->condition ) {
+			findSingleExpression( forStmt->condition, indexer );
 		} // if
 
-		if ( forStmt->get_increment() ) {
-			Expression * newExpr = findVoidExpression( forStmt->get_increment(), indexer );
-			delete forStmt->get_increment();
-			forStmt->set_increment( newExpr );
+		if ( forStmt->increment ) {
+			findVoidExpression( forStmt->increment, indexer );
 		} // if
 	}
@@ -314,10 +326,7 @@
 	void Resolver::previsit( SwitchStmt *switchStmt ) {
 		GuardValue( currentObject );
-		Expression *newExpr;
-		newExpr = findIntegralExpression( switchStmt->get_condition(), indexer );
-		delete switchStmt->get_condition();
-		switchStmt->set_condition( newExpr );
-
-		currentObject = CurrentObject( newExpr->get_result() );
+		findIntegralExpression( switchStmt->condition, indexer );
+
+		currentObject = CurrentObject( switchStmt->condition->result );
 	}
 
@@ -326,9 +335,10 @@
 			std::list< InitAlternative > initAlts = currentObject.getOptions();
 			assertf( initAlts.size() == 1, "SwitchStmt did not correctly resolve an integral expression." );
-			CastExpr * castExpr = new CastExpr( caseStmt->get_condition(), initAlts.front().type->clone() );
-			Expression * newExpr = findSingleExpression( castExpr, indexer );
-			castExpr = strict_dynamic_cast< CastExpr * >( newExpr );
-			caseStmt->set_condition( castExpr->get_arg() );
-			castExpr->set_arg( nullptr );
+			// must remove cast from case statement because RangeExpr cannot be cast.
+			Expression * newExpr = new CastExpr( caseStmt->condition, initAlts.front().type->clone() );
+			findSingleExpression( newExpr, indexer );
+			CastExpr * castExpr = strict_dynamic_cast< CastExpr * >( newExpr );
+			caseStmt->condition = castExpr->arg;
+			castExpr->arg = nullptr;
 			delete castExpr;
 		}
@@ -339,10 +349,7 @@
 		// must resolve the argument for a computed goto
 		if ( branchStmt->get_type() == BranchStmt::Goto ) { // check for computed goto statement
-			if ( Expression * arg = branchStmt->get_computedTarget() ) {
-				VoidType v = Type::Qualifiers();		// cast to void * for the alternative finder
-				PointerType pt( Type::Qualifiers(), v.clone() );
-				CastExpr * castExpr = new CastExpr( arg, pt.clone() );
-				Expression * newExpr = findSingleExpression( castExpr, indexer ); // find best expression
-				branchStmt->set_target( newExpr );
+			if ( branchStmt->computedTarget ) {
+				// computed goto argument is void *
+				findSingleExpression( branchStmt->computedTarget, new PointerType( Type::Qualifiers(), new VoidType( Type::Qualifiers() ) ), indexer );
 			} // if
 		} // if
@@ -351,9 +358,6 @@
 	void Resolver::previsit( ReturnStmt *returnStmt ) {
 		visit_children = false;
-		if ( returnStmt->get_expr() ) {
-			CastExpr *castExpr = new CastExpr( returnStmt->get_expr(), functionReturn->clone() );
-			Expression *newExpr = findSingleExpression( castExpr, indexer );
-			delete castExpr;
-			returnStmt->set_expr( newExpr );
+		if ( returnStmt->expr ) {
+			findSingleExpression( returnStmt->expr, functionReturn->clone(), indexer );
 		} // if
 	}
@@ -366,26 +370,201 @@
 				indexer.lookupStruct( "__cfaehm__base_exception_t" );
 			assert( exception_decl );
-			Expression * wrapped = new CastExpr(
-				throwStmt->get_expr(),
-				new PointerType(
-					noQualifiers,
-					new StructInstType(
-						noQualifiers,
-						exception_decl
-						)
-					)
-				);
-			Expression * newExpr = findSingleExpression( wrapped, indexer );
-			throwStmt->set_expr( newExpr );
+			Type * exceptType = new PointerType( noQualifiers, new StructInstType( noQualifiers, exception_decl ) );
+			findSingleExpression( throwStmt->expr, exceptType, indexer );
 		}
 	}
 
 	void Resolver::previsit( CatchStmt *catchStmt ) {
-		if ( catchStmt->get_cond() ) {
-			Expression * wrapped = new CastExpr(
-				catchStmt->get_cond(),
-				new BasicType( noQualifiers, BasicType::Bool )
-				);
-			catchStmt->set_cond( findSingleExpression( wrapped, indexer ) );
+		if ( catchStmt->cond ) {
+			findSingleExpression( catchStmt->cond, new BasicType( noQualifiers, BasicType::Bool ), indexer );
+		}
+	}
+
+	template< typename iterator_t >
+	inline bool advance_to_mutex( iterator_t & it, const iterator_t & end ) {
+		while( it != end && !(*it)->get_type()->get_mutex() ) {
+			it++;
+		}
+
+		return it != end;
+	}
+
+	void Resolver::previsit( WaitForStmt * stmt ) {
+		visit_children = false;
+
+		// Resolve all clauses first
+		for( auto& clause : stmt->clauses ) {
+
+			TypeEnvironment env;
+			AlternativeFinder funcFinder( indexer, env );
+
+			// Find all alternatives for a function in canonical form
+			funcFinder.findWithAdjustment( clause.target.function );
+
+			if ( funcFinder.get_alternatives().empty() ) {
+				stringstream ss;
+				ss << "Use of undeclared indentifier '";
+				ss << strict_dynamic_cast<NameExpr*>( clause.target.function )->name;
+				ss << "' in call to waitfor";
+				throw SemanticError( ss.str() );
+			}
+
+			// Find all alternatives for all arguments in canonical form
+			std::list< AlternativeFinder > argAlternatives;
+			funcFinder.findSubExprs( clause.target.arguments.begin(), clause.target.arguments.end(), back_inserter( argAlternatives ) );
+
+			// List all combinations of arguments
+			std::list< AltList > possibilities;
+			combos( argAlternatives.begin(), argAlternatives.end(), back_inserter( possibilities ) );
+
+			AltList                func_candidates;
+			std::vector< AltList > args_candidates;
+
+			// For every possible function :
+			// 	try matching the arguments to the parameters
+			// 	not the other way around because we have more arguments than parameters
+			SemanticError errors;
+			for ( Alternative & func : funcFinder.get_alternatives() ) {
+				try {
+					PointerType * pointer = dynamic_cast< PointerType* >( func.expr->get_result()->stripReferences() );
+					if( !pointer ) {
+						throw SemanticError( "candidate not viable: not a pointer type\n", func.expr->get_result() );
+					}
+
+					FunctionType * function = dynamic_cast< FunctionType* >( pointer->get_base() );
+					if( !function ) {
+						throw SemanticError( "candidate not viable: not a function type\n", pointer->get_base() );
+					}
+
+
+					{
+						auto param     = function->parameters.begin();
+						auto param_end = function->parameters.end();
+
+						if( !advance_to_mutex( param, param_end ) ) {
+							throw SemanticError("candidate function not viable: no mutex parameters\n", function);
+						}
+					}
+
+					Alternative newFunc( func );
+					// Strip reference from function
+					referenceToRvalueConversion( newFunc.expr );
+
+					// For all the set of arguments we have try to match it with the parameter of the current function alternative
+					for ( auto & argsList : possibilities ) {
+
+						try {
+							// Declare data structures need for resolution
+							OpenVarSet openVars;
+							AssertionSet resultNeed, resultHave;
+							TypeEnvironment resultEnv;
+
+							// Load type variables from arguemnts into one shared space
+							simpleCombineEnvironments( argsList.begin(), argsList.end(), resultEnv );
+
+							// Make sure we don't widen any existing bindings
+							for ( auto & i : resultEnv ) {
+								i.allowWidening = false;
+							}
+
+							// Find any unbound type variables
+							resultEnv.extractOpenVars( openVars );
+
+							auto param     = function->parameters.begin();
+							auto param_end = function->parameters.end();
+
+							// For every arguments of its set, check if it matches one of the parameter
+							// The order is important
+							for( auto & arg : argsList ) {
+
+								// Ignore non-mutex arguments
+								if( !advance_to_mutex( param, param_end ) ) {
+									// We ran out of parameters but still have arguments
+									// this function doesn't match
+									throw SemanticError("candidate function not viable: too many mutex arguments\n", function);
+								}
+
+								// Check if the argument matches the parameter type in the current scope
+								if( ! unify( (*param)->get_type(), arg.expr->get_result(), resultEnv, resultNeed, resultHave, openVars, this->indexer ) ) {
+									// Type doesn't match
+									stringstream ss;
+									ss << "candidate function not viable: no known convertion from '";
+									arg.expr->get_result()->print( ss );
+									ss << "' to '";
+									(*param)->get_type()->print( ss );
+									ss << "'\n";
+									throw SemanticError(ss.str(), function);
+								}
+
+								param++;
+							}
+
+							// All arguments match !
+
+							// Check if parameters are missing
+							if( advance_to_mutex( param, param_end ) ) {
+								// We ran out of arguments but still have parameters left
+								// this function doesn't match
+								throw SemanticError("candidate function not viable: too few mutex arguments\n", function);
+							}
+
+							// All parameters match !
+
+							// Finish the expressions to tie in the proper environments
+							finishExpr( newFunc.expr, resultEnv );
+							for( Alternative & alt : argsList ) {
+								finishExpr( alt.expr, resultEnv );
+							}
+
+							// This is a match store it and save it for later
+							func_candidates.push_back( newFunc );
+							args_candidates.push_back( argsList );
+
+						}
+						catch( SemanticError &e ) {
+							errors.append( e );
+						}
+					}
+				}
+				catch( SemanticError &e ) {
+					errors.append( e );
+				}
+			}
+
+			// Make sure we got the right number of arguments
+			if( func_candidates.empty() )    { SemanticError top( "No alternatives for function in call to waitfor"  ); top.append( errors ); throw top; }
+			if( args_candidates.empty() )    { SemanticError top( "No alternatives for arguments in call to waitfor" ); top.append( errors ); throw top; }
+			if( func_candidates.size() > 1 ) { SemanticError top( "Ambiguous function in call to waitfor"            ); top.append( errors ); throw top; }
+			if( args_candidates.size() > 1 ) { SemanticError top( "Ambiguous arguments in call to waitfor"           ); top.append( errors ); throw top; }
+
+
+			// Swap the results from the alternative with the unresolved values.
+			// Alternatives will handle deletion on destruction
+			std::swap( clause.target.function, func_candidates.front().expr );
+			for( auto arg_pair : group_iterate( clause.target.arguments, args_candidates.front() ) ) {
+				std::swap ( std::get<0>( arg_pair), std::get<1>( arg_pair).expr );
+			}
+
+			// Resolve the conditions as if it were an IfStmt
+			// Resolve the statments normally
+			findSingleExpression( clause.condition, this->indexer );
+			clause.statement->accept( *visitor );
+		}
+
+
+		if( stmt->timeout.statement ) {
+			// Resolve the timeout as an size_t for now
+			// Resolve the conditions as if it were an IfStmt
+			// Resolve the statments normally
+			findSingleExpression( stmt->timeout.time, new BasicType( noQualifiers, BasicType::LongLongUnsignedInt ), this->indexer );
+			findSingleExpression( stmt->timeout.condition, this->indexer );
+			stmt->timeout.statement->accept( *visitor );
+		}
+
+		if( stmt->orelse.statement ) {
+			// Resolve the conditions as if it were an IfStmt
+			// Resolve the statments normally
+			findSingleExpression( stmt->orelse.condition, this->indexer );
+			stmt->orelse.statement->accept( *visitor );
 		}
 	}
@@ -403,6 +582,6 @@
 		visit_children = false;
 		// resolve initialization using the possibilities as determined by the currentObject cursor
-		UntypedInitExpr * untyped = new UntypedInitExpr( singleInit->get_value(), currentObject.getOptions() );
-		Expression * newExpr = findSingleExpression( untyped, indexer );
+		Expression * newExpr = new UntypedInitExpr( singleInit->value, currentObject.getOptions() );
+		findSingleExpression( newExpr, indexer );
 		InitExpr * initExpr = strict_dynamic_cast< InitExpr * >( newExpr );
 
@@ -411,12 +590,14 @@
 
 		// discard InitExpr wrapper and retain relevant pieces
-		newExpr = initExpr->get_expr();
-		newExpr->set_env( initExpr->get_env() );
-		initExpr->set_expr( nullptr );
-		initExpr->set_env( nullptr );
+		newExpr = initExpr->expr;
+		initExpr->expr = nullptr;
+		std::swap( initExpr->env, newExpr->env );
+		std::swap( initExpr->inferParams, newExpr->inferParams ) ;
 		delete initExpr;
 
 		// get the actual object's type (may not exactly match what comes back from the resolver due to conversions)
 		Type * initContext = currentObject.getCurrentType();
+
+		removeExtraneousCast( newExpr, indexer );
 
 		// check if actual object's type is char[]
@@ -426,9 +607,11 @@
 				if ( PointerType * pt = dynamic_cast< PointerType *>( newExpr->get_result() ) ) {
 					if ( isCharType( pt->get_base() ) ) {
-						// strip cast if we're initializing a char[] with a char *, e.g.  char x[] = "hello";
-						CastExpr *ce = strict_dynamic_cast< CastExpr * >( newExpr );
-						newExpr = ce->get_arg();
-						ce->set_arg( nullptr );
-						delete ce;
+						if ( CastExpr *ce = dynamic_cast< CastExpr * >( newExpr ) ) {
+							// strip cast if we're initializing a char[] with a char *, e.g.  char x[] = "hello";
+							newExpr = ce->get_arg();
+							ce->set_arg( nullptr );
+							std::swap( ce->env, newExpr->env );
+							delete ce;
+						}
 					}
 				}
@@ -437,5 +620,5 @@
 
 		// set initializer expr to resolved express
-		singleInit->set_value( newExpr );
+		singleInit->value = newExpr;
 
 		// move cursor to next object in preparation for next initializer
Index: src/ResolvExpr/Resolver.h
===================================================================
--- src/ResolvExpr/Resolver.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/Resolver.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -29,6 +29,8 @@
 	/// Checks types and binds syntactic constructs to typed representations
 	void resolve( std::list< Declaration * > translationUnit );
-	Expression *resolveInVoidContext( Expression *expr, const SymTab::Indexer &indexer );
-	Expression *findVoidExpression( Expression *untyped, const SymTab::Indexer &indexer );
+	void resolveDecl( Declaration *, const SymTab::Indexer &indexer );
+	Expression *resolveInVoidContext( Expression * expr, const SymTab::Indexer &indexer );
+	void findVoidExpression( Expression *& untyped, const SymTab::Indexer &indexer );
+	void findSingleExpression( Expression *& untyped, const SymTab::Indexer &indexer );
 	void resolveCtorInit( ConstructorInit * ctorInit, const SymTab::Indexer & indexer );
 	void resolveStmtExpr( StmtExpr * stmtExpr, const SymTab::Indexer & indexer );
Index: src/ResolvExpr/TypeEnvironment.cc
===================================================================
--- src/ResolvExpr/TypeEnvironment.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/TypeEnvironment.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -68,11 +68,11 @@
 	}
 
-	void EqvClass::print( std::ostream &os, int indent ) const {
-		os << std::string( indent, ' ' ) << "( ";
+	void EqvClass::print( std::ostream &os, Indenter indent ) const {
+		os << "( ";
 		std::copy( vars.begin(), vars.end(), std::ostream_iterator< std::string >( os, " " ) );
 		os << ")";
 		if ( type ) {
 			os << " -> ";
-			type->print( os, indent );
+			type->print( os, indent+1 );
 		} // if
 		if ( ! allowWidening ) {
@@ -123,13 +123,13 @@
 		for ( std::list< EqvClass >::const_iterator theClass = env.begin(); theClass != env.end(); ++theClass ) {
 			for ( std::set< std::string >::const_iterator theVar = theClass->vars.begin(); theVar != theClass->vars.end(); ++theVar ) {
-///       std::cout << "adding " << *theVar;
+///       std::cerr << "adding " << *theVar;
 				if ( theClass->type ) {
-///         std::cout << " bound to ";
-///         theClass->type->print( std::cout );
-///         std::cout << std::endl;
+///         std::cerr << " bound to ";
+///         theClass->type->print( std::cerr );
+///         std::cerr << std::endl;
 					sub.add( *theVar, theClass->type );
 				} else if ( theVar != theClass->vars.begin() ) {
 					TypeInstType *newTypeInst = new TypeInstType( Type::Qualifiers(), *theClass->vars.begin(), theClass->data.kind == TypeDecl::Ftype );
-///         std::cout << " bound to variable " << *theClass->vars.begin() << std::endl;
+///         std::cerr << " bound to variable " << *theClass->vars.begin() << std::endl;
 					sub.add( *theVar, newTypeInst );
 					delete newTypeInst;
@@ -144,5 +144,5 @@
 	}
 
-	void TypeEnvironment::print( std::ostream &os, int indent ) const {
+	void TypeEnvironment::print( std::ostream &os, Indenter indent ) const {
 		for ( std::list< EqvClass >::const_iterator i = env.begin(); i != env.end(); ++i ) {
 			i->print( os, indent );
Index: src/ResolvExpr/TypeEnvironment.h
===================================================================
--- src/ResolvExpr/TypeEnvironment.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/TypeEnvironment.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -68,5 +68,5 @@
 		EqvClass &operator=( const EqvClass &other );
 		~EqvClass();
-		void print( std::ostream &os, int indent = 0 ) const;
+		void print( std::ostream &os, Indenter indent = {} ) const;
 	};
 
@@ -80,5 +80,5 @@
 		void makeSubstitution( TypeSubstitution &result ) const;
 		bool isEmpty() const { return env.empty(); }
-		void print( std::ostream &os, int indent = 0 ) const;
+		void print( std::ostream &os, Indenter indent = {} ) const;
 		void combine( const TypeEnvironment &second, Type *(*combineFunc)( Type*, Type* ) );
 		void simpleCombine( const TypeEnvironment &second );
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/ResolvExpr/Unify.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -17,9 +17,10 @@
 #include <iterator>               // for back_insert_iterator, back_inserter
 #include <map>                    // for _Rb_tree_const_iterator, _Rb_tree_i...
-#include <memory>                 // for unique_ptr, auto_ptr
+#include <memory>                 // for unique_ptr
 #include <set>                    // for set
 #include <string>                 // for string, operator==, operator!=, bas...
 #include <utility>                // for pair
 
+#include "Common/PassVisitor.h"   // for PassVisitor
 #include "FindOpenVars.h"         // for findOpenVars
 #include "Parser/LinkageSpec.h"   // for C
@@ -137,5 +138,4 @@
 	bool tyVarCompatible( const TypeDecl::Data & data, Type *type ) {
 		switch ( data.kind ) {
-		  case TypeDecl::Any:
 		  case TypeDecl::Dtype:
 			// to bind to an object type variable, the type must not be a function type.
@@ -169,5 +169,5 @@
 				Type *common = 0;
 				// attempt to unify equivalence class type (which has qualifiers stripped, so they must be restored) with the type to bind to
-				std::auto_ptr< Type > newType( curClass.type->clone() );
+				std::unique_ptr< Type > newType( curClass.type->clone() );
 				newType->get_qualifiers() = typeInst->get_qualifiers();
 				if ( unifyInexact( newType.get(), other, env, needAssertions, haveAssertions, openVars, widenMode & WidenMode( curClass.allowWidening, true ), indexer, common ) ) {
@@ -458,9 +458,4 @@
 		if ( otherArray && arrayType->get_isVarLen() == otherArray->get_isVarLen() ) {
 
-			// not positive this is correct in all cases, but it's needed for typedefs
-			if ( arrayType->get_isVarLen() || otherArray->get_isVarLen() ) {
-				return;
-			}
-
 			if ( ! arrayType->get_isVarLen() && ! otherArray->get_isVarLen() &&
 				arrayType->get_dimension() != 0 && otherArray->get_dimension() != 0 ) {
@@ -537,10 +532,11 @@
 	/// If this isn't done then argument lists can have wildly different
 	/// size and structure, when they should be compatible.
-	struct TtypeExpander : public Mutator {
-		TypeEnvironment & env;
-		TtypeExpander( TypeEnvironment & env ) : env( env ) {}
-		Type * mutate( TypeInstType * typeInst ) {
+	struct TtypeExpander : public WithShortCircuiting {
+		TypeEnvironment & tenv;
+		TtypeExpander( TypeEnvironment & tenv ) : tenv( tenv ) {}
+		void premutate( TypeInstType * ) { visit_children = false; }
+		Type * postmutate( TypeInstType * typeInst ) {
 			EqvClass eqvClass;
-			if ( env.lookup( typeInst->get_name(), eqvClass ) ) {
+			if ( tenv.lookup( typeInst->get_name(), eqvClass ) ) {
 				if ( eqvClass.data.kind == TypeDecl::Ttype ) {
 					// expand ttype parameter into its actual type
@@ -560,5 +556,5 @@
 		dst.clear();
 		for ( DeclarationWithType * dcl : src ) {
-			TtypeExpander expander( env );
+			PassVisitor<TtypeExpander> expander( env );
 			dcl->acceptMutator( expander );
 			std::list< Type * > types;
@@ -750,5 +746,5 @@
 			std::list<Type *> types1, types2;
 
-			TtypeExpander expander( env );
+			PassVisitor<TtypeExpander> expander( env );
 			flat1->acceptMutator( expander );
 			flat2->acceptMutator( expander );
Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SymTab/Autogen.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -16,5 +16,4 @@
 #include "Autogen.h"
 
-#include <cstddef>                 // for NULL
 #include <algorithm>               // for count_if
 #include <cassert>                 // for strict_dynamic_cast, assert, assertf
@@ -27,8 +26,10 @@
 #include "AddVisit.h"              // for addVisit
 #include "CodeGen/OperatorTable.h" // for isCtorDtor, isCtorDtorAssign
+#include "Common/PassVisitor.h"    // for PassVisitor
 #include "Common/ScopedMap.h"      // for ScopedMap<>::const_iterator, Scope...
 #include "Common/utility.h"        // for cloneAll, operator+
-#include "GenPoly/DeclMutator.h"   // for DeclMutator
 #include "GenPoly/ScopedSet.h"     // for ScopedSet, ScopedSet<>::iterator
+#include "InitTweak/GenInit.h"     // for fixReturnStatements
+#include "ResolvExpr/Resolver.h"   // for resolveDecl
 #include "SymTab/Mangler.h"        // for Mangler
 #include "SynTree/Attribute.h"     // For Attribute
@@ -42,67 +43,44 @@
 namespace SymTab {
 	Type * SizeType = 0;
-	typedef ScopedMap< std::string, bool > TypeMap;
-
-	/// Data used to generate functions generically. Specifically, the name of the generated function, a function which generates the routine protoype, and a map which contains data to determine whether a function should be generated.
+
+	/// Data used to generate functions generically. Specifically, the name of the generated function and a function which generates the routine protoype
 	struct FuncData {
 		typedef FunctionType * (*TypeGen)( Type * );
-		FuncData( const std::string & fname, const TypeGen & genType, TypeMap & map ) : fname( fname ), genType( genType ), map( map ) {}
+		FuncData( const std::string & fname, const TypeGen & genType ) : fname( fname ), genType( genType ) {}
 		std::string fname;
 		TypeGen genType;
-		TypeMap & map;
-	};
-
-	class AutogenerateRoutines final : public Visitor {
-	    template< typename Visitor >
-	    friend void acceptAndAdd( std::list< Declaration * > &translationUnit, Visitor &visitor );
-	    template< typename Visitor >
-	    friend void addVisitStatementList( std::list< Statement* > &stmts, Visitor &visitor );
-	  public:
-		std::list< Declaration * > &get_declsToAdd() { return declsToAdd; }
-
-		typedef Visitor Parent;
-		using Parent::visit;
-
+	};
+
+	struct AutogenerateRoutines final : public WithDeclsToAdd, public WithVisitorRef<AutogenerateRoutines>, public WithGuards, public WithShortCircuiting, public WithIndexer {
 		AutogenerateRoutines();
 
-		virtual void visit( EnumDecl *enumDecl );
-		virtual void visit( StructDecl *structDecl );
-		virtual void visit( UnionDecl *structDecl );
-		virtual void visit( TypeDecl *typeDecl );
-		virtual void visit( TraitDecl *ctxDecl );
-		virtual void visit( FunctionDecl *functionDecl );
-
-		virtual void visit( FunctionType *ftype );
-		virtual void visit( PointerType *ftype );
-
-		virtual void visit( CompoundStmt *compoundStmt );
-		virtual void visit( SwitchStmt *switchStmt );
+		void previsit( EnumDecl * enumDecl );
+		void previsit( StructDecl * structDecl );
+		void previsit( UnionDecl * structDecl );
+		void previsit( TypeDecl * typeDecl );
+		void previsit( TraitDecl * traitDecl );
+		void previsit( FunctionDecl * functionDecl );
+
+		void previsit( FunctionType * ftype );
+		void previsit( PointerType * ptype );
+
+		void previsit( CompoundStmt * compoundStmt );
 
 	  private:
-		template< typename StmtClass > void visitStatement( StmtClass *stmt );
-
-		std::list< Declaration * > declsToAdd, declsToAddAfter;
-		std::set< std::string > structsDone;
+
+		GenPoly::ScopedSet< std::string > structsDone;
 		unsigned int functionNesting = 0;     // current level of nested functions
-		/// Note: the following maps could be ScopedSets, but it should be easier to work
-		/// deleted functions in if they are maps, since the value false can be inserted
-		/// at the current scope without affecting outer scopes or requiring copies.
-		TypeMap copyable, assignable, constructable, destructable;
+
+		InitTweak::ManagedTypes managedTypes;
 		std::vector< FuncData > data;
 	};
 
 	/// generates routines for tuple types.
-	/// Doesn't really need to be a mutator, but it's easier to reuse DeclMutator than it is to use AddVisit
-	/// or anything we currently have that supports adding new declarations for visitors
-	class AutogenTupleRoutines : public GenPoly::DeclMutator {
-	  public:
-		typedef GenPoly::DeclMutator Parent;
-		using Parent::mutate;
-
-		virtual DeclarationWithType * mutate( FunctionDecl *functionDecl );
-
-		virtual Type * mutate( TupleType *tupleType );
-
-		virtual CompoundStmt * mutate( CompoundStmt *compoundStmt );
+	struct AutogenTupleRoutines : public WithDeclsToAdd, public WithVisitorRef<AutogenTupleRoutines>, public WithGuards, public WithShortCircuiting {
+		void previsit( FunctionDecl * functionDecl );
+
+		void postvisit( TupleType * tupleType );
+
+		void previsit( CompoundStmt * compoundStmt );
 
 	  private:
@@ -112,14 +90,128 @@
 
 	void autogenerateRoutines( std::list< Declaration * > &translationUnit ) {
-		AutogenerateRoutines generator;
-		acceptAndAdd( translationUnit, generator );
+		PassVisitor<AutogenerateRoutines> generator;
+		acceptAll( translationUnit, generator );
 
 		// needs to be done separately because AutogenerateRoutines skips types that appear as function arguments, etc.
 		// AutogenTupleRoutines tupleGenerator;
-		// tupleGenerator.mutateDeclarationList( translationUnit );
+		// acceptAll( translationUnit, tupleGenerator );
+	}
+
+	//=============================================================================================
+	// FuncGenerator definitions
+	//=============================================================================================
+	class FuncGenerator {
+	public:
+		std::list< Declaration * > definitions, forwards;
+
+		FuncGenerator( Type * type, const std::vector< FuncData > & data, unsigned int functionNesting, SymTab::Indexer & indexer ) : type( type ), data( data ), functionNesting( functionNesting ), indexer( indexer ) {}
+
+		virtual bool shouldAutogen() const = 0;
+		void genStandardFuncs();
+		virtual void genFieldCtors() = 0;
+	protected:
+		Type * type;
+		const std::vector< FuncData > & data;
+		unsigned int functionNesting;
+		SymTab::Indexer & indexer;
+
+		virtual void genFuncBody( FunctionDecl * dcl ) = 0;
+		virtual bool isConcurrentType() const = 0;
+
+		void resolve( FunctionDecl * dcl );
+		void generatePrototypes( std::list< FunctionDecl * > & newFuncs );
+	};
+
+	class StructFuncGenerator : public FuncGenerator {
+		StructDecl * aggregateDecl;
+	public:
+		StructFuncGenerator( StructDecl * aggregateDecl, StructInstType * refType, const std::vector< FuncData > & data,  unsigned int functionNesting, SymTab::Indexer & indexer ) : FuncGenerator( refType, data, functionNesting, indexer ), aggregateDecl( aggregateDecl) {}
+
+		virtual bool shouldAutogen() const override;
+		virtual bool isConcurrentType() const override;
+
+		virtual void genFuncBody( FunctionDecl * dcl ) override;
+		virtual void genFieldCtors() override;
+
+	private:
+		/// generates a single struct member operation (constructor call, destructor call, assignment call)
+		void makeMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, bool forward = true );
+
+		/// generates the body of a struct function by iterating the struct members (via parameters) - generates default ctor, copy ctor, assignment, and dtor bodies, but NOT field ctor bodies
+		template<typename Iterator>
+		void makeFunctionBody( Iterator member, Iterator end, FunctionDecl * func, bool forward = true );
+
+		/// generate the body of a constructor which takes parameters that match fields, e.g.
+		/// void ?{}(A *, int) and void?{}(A *, int, int) for a struct A which has two int fields.
+		template<typename Iterator>
+		void makeFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func );
+	};
+
+	class UnionFuncGenerator : public FuncGenerator {
+		UnionDecl * aggregateDecl;
+	public:
+		UnionFuncGenerator( UnionDecl * aggregateDecl, UnionInstType * refType, const std::vector< FuncData > & data,  unsigned int functionNesting, SymTab::Indexer & indexer ) : FuncGenerator( refType, data, functionNesting, indexer ), aggregateDecl( aggregateDecl) {}
+
+		virtual bool shouldAutogen() const override;
+		virtual bool isConcurrentType() const override;
+
+		virtual void genFuncBody( FunctionDecl * dcl ) override;
+		virtual void genFieldCtors() override;
+
+	private:
+		/// generates a single struct member operation (constructor call, destructor call, assignment call)
+		template<typename OutputIterator>
+		void makeMemberOp( ObjectDecl * srcParam, ObjectDecl * dstParam, OutputIterator out );
+
+		/// generates the body of a struct function by iterating the struct members (via parameters) - generates default ctor, copy ctor, assignment, and dtor bodies, but NOT field ctor bodies
+		template<typename Iterator>
+		void makeFunctionBody( Iterator member, Iterator end, FunctionDecl * func, bool forward = true );
+
+		/// generate the body of a constructor which takes parameters that match fields, e.g.
+		/// void ?{}(A *, int) and void?{}(A *, int, int) for a struct A which has two int fields.
+		template<typename Iterator>
+		void makeFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func );
+	};
+
+	class EnumFuncGenerator : public FuncGenerator {
+	public:
+		EnumFuncGenerator( EnumInstType * refType, const std::vector< FuncData > & data,  unsigned int functionNesting, SymTab::Indexer & indexer ) : FuncGenerator( refType, data, functionNesting, indexer ) {}
+
+		virtual bool shouldAutogen() const override;
+		virtual bool isConcurrentType() const override;
+
+		virtual void genFuncBody( FunctionDecl * dcl ) override;
+		virtual void genFieldCtors() override;
+
+	private:
+	};
+
+	class TypeFuncGenerator : public FuncGenerator {
+		TypeDecl * typeDecl;
+	public:
+		TypeFuncGenerator( TypeDecl * typeDecl, TypeInstType * refType, const std::vector<FuncData> & data, unsigned int functionNesting, SymTab::Indexer & indexer ) : FuncGenerator( refType, data, functionNesting, indexer ), typeDecl( typeDecl ) {}
+
+		virtual bool shouldAutogen() const override;
+		virtual void genFuncBody( FunctionDecl * dcl ) override;
+		virtual bool isConcurrentType() const override;
+		virtual void genFieldCtors() override;
+	};
+
+	//=============================================================================================
+	// helper functions
+	//=============================================================================================
+	void generateFunctions( FuncGenerator & gen, std::list< Declaration * > & declsToAdd ) {
+		if ( ! gen.shouldAutogen() ) return;
+
+		// generate each of the functions based on the supplied FuncData objects
+		gen.genStandardFuncs();
+		gen.genFieldCtors();
+
+		declsToAdd.splice( declsToAdd.end(), gen.forwards );
+		declsToAdd.splice( declsToAdd.end(), gen.definitions );
 	}
 
 	bool isUnnamedBitfield( ObjectDecl * obj ) {
-		return obj != NULL && obj->get_name() == "" && obj->get_bitfieldWidth() != NULL;
+		return obj != nullptr && obj->name == "" && obj->bitfieldWidth != nullptr;
 	}
 
@@ -127,16 +219,27 @@
 	void addForwardDecl( FunctionDecl * functionDecl, std::list< Declaration * > & declsToAdd ) {
 		FunctionDecl * decl = functionDecl->clone();
-		delete decl->get_statements();
-		decl->set_statements( NULL );
+		delete decl->statements;
+		decl->statements = nullptr;
 		declsToAdd.push_back( decl );
 		decl->fixUniqueId();
 	}
 
+	const std::list< TypeDecl * > getGenericParams( Type * t ) {
+		std::list< TypeDecl * > * ret = nullptr;
+		if ( StructInstType * inst = dynamic_cast< StructInstType * > ( t ) ) {
+			ret = inst->get_baseParameters();
+		} else if ( UnionInstType * inst = dynamic_cast< UnionInstType * >( t ) ) {
+			ret = inst->get_baseParameters();
+		}
+		return ret ? *ret : std::list< TypeDecl * >();
+	}
+
 	/// given type T, generate type of default ctor/dtor, i.e. function type void (*) (T *)
 	FunctionType * genDefaultType( Type * paramType ) {
+		const auto & typeParams = getGenericParams( paramType );
 		FunctionType *ftype = new FunctionType( Type::Qualifiers(), false );
+		cloneAll( typeParams, ftype->forall );
 		ObjectDecl *dstParam = new ObjectDecl( "_dst", Type::StorageClasses(), LinkageSpec::Cforall, nullptr, new ReferenceType( Type::Qualifiers(), paramType->clone() ), nullptr );
-		ftype->get_parameters().push_back( dstParam );
-
+		ftype->parameters.push_back( dstParam );
 		return ftype;
 	}
@@ -146,5 +249,5 @@
 		FunctionType *ftype = genDefaultType( paramType );
 		ObjectDecl *srcParam = new ObjectDecl( "_src", Type::StorageClasses(), LinkageSpec::Cforall, nullptr, paramType->clone(), nullptr );
-		ftype->get_parameters().push_back( srcParam );
+		ftype->parameters.push_back( srcParam );
 		return ftype;
 	}
@@ -154,5 +257,5 @@
 		FunctionType *ftype = genCopyType( paramType );
 		ObjectDecl *returnVal = new ObjectDecl( "_ret", Type::StorageClasses(), LinkageSpec::Cforall, nullptr, paramType->clone(), nullptr );
-		ftype->get_returnVals().push_back( returnVal );
+		ftype->returnVals.push_back( returnVal );
 		return ftype;
 	}
@@ -171,145 +274,124 @@
 	}
 
-	/// inserts base type of first argument into map if pred(funcDecl) is true
-	void insert( FunctionDecl *funcDecl, TypeMap & map, FunctionDecl * (*pred)(Declaration *) ) {
-		// insert type into constructable, etc. map if appropriate
-		if ( pred( funcDecl ) ) {
-			FunctionType * ftype = funcDecl->get_functionType();
-			assert( ! ftype->get_parameters().empty() );
-			Type * t = InitTweak::getPointerBase( ftype->get_parameters().front()->get_type() );
-			assert( t );
-			map.insert( Mangler::mangleType( t ), true );
-		}
-	}
-
-	/// using map and t, determines if is constructable, etc.
-	bool lookup( const TypeMap & map, Type * t ) {
-		assertf( t, "Autogenerate lookup was given non-type: %s", toString( t ).c_str() );
-		if ( dynamic_cast< PointerType * >( t ) ) {
-			// will need more complicated checking if we want this to work with pointer types, since currently
-			return true;
-		} else if ( ArrayType * at = dynamic_cast< ArrayType * >( t ) ) {
-			// an array's constructor, etc. is generated on the fly based on the base type's constructor, etc.
-			return lookup( map, at->get_base() );
-		}
-		TypeMap::const_iterator it = map.find( Mangler::mangleType( t ) );
-		if ( it != map.end() ) return it->second;
-		// something that does not appear in the map is by default not constructable, etc.
-		return false;
-	}
-
-	/// using map and aggr, examines each member to determine if constructor, etc. should be generated
-	template<typename Container>
-	bool shouldGenerate( const TypeMap & map, const Container & container ) {
-		for ( Type * t : container ) {
-			if ( ! lookup( map, t ) ) return false;
-		}
-		return true;
-	}
-
-	/// data structure for abstracting the generation of special functions
-	template< typename OutputIterator, typename Container >
-	struct FuncGenerator {
-		const Container & container;
-		Type *refType;
-		unsigned int functionNesting;
-		const std::list< TypeDecl* > & typeParams;
-		OutputIterator out;
-		FuncGenerator( const Container & container, Type *refType, unsigned int functionNesting, const std::list< TypeDecl* > & typeParams, OutputIterator out ) : container( container ), refType( refType ), functionNesting( functionNesting ), typeParams( typeParams ), out( out ) {}
-
-		/// generates a function (?{}, ?=?, ^?{}) based on the data argument and members. If function is generated, inserts the type into the map.
-		void gen( const FuncData & data, bool concurrent_type ) {
-			if ( ! shouldGenerate( data.map, container ) ) return;
-			FunctionType * ftype = data.genType( refType );
-
-			if ( concurrent_type && CodeGen::isDestructor( data.fname ) ) {
+	Type * declToType( Declaration * decl ) {
+		if ( DeclarationWithType * dwt = dynamic_cast< DeclarationWithType * >( decl ) ) {
+			return dwt->get_type();
+		}
+		return nullptr;
+	}
+
+	Type * declToTypeDeclBase( Declaration * decl ) {
+		if ( TypeDecl * td = dynamic_cast< TypeDecl * >( decl ) ) {
+			return td->base;
+		}
+		return nullptr;
+	}
+
+	//=============================================================================================
+	// FuncGenerator member definitions
+	//=============================================================================================
+	void FuncGenerator::genStandardFuncs() {
+		std::list< FunctionDecl * > newFuncs;
+		generatePrototypes( newFuncs );
+
+		for ( FunctionDecl * dcl : newFuncs ) {
+			genFuncBody( dcl );
+			if ( CodeGen::isAssignment( dcl->name ) ) {
+				// assignment needs to return a value
+				FunctionType * assignType = dcl->type;
+				assert( assignType->parameters.size() == 2 );
+				assert( assignType->returnVals.size() == 1 );
+				ObjectDecl * dstParam = strict_dynamic_cast< ObjectDecl * >( assignType->parameters.front() );
+				dcl->statements->push_back( new ReturnStmt( noLabels, new VariableExpr( dstParam ) ) );
+			}
+			resolve( dcl );
+		}
+	}
+
+	void FuncGenerator::generatePrototypes( std::list< FunctionDecl * > & newFuncs ) {
+		bool concurrent_type = isConcurrentType();
+		for ( const FuncData & d : data ) {
+			// generate a function (?{}, ?=?, ^?{}) based on the current FuncData.
+			FunctionType * ftype = d.genType( type );
+
+			// destructor for concurrent type must be mutex
+			if ( concurrent_type && CodeGen::isDestructor( d.fname ) ) {
 				ftype->parameters.front()->get_type()->set_mutex( true );
 			}
 
-			cloneAll( typeParams, ftype->forall );
-			*out++ = genFunc( data.fname, ftype, functionNesting );
-			data.map.insert( Mangler::mangleType( refType ), true );
-		}
-	};
-
-	template< typename OutputIterator, typename Container >
-	FuncGenerator<OutputIterator, Container> makeFuncGenerator( const Container & container, Type *refType, unsigned int functionNesting, const std::list< TypeDecl* > & typeParams, OutputIterator out ) {
-		return FuncGenerator<OutputIterator, Container>( container, refType, functionNesting, typeParams, out );
-	}
-
-	/// generates a single enumeration assignment expression
-	ApplicationExpr * genEnumAssign( FunctionType * ftype, FunctionDecl * assignDecl ) {
-		// enum copy construct and assignment is just C-style assignment.
-		// this looks like a bad recursive call, but code gen will turn it into
-		// a C-style assignment.
-		// This happens before function pointer type conversion, so need to do it manually here
-		// NOTE: ftype is not necessarily the functionType belonging to assignDecl - ftype is the
-		// type of the function that this expression is being generated for (so that the correct
-		// parameters) are using in the variable exprs
-		assert( ftype->get_parameters().size() == 2 );
-		ObjectDecl * dstParam = strict_dynamic_cast< ObjectDecl * >( ftype->get_parameters().front() );
-		ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( ftype->get_parameters().back() );
-
-		VariableExpr * assignVarExpr = new VariableExpr( assignDecl );
-		Type * assignVarExprType = assignVarExpr->get_result();
-		assignVarExprType = new PointerType( Type::Qualifiers(), assignVarExprType );
-		assignVarExpr->set_result( assignVarExprType );
-		ApplicationExpr * assignExpr = new ApplicationExpr( assignVarExpr );
-		assignExpr->get_args().push_back( new VariableExpr( dstParam ) );
-		assignExpr->get_args().push_back( new VariableExpr( srcParam ) );
-		return assignExpr;
-	}
-
-	// E ?=?(E volatile*, int),
-	//   ?=?(E _Atomic volatile*, int);
-	void makeEnumFunctions( EnumInstType *refType, unsigned int functionNesting, std::list< Declaration * > &declsToAdd ) {
-
-		// T ?=?(E *, E);
-		FunctionType *assignType = genAssignType( refType );
-
-		// void ?{}(E *); void ^?{}(E *);
-		FunctionType * ctorType = genDefaultType( refType->clone() );
-		FunctionType * dtorType = genDefaultType( refType->clone() );
-
-		// void ?{}(E *, E);
-		FunctionType *copyCtorType = genCopyType( refType->clone() );
-
-		// add unused attribute to parameters of default constructor and destructor
-		ctorType->get_parameters().front()->get_attributes().push_back( new Attribute( "unused" ) );
-		dtorType->get_parameters().front()->get_attributes().push_back( new Attribute( "unused" ) );
-
-		// xxx - should we also generate void ?{}(E *, int) and E ?{}(E *, E)?
-		// right now these cases work, but that might change.
-
-		// xxx - Temporary: make these functions intrinsic so they codegen as C assignment.
-		// Really they're something of a cross between instrinsic and autogen, so should
-		// probably make a new linkage type
-		FunctionDecl *assignDecl = genFunc( "?=?", assignType, functionNesting, true );
-		FunctionDecl *ctorDecl = genFunc( "?{}", ctorType, functionNesting, true );
-		FunctionDecl *copyCtorDecl = genFunc( "?{}", copyCtorType, functionNesting, true );
-		FunctionDecl *dtorDecl = genFunc( "^?{}", dtorType, functionNesting, true );
-
-		// body is either return stmt or expr stmt
-		assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, genEnumAssign( assignType, assignDecl ) ) );
-		copyCtorDecl->get_statements()->get_kids().push_back( new ExprStmt( noLabels, genEnumAssign( copyCtorType, assignDecl ) ) );
-
-		declsToAdd.push_back( ctorDecl );
-		declsToAdd.push_back( copyCtorDecl );
-		declsToAdd.push_back( dtorDecl );
-		declsToAdd.push_back( assignDecl ); // assignment should come last since it uses copy constructor in return
-	}
-
-	/// generates a single struct member operation (constructor call, destructor call, assignment call)
-	void makeStructMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, bool forward = true ) {
+			newFuncs.push_back( genFunc( d.fname, ftype, functionNesting ) );
+		}
+	}
+
+	void FuncGenerator::resolve( FunctionDecl * dcl ) {
+		try {
+			ResolvExpr::resolveDecl( dcl, indexer );
+			if ( functionNesting == 0 ) {
+				// forward declare if top-level struct, so that
+				// type is complete as soon as its body ends
+				// Note: this is necessary if we want structs which contain
+				// generic (otype) structs as members.
+				addForwardDecl( dcl, forwards );
+			}
+			definitions.push_back( dcl );
+			indexer.addId( dcl );
+		} catch ( SemanticError err ) {
+			// okay if decl does not resolve - that means the function should not be generated
+			delete dcl;
+		}
+	}
+
+	bool StructFuncGenerator::shouldAutogen() const {
+		// Builtins do not use autogeneration.
+		return ! aggregateDecl->linkage.is_builtin;
+	}
+	bool StructFuncGenerator::isConcurrentType() const { return aggregateDecl->is_thread() || aggregateDecl->is_monitor(); }
+
+	void StructFuncGenerator::genFuncBody( FunctionDecl * dcl ) {
+		// generate appropriate calls to member ctor, assignment
+		// destructor needs to do everything in reverse, so pass "forward" based on whether the function is a destructor
+		if ( ! CodeGen::isDestructor( dcl->name ) ) {
+			makeFunctionBody( aggregateDecl->members.begin(), aggregateDecl->members.end(), dcl );
+		} else {
+			makeFunctionBody( aggregateDecl->members.rbegin(), aggregateDecl->members.rend(), dcl, false );
+		}
+	}
+
+	void StructFuncGenerator::genFieldCtors() {
+		// field ctors are only generated if default constructor and copy constructor are both generated
+		unsigned numCtors = std::count_if( definitions.begin(), definitions.end(), [](Declaration * dcl) { return CodeGen::isConstructor( dcl->name ); } );
+
+		// Field constructors are only generated if default and copy constructor
+		// are generated, since they need access to both
+		if ( numCtors != 2 ) return;
+
+		// create constructors which take each member type as a parameter.
+		// for example, for struct A { int x, y; }; generate
+		//   void ?{}(A *, int) and void ?{}(A *, int, int)
+		FunctionType * memCtorType = genDefaultType( type );
+		for ( Declaration * member : aggregateDecl->members ) {
+			DeclarationWithType * field = strict_dynamic_cast<DeclarationWithType *>( member );
+			if ( isUnnamedBitfield( dynamic_cast< ObjectDecl * > ( field ) ) ) {
+				// don't make a function whose parameter is an unnamed bitfield
+				continue;
+			}
+			memCtorType->parameters.push_back( new ObjectDecl( field->name, Type::StorageClasses(), LinkageSpec::Cforall, 0, field->get_type()->clone(), 0 ) );
+			FunctionDecl * ctor = genFunc( "?{}", memCtorType->clone(), functionNesting );
+			makeFieldCtorBody( aggregateDecl->members.begin(), aggregateDecl->members.end(), ctor );
+			resolve( ctor );
+		}
+		delete memCtorType;
+	}
+
+	void StructFuncGenerator::makeMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, bool forward ) {
 		InitTweak::InitExpander srcParam( src );
 
 		// assign to destination
-		Expression *dstselect = new MemberExpr( field, new CastExpr( new VariableExpr( dstParam ), strict_dynamic_cast< ReferenceType* >( dstParam->get_type() )->get_base()->clone() ) );
-		genImplicitCall( srcParam, dstselect, func->get_name(), back_inserter( func->get_statements()->get_kids() ), field, forward );
-	}
-
-	/// generates the body of a struct function by iterating the struct members (via parameters) - generates default ctor, copy ctor, assignment, and dtor bodies, but NOT field ctor bodies
+		Expression *dstselect = new MemberExpr( field, new CastExpr( new VariableExpr( dstParam ), strict_dynamic_cast< ReferenceType* >( dstParam->get_type() )->base->clone() ) );
+		genImplicitCall( srcParam, dstselect, func->name, back_inserter( func->statements->kids ), field, forward );
+	}
+
 	template<typename Iterator>
-	void makeStructFunctionBody( Iterator member, Iterator end, FunctionDecl * func, bool forward = true ) {
+	void StructFuncGenerator::makeFunctionBody( Iterator member, Iterator end, FunctionDecl * func, bool forward ) {
 		for ( ; member != end; ++member ) {
 			if ( DeclarationWithType *field = dynamic_cast< DeclarationWithType * >( *member ) ) { // otherwise some form of type declaration, e.g. Aggregate
@@ -321,41 +403,29 @@
 				}
 
-				if ( type->get_const() && func->get_name() == "?=?" ) {
+				if ( type->get_const() && CodeGen::isAssignment( func->name ) ) {
 					// don't assign const members, but do construct/destruct
 					continue;
 				}
 
-				if ( field->get_name() == "" ) {
-					// don't assign to anonymous members
-					// xxx - this is a temporary fix. Anonymous members tie into
-					// our inheritance model. I think the correct way to handle this is to
-					// cast the structure to the type of the member and let the resolver
-					// figure out whether it's valid and have a pass afterwards that fixes
-					// the assignment to use pointer arithmetic with the offset of the
-					// member, much like how generic type members are handled.
-					continue;
-				}
-
 				assert( ! func->get_functionType()->get_parameters().empty() );
 				ObjectDecl * dstParam = dynamic_cast<ObjectDecl*>( func->get_functionType()->get_parameters().front() );
-				ObjectDecl * srcParam = NULL;
+				ObjectDecl * srcParam = nullptr;
 				if ( func->get_functionType()->get_parameters().size() == 2 ) {
 					srcParam = dynamic_cast<ObjectDecl*>( func->get_functionType()->get_parameters().back() );
 				}
+
 				// srcParam may be NULL, in which case we have default ctor/dtor
 				assert( dstParam );
 
-				Expression *srcselect = srcParam ? new MemberExpr( field, new VariableExpr( srcParam ) ) : NULL;
-				makeStructMemberOp( dstParam, srcselect, field, func, forward );
+				Expression *srcselect = srcParam ? new MemberExpr( field, new VariableExpr( srcParam ) ) : nullptr;
+				makeMemberOp( dstParam, srcselect, field, func, forward );
 			} // if
 		} // for
-	} // makeStructFunctionBody
-
-	/// generate the body of a constructor which takes parameters that match fields, e.g.
-	/// void ?{}(A *, int) and void?{}(A *, int, int) for a struct A which has two int fields.
+	} // makeFunctionBody
+
 	template<typename Iterator>
-	void makeStructFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func ) {
-		FunctionType * ftype = func->get_functionType();
-		std::list<DeclarationWithType*> & params = ftype->get_parameters();
+	void StructFuncGenerator::makeFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func ) {
+		FunctionType * ftype = func->type;
+		std::list<DeclarationWithType*> & params = ftype->parameters;
 		assert( params.size() >= 2 );  // should not call this function for default ctor, etc.
 
@@ -369,21 +439,12 @@
 					// don't make a function whose parameter is an unnamed bitfield
 					continue;
-				} else if ( field->get_name() == "" ) {
-					// don't assign to anonymous members
-					// xxx - this is a temporary fix. Anonymous members tie into
-					// our inheritance model. I think the correct way to handle this is to
-					// cast the structure to the type of the member and let the resolver
-					// figure out whether it's valid and have a pass afterwards that fixes
-					// the assignment to use pointer arithmetic with the offset of the
-					// member, much like how generic type members are handled.
-					continue;
 				} else if ( parameter != params.end() ) {
 					// matching parameter, initialize field with copy ctor
 					Expression *srcselect = new VariableExpr(*parameter);
-					makeStructMemberOp( dstParam, srcselect, field, func );
+					makeMemberOp( dstParam, srcselect, field, func );
 					++parameter;
 				} else {
 					// no matching parameter, initialize field with default ctor
-					makeStructMemberOp( dstParam, NULL, field, func );
+					makeMemberOp( dstParam, nullptr, field, func );
 				}
 			}
@@ -391,154 +452,47 @@
 	}
 
-	Type * declToType( Declaration * decl ) {
-		if ( DeclarationWithType * dwt = dynamic_cast< DeclarationWithType * >( decl ) ) {
-			return dwt->get_type();
-		}
-		return nullptr;
-	}
-
-	/// generates struct constructors, destructor, and assignment functions
-	void makeStructFunctions( StructDecl *aggregateDecl, StructInstType *refType, unsigned int functionNesting, std::list< Declaration * > & declsToAdd, const std::vector< FuncData > & data ) {
+	bool UnionFuncGenerator::shouldAutogen() const {
 		// Builtins do not use autogeneration.
-		if ( aggregateDecl->get_linkage() == LinkageSpec::BuiltinCFA ||
-			 aggregateDecl->get_linkage() == LinkageSpec::BuiltinC ) {
-			return;
-		}
-
-		// Make function polymorphic in same parameters as generic struct, if applicable
-		const std::list< TypeDecl* > & typeParams = aggregateDecl->get_parameters(); // List of type variables to be placed on the generated functions
-
-		// generate each of the functions based on the supplied FuncData objects
-		std::list< FunctionDecl * > newFuncs;
-		// structure that iterates aggregate decl members, returning their types
-		auto generator = makeFuncGenerator( lazy_map( aggregateDecl->members, declToType ), refType, functionNesting, typeParams, back_inserter( newFuncs ) );
-		for ( const FuncData & d : data ) {
-			generator.gen( d, aggregateDecl->is_thread() || aggregateDecl->is_monitor() );
-		}
-
+		return ! aggregateDecl->linkage.is_builtin;
+	}
+
+	// xxx - is this right?
+	bool UnionFuncGenerator::isConcurrentType() const { return false; };
+
+	/// generate a single union assignment expression (using memcpy)
+	template< typename OutputIterator >
+	void UnionFuncGenerator::makeMemberOp( ObjectDecl * srcParam, ObjectDecl * dstParam, OutputIterator out ) {
+		UntypedExpr *copy = new UntypedExpr( new NameExpr( "__builtin_memcpy" ) );
+		copy->args.push_back( new AddressExpr( new VariableExpr( dstParam ) ) );
+		copy->args.push_back( new AddressExpr( new VariableExpr( srcParam ) ) );
+		copy->args.push_back( new SizeofExpr( srcParam->get_type()->clone() ) );
+		*out++ = new ExprStmt( noLabels, copy );
+	}
+
+	/// generates the body of a union assignment/copy constructor/field constructor
+	void UnionFuncGenerator::genFuncBody( FunctionDecl * funcDecl ) {
+		FunctionType * ftype = funcDecl->type;
+		if ( InitTweak::isCopyConstructor( funcDecl ) || InitTweak::isAssignment( funcDecl ) ) {
+			assert( ftype->parameters.size() == 2 );
+			ObjectDecl * dstParam = strict_dynamic_cast< ObjectDecl * >( ftype->parameters.front() );
+			ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( ftype->parameters.back() );
+			makeMemberOp( srcParam, dstParam, back_inserter( funcDecl->statements->kids ) );
+		} else {
+			// default ctor/dtor body is empty - add unused attribute to parameter to silence warnings
+			assert( ftype->parameters.size() == 1 );
+			ObjectDecl * dstParam = strict_dynamic_cast< ObjectDecl * >( ftype->parameters.front() );
+			dstParam->attributes.push_back( new Attribute( "unused" ) );
+		}
+	}
+
+	/// generate the body of a constructor which takes parameters that match fields, e.g.
+	/// void ?{}(A *, int) and void?{}(A *, int, int) for a struct A which has two int fields.
+	void UnionFuncGenerator::genFieldCtors() {
 		// field ctors are only generated if default constructor and copy constructor are both generated
-		unsigned numCtors = std::count_if( newFuncs.begin(), newFuncs.end(), [](FunctionDecl * dcl) { return CodeGen::isConstructor( dcl->get_name() ); } );
-
-		if ( functionNesting == 0 ) {
-			// forward declare if top-level struct, so that
-			// type is complete as soon as its body ends
-			// Note: this is necessary if we want structs which contain
-			// generic (otype) structs as members.
-			for ( FunctionDecl * dcl : newFuncs ) {
-				addForwardDecl( dcl, declsToAdd );
-			}
-		}
-
-		for ( FunctionDecl * dcl : newFuncs ) {
-			// generate appropriate calls to member ctor, assignment
-			// destructor needs to do everything in reverse, so pass "forward" based on whether the function is a destructor
-			if ( ! CodeGen::isDestructor( dcl->get_name() ) ) {
-				makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), dcl );
-			} else {
-				makeStructFunctionBody( aggregateDecl->get_members().rbegin(), aggregateDecl->get_members().rend(), dcl, false );
-			}
-			if ( CodeGen::isAssignment( dcl->get_name() ) ) {
-				// assignment needs to return a value
-				FunctionType * assignType = dcl->get_functionType();
-				assert( assignType->get_parameters().size() == 2 );
-				ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( assignType->get_parameters().back() );
-				dcl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
-			}
-			declsToAdd.push_back( dcl );
-		}
-
-		// create constructors which take each member type as a parameter.
-		// for example, for struct A { int x, y; }; generate
-		//   void ?{}(A *, int) and void ?{}(A *, int, int)
+		unsigned numCtors = std::count_if( definitions.begin(), definitions.end(), [](Declaration * dcl) { return CodeGen::isConstructor( dcl->get_name() ); } );
+
 		// Field constructors are only generated if default and copy constructor
 		// are generated, since they need access to both
-		if ( numCtors == 2 ) {
-			FunctionType * memCtorType = genDefaultType( refType );
-			cloneAll( typeParams, memCtorType->get_forall() );
-			for ( std::list<Declaration *>::iterator i = aggregateDecl->get_members().begin(); i != aggregateDecl->get_members().end(); ++i ) {
-				DeclarationWithType * member = dynamic_cast<DeclarationWithType *>( *i );
-				assert( member );
-				if ( isUnnamedBitfield( dynamic_cast< ObjectDecl * > ( member ) ) ) {
-					// don't make a function whose parameter is an unnamed bitfield
-					continue;
-				} else if ( member->get_name() == "" ) {
-					// don't assign to anonymous members
-					// xxx - this is a temporary fix. Anonymous members tie into
-					// our inheritance model. I think the correct way to handle this is to
-					// cast the structure to the type of the member and let the resolver
-					// figure out whether it's valid/choose the correct unnamed member
-					continue;
-				}
-				memCtorType->get_parameters().push_back( new ObjectDecl( member->get_name(), Type::StorageClasses(), LinkageSpec::Cforall, 0, member->get_type()->clone(), 0 ) );
-				FunctionDecl * ctor = genFunc( "?{}", memCtorType->clone(), functionNesting );
-				makeStructFieldCtorBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctor );
-				declsToAdd.push_back( ctor );
-			}
-			delete memCtorType;
-		}
-	}
-
-	/// generate a single union assignment expression (using memcpy)
-	template< typename OutputIterator >
-	void makeUnionFieldsAssignment( ObjectDecl * srcParam, ObjectDecl * dstParam, OutputIterator out ) {
-		UntypedExpr *copy = new UntypedExpr( new NameExpr( "__builtin_memcpy" ) );
-		copy->get_args().push_back( new AddressExpr( new VariableExpr( dstParam ) ) );
-		copy->get_args().push_back( new AddressExpr( new VariableExpr( srcParam ) ) );
-		copy->get_args().push_back( new SizeofExpr( srcParam->get_type()->clone() ) );
-		*out++ = new ExprStmt( noLabels, copy );
-	}
-
-	/// generates the body of a union assignment/copy constructor/field constructor
-	void makeUnionAssignBody( FunctionDecl * funcDecl ) {
-		FunctionType * ftype = funcDecl->get_functionType();
-		assert( ftype->get_parameters().size() == 2 );
-		ObjectDecl * dstParam = strict_dynamic_cast< ObjectDecl * >( ftype->get_parameters().front() );
-		ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( ftype->get_parameters().back() );
-
-		makeUnionFieldsAssignment( srcParam, dstParam, back_inserter( funcDecl->get_statements()->get_kids() ) );
-		if ( CodeGen::isAssignment( funcDecl->get_name() ) ) {
-			// also generate return statement in assignment
-			funcDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
-		}
-	}
-
-	/// generates union constructors, destructors, and assignment operator
-	void makeUnionFunctions( UnionDecl *aggregateDecl, UnionInstType *refType, unsigned int functionNesting, std::list< Declaration * > & declsToAdd ) {
-		// Make function polymorphic in same parameters as generic union, if applicable
-		const std::list< TypeDecl* > & typeParams = aggregateDecl->get_parameters(); // List of type variables to be placed on the generated functions
-
-		// default ctor/dtor need only first parameter
-		// void ?{}(T *); void ^?{}(T *);
-		FunctionType *ctorType = genDefaultType( refType );
-		FunctionType *dtorType = genDefaultType( refType );
-
-		// copy ctor needs both parameters
-		// void ?{}(T *, T);
-		FunctionType *copyCtorType = genCopyType( refType );
-
-		// assignment needs both and return value
-		// T ?=?(T *, T);
-		FunctionType *assignType = genAssignType( refType );
-
-		cloneAll( typeParams, ctorType->get_forall() );
-		cloneAll( typeParams, dtorType->get_forall() );
-		cloneAll( typeParams, copyCtorType->get_forall() );
-		cloneAll( typeParams, assignType->get_forall() );
-
-		// add unused attribute to parameters of default constructor and destructor
-		ctorType->get_parameters().front()->get_attributes().push_back( new Attribute( "unused" ) );
-		dtorType->get_parameters().front()->get_attributes().push_back( new Attribute( "unused" ) );
-
-		// Routines at global scope marked "static" to prevent multiple definitions is separate translation units
-		// because each unit generates copies of the default routines for each aggregate.
-		FunctionDecl *assignDecl = genFunc( "?=?", assignType, functionNesting );
-		FunctionDecl *ctorDecl = genFunc( "?{}",  ctorType, functionNesting );
-		FunctionDecl *copyCtorDecl = genFunc( "?{}", copyCtorType, functionNesting );
-		FunctionDecl *dtorDecl = genFunc( "^?{}", dtorType, functionNesting );
-
-		makeUnionAssignBody( assignDecl );
-
-		// body of assignment and copy ctor is the same
-		makeUnionAssignBody( copyCtorDecl );
+		if ( numCtors != 2 ) return;
 
 		// create a constructor which takes the first member type as a parameter.
@@ -546,60 +500,114 @@
 		// void ?{}(A *, int)
 		// This is to mimic C's behaviour which initializes the first member of the union.
-		std::list<Declaration *> memCtors;
-		for ( Declaration * member : aggregateDecl->get_members() ) {
-			if ( DeclarationWithType * field = dynamic_cast< DeclarationWithType * >( member ) ) {
-				ObjectDecl * srcParam = new ObjectDecl( "src", Type::StorageClasses(), LinkageSpec::Cforall, 0, field->get_type()->clone(), 0 );
-
-				FunctionType * memCtorType = ctorType->clone();
-				memCtorType->get_parameters().push_back( srcParam );
-				FunctionDecl * ctor = genFunc( "?{}", memCtorType, functionNesting );
-
-				makeUnionAssignBody( ctor );
-				memCtors.push_back( ctor );
-				// only generate a ctor for the first field
+		FunctionType * memCtorType = genDefaultType( type );
+		for ( Declaration * member : aggregateDecl->members ) {
+			DeclarationWithType * field = strict_dynamic_cast<DeclarationWithType *>( member );
+			if ( isUnnamedBitfield( dynamic_cast< ObjectDecl * > ( field ) ) ) {
+				// don't make a function whose parameter is an unnamed bitfield
 				break;
 			}
-		}
-
-		declsToAdd.push_back( ctorDecl );
-		declsToAdd.push_back( copyCtorDecl );
-		declsToAdd.push_back( dtorDecl );
-		declsToAdd.push_back( assignDecl ); // assignment should come last since it uses copy constructor in return
-		declsToAdd.splice( declsToAdd.end(), memCtors );
-	}
-
+			memCtorType->parameters.push_back( new ObjectDecl( field->name, Type::StorageClasses(), LinkageSpec::Cforall, nullptr, field->get_type()->clone(), nullptr ) );
+			FunctionDecl * ctor = genFunc( "?{}", memCtorType->clone(), functionNesting );
+			ObjectDecl * srcParam = strict_dynamic_cast<ObjectDecl *>( ctor->type->parameters.back() );
+			srcParam->fixUniqueId();
+			ObjectDecl * dstParam = InitTweak::getParamThis( ctor->type );
+			makeMemberOp( srcParam, dstParam, back_inserter( ctor->statements->kids ) );
+			resolve( ctor );
+			// only generate one field ctor for unions
+			break;
+		}
+		delete memCtorType;
+	}
+
+	void EnumFuncGenerator::genFuncBody( FunctionDecl * funcDecl ) {
+		// xxx - Temporary: make these functions intrinsic so they codegen as C assignment.
+		// Really they're something of a cross between instrinsic and autogen, so should
+		// probably make a new linkage type
+		funcDecl->linkage = LinkageSpec::Intrinsic;
+		FunctionType * ftype = funcDecl->type;
+		if ( InitTweak::isCopyConstructor( funcDecl ) || InitTweak::isAssignment( funcDecl ) ) {
+			assert( ftype->parameters.size() == 2 );
+			ObjectDecl * dstParam = strict_dynamic_cast< ObjectDecl * >( ftype->parameters.front() );
+			ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( ftype->parameters.back() );
+
+			// enum copy construct and assignment is just C-style assignment.
+			// this looks like a bad recursive call, but code gen will turn it into
+			// a C-style assignment.
+			// This happens before function pointer type conversion, so need to do it manually here
+			ApplicationExpr * callExpr = new ApplicationExpr( VariableExpr::functionPointer( funcDecl ) );
+			callExpr->get_args().push_back( new VariableExpr( dstParam ) );
+			callExpr->get_args().push_back( new VariableExpr( srcParam ) );
+			funcDecl->statements->push_back( new ExprStmt( noLabels, callExpr ) );
+		} else {
+			// default ctor/dtor body is empty - add unused attribute to parameter to silence warnings
+			assert( ftype->parameters.size() == 1 );
+			ObjectDecl * dstParam = strict_dynamic_cast< ObjectDecl * >( ftype->parameters.front() );
+			dstParam->attributes.push_back( new Attribute( "unused" ) );
+		}
+	}
+
+	bool EnumFuncGenerator::shouldAutogen() const { return true; }
+	bool EnumFuncGenerator::isConcurrentType() const { return false; }
+	// enums do not have field constructors
+	void EnumFuncGenerator::genFieldCtors() {}
+
+	bool TypeFuncGenerator::shouldAutogen() const { return true; };
+
+	void TypeFuncGenerator::genFuncBody( FunctionDecl * dcl ) {
+		FunctionType * ftype = dcl->type;
+		assertf( ftype->parameters.size() == 1 || ftype->parameters.size() == 2, "Incorrect number of parameters in autogenerated typedecl function: %zd", ftype->parameters.size() );
+		DeclarationWithType * dst = ftype->parameters.front();
+		DeclarationWithType * src = ftype->parameters.size() == 2 ? ftype->parameters.back() : nullptr;
+		// generate appropriate calls to member ctor, assignment
+		UntypedExpr * expr = new UntypedExpr( new NameExpr( dcl->name ) );
+		expr->args.push_back( new CastExpr( new VariableExpr( dst ), new ReferenceType( Type::Qualifiers(), typeDecl->base->clone() ) ) );
+		if ( src ) expr->args.push_back( new CastExpr( new VariableExpr( src ), typeDecl->base->clone() ) );
+		dcl->statements->kids.push_back( new ExprStmt( noLabels, expr ) );
+	};
+
+	// xxx - should reach in and determine if base type is concurrent?
+	bool TypeFuncGenerator::isConcurrentType() const { return false; };
+
+	// opaque types do not have field constructors
+	void TypeFuncGenerator::genFieldCtors() {};
+
+	//=============================================================================================
+	// Visitor definitions
+	//=============================================================================================
 	AutogenerateRoutines::AutogenerateRoutines() {
 		// the order here determines the order that these functions are generated.
 		// assignment should come last since it uses copy constructor in return.
-		data.push_back( FuncData( "?{}", genDefaultType, constructable ) );
-		data.push_back( FuncData( "?{}", genCopyType, copyable ) );
-		data.push_back( FuncData( "^?{}", genDefaultType, destructable ) );
-		data.push_back( FuncData( "?=?", genAssignType, assignable ) );
-	}
-
-	void AutogenerateRoutines::visit( EnumDecl *enumDecl ) {
-		if ( ! enumDecl->get_members().empty() ) {
-			EnumInstType *enumInst = new EnumInstType( Type::Qualifiers(), enumDecl->get_name() );
-			// enumInst->set_baseEnum( enumDecl );
-			makeEnumFunctions( enumInst, functionNesting, declsToAddAfter );
-		}
-	}
-
-	void AutogenerateRoutines::visit( StructDecl *structDecl ) {
-		if ( structDecl->has_body() && structsDone.find( structDecl->get_name() ) == structsDone.end() ) {
-			StructInstType structInst( Type::Qualifiers(), structDecl->get_name() );
-			for ( TypeDecl * typeDecl : structDecl->get_parameters() ) {
-				// need to visit assertions so that they are added to the appropriate maps
-				acceptAll( typeDecl->get_assertions(), *this );
-				structInst.get_parameters().push_back( new TypeExpr( new TypeInstType( Type::Qualifiers(), typeDecl->get_name(), typeDecl ) ) );
-			}
+		data.emplace_back( "?{}", genDefaultType );
+		data.emplace_back( "?{}", genCopyType );
+		data.emplace_back( "^?{}", genDefaultType );
+		data.emplace_back( "?=?", genAssignType );
+	}
+
+	void AutogenerateRoutines::previsit( EnumDecl * enumDecl ) {
+		// must visit children (enum constants) to add them to the indexer
+		if ( enumDecl->has_body() ) {
+			EnumInstType enumInst( Type::Qualifiers(), enumDecl->get_name() );
+			enumInst.set_baseEnum( enumDecl );
+			EnumFuncGenerator gen( &enumInst, data, functionNesting, indexer );
+			generateFunctions( gen, declsToAddAfter );
+		}
+	}
+
+	void AutogenerateRoutines::previsit( StructDecl * structDecl ) {
+		visit_children = false;
+		if ( structDecl->has_body() ) {
+			StructInstType structInst( Type::Qualifiers(), structDecl->name );
 			structInst.set_baseStruct( structDecl );
-			makeStructFunctions( structDecl, &structInst, functionNesting, declsToAddAfter, data );
-			structsDone.insert( structDecl->get_name() );
+			for ( TypeDecl * typeDecl : structDecl->parameters ) {
+				structInst.parameters.push_back( new TypeExpr( new TypeInstType( Type::Qualifiers(), typeDecl->name, typeDecl ) ) );
+			}
+			StructFuncGenerator gen( structDecl, &structInst, data, functionNesting, indexer );
+			generateFunctions( gen, declsToAddAfter );
 		} // if
 	}
 
-	void AutogenerateRoutines::visit( UnionDecl *unionDecl ) {
-		if ( ! unionDecl->get_members().empty() ) {
+	void AutogenerateRoutines::previsit( UnionDecl * unionDecl ) {
+		visit_children = false;
+		if ( unionDecl->has_body()  ) {
 			UnionInstType unionInst( Type::Qualifiers(), unionDecl->get_name() );
 			unionInst.set_baseUnion( unionDecl );
@@ -607,114 +615,48 @@
 				unionInst.get_parameters().push_back( new TypeExpr( new TypeInstType( Type::Qualifiers(), typeDecl->get_name(), typeDecl ) ) );
 			}
-			makeUnionFunctions( unionDecl, &unionInst, functionNesting, declsToAddAfter );
+			UnionFuncGenerator gen( unionDecl, &unionInst, data, functionNesting, indexer );
+			generateFunctions( gen, declsToAddAfter );
 		} // if
 	}
 
-	Type * declToTypeDeclBase( Declaration * decl ) {
-		if ( TypeDecl * td = dynamic_cast< TypeDecl * >( decl ) ) {
-			return td->base;
-		}
-		return nullptr;
-	}
-
 	// generate ctor/dtors/assign for typedecls, e.g., otype T = int *;
-	void AutogenerateRoutines::visit( TypeDecl *typeDecl ) {
+	void AutogenerateRoutines::previsit( TypeDecl * typeDecl ) {
+		visit_children = false;
 		if ( ! typeDecl->base ) return;
 
-		// generate each of the functions based on the supplied FuncData objects
-		std::list< FunctionDecl * > newFuncs;
-		std::list< Declaration * > tds { typeDecl };
-		std::list< TypeDecl * > typeParams;
 		TypeInstType refType( Type::Qualifiers(), typeDecl->name, typeDecl );
-		auto generator = makeFuncGenerator( lazy_map( tds, declToTypeDeclBase ), &refType, functionNesting, typeParams, back_inserter( newFuncs ) );
-		for ( const FuncData & d : data ) {
-			generator.gen( d, false );
-		}
-
-		if ( functionNesting == 0 ) {
-			// forward declare if top-level struct, so that
-			// type is complete as soon as its body ends
-			// Note: this is necessary if we want structs which contain
-			// generic (otype) structs as members.
-			for ( FunctionDecl * dcl : newFuncs ) {
-				addForwardDecl( dcl, declsToAddAfter );
-			}
-		}
-
-		for ( FunctionDecl * dcl : newFuncs ) {
-			FunctionType * ftype = dcl->type;
-			assertf( ftype->parameters.size() == 1 || ftype->parameters.size() == 2, "Incorrect number of parameters in autogenerated typedecl function: %zd", ftype->parameters.size() );
-			DeclarationWithType * dst = ftype->parameters.front();
-			DeclarationWithType * src = ftype->parameters.size() == 2 ? ftype->parameters.back() : nullptr;
-			// generate appropriate calls to member ctor, assignment
-			// destructor needs to do everything in reverse, so pass "forward" based on whether the function is a destructor
-			UntypedExpr * expr = new UntypedExpr( new NameExpr( dcl->name ) );
-			expr->args.push_back( new CastExpr( new VariableExpr( dst ), new ReferenceType( Type::Qualifiers(), typeDecl->base->clone() ) ) );
-			if ( src ) expr->args.push_back( new CastExpr( new VariableExpr( src ), typeDecl->base->clone() ) );
-			dcl->statements->kids.push_back( new ExprStmt( noLabels, expr ) );
-			if ( CodeGen::isAssignment( dcl->get_name() ) ) {
-				// assignment needs to return a value
-				FunctionType * assignType = dcl->type;
-				assert( assignType->parameters.size() == 2 );
-				ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( assignType->parameters.back() );
-				dcl->statements->kids.push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
-			}
-			declsToAddAfter.push_back( dcl );
-		}
-	}
-
-	void addDecls( std::list< Declaration * > &declsToAdd, std::list< Statement * > &statements, std::list< Statement * >::iterator i ) {
-		for ( std::list< Declaration * >::iterator decl = declsToAdd.begin(); decl != declsToAdd.end(); ++decl ) {
-			statements.insert( i, new DeclStmt( noLabels, *decl ) );
-		} // for
-		declsToAdd.clear();
-	}
-
-	void AutogenerateRoutines::visit( FunctionType *) {
+		TypeFuncGenerator gen( typeDecl, &refType, data, functionNesting, indexer );
+		generateFunctions( gen, declsToAddAfter );
+	}
+
+	void AutogenerateRoutines::previsit( FunctionType *) {
 		// ensure that we don't add assignment ops for types defined as part of the function
-	}
-
-	void AutogenerateRoutines::visit( PointerType *) {
+		visit_children = false;
+	}
+
+	void AutogenerateRoutines::previsit( PointerType *) {
 		// ensure that we don't add assignment ops for types defined as part of the pointer
-	}
-
-	void AutogenerateRoutines::visit( TraitDecl *) {
+		visit_children = false;
+	}
+
+	void AutogenerateRoutines::previsit( TraitDecl * ) {
 		// ensure that we don't add assignment ops for types defined as part of the trait
-	}
-
-	template< typename StmtClass >
-	inline void AutogenerateRoutines::visitStatement( StmtClass *stmt ) {
-		std::set< std::string > oldStructs = structsDone;
-		addVisit( stmt, *this );
-		structsDone = oldStructs;
-	}
-
-	void AutogenerateRoutines::visit( FunctionDecl *functionDecl ) {
+		visit_children = false;
+	}
+
+	void AutogenerateRoutines::previsit( FunctionDecl * functionDecl ) {
+		visit_children = false;
 		// record the existence of this function as appropriate
-		insert( functionDecl, constructable, InitTweak::isDefaultConstructor );
-		insert( functionDecl, assignable, InitTweak::isAssignment );
-		insert( functionDecl, copyable, InitTweak::isCopyConstructor );
-		insert( functionDecl, destructable, InitTweak::isDestructor );
-
-		maybeAccept( functionDecl->get_functionType(), *this );
+		managedTypes.handleDWT( functionDecl );
+
+		maybeAccept( functionDecl->type, *visitor );
 		functionNesting += 1;
-		maybeAccept( functionDecl->get_statements(), *this );
+		maybeAccept( functionDecl->statements, *visitor );
 		functionNesting -= 1;
 	}
 
-	void AutogenerateRoutines::visit( CompoundStmt *compoundStmt ) {
-		constructable.beginScope();
-		assignable.beginScope();
-		copyable.beginScope();
-		destructable.beginScope();
-		visitStatement( compoundStmt );
-		constructable.endScope();
-		assignable.endScope();
-		copyable.endScope();
-		destructable.endScope();
-	}
-
-	void AutogenerateRoutines::visit( SwitchStmt *switchStmt ) {
-		visitStatement( switchStmt );
+	void AutogenerateRoutines::previsit( CompoundStmt * ) {
+		GuardScope( managedTypes );
+		GuardScope( structsDone );
 	}
 
@@ -734,8 +676,7 @@
 	}
 
-	Type * AutogenTupleRoutines::mutate( TupleType * tupleType ) {
-		tupleType = strict_dynamic_cast< TupleType * >( Parent::mutate( tupleType ) );
+	void AutogenTupleRoutines::postvisit( TupleType * tupleType ) {
 		std::string mangleName = SymTab::Mangler::mangleType( tupleType );
-		if ( seenTuples.find( mangleName ) != seenTuples.end() ) return tupleType;
+		if ( seenTuples.find( mangleName ) != seenTuples.end() ) return;
 		seenTuples.insert( mangleName );
 
@@ -755,5 +696,5 @@
 			if ( TypeInstType * ty = dynamic_cast< TypeInstType * >( t ) ) {
 				if ( ! done.count( ty->get_baseType() ) ) {
-					TypeDecl * newDecl = new TypeDecl( ty->get_baseType()->get_name(), Type::StorageClasses(), nullptr, TypeDecl::Any );
+					TypeDecl * newDecl = new TypeDecl( ty->get_baseType()->get_name(), Type::StorageClasses(), nullptr, TypeDecl::Dtype, true );
 					TypeInstType * inst = new TypeInstType( Type::Qualifiers(), newDecl->get_name(), newDecl );
 					newDecl->get_assertions().push_back( new FunctionDecl( "?=?", Type::StorageClasses(), LinkageSpec::Cforall, genAssignType( inst ), nullptr,
@@ -785,25 +726,20 @@
 		makeTupleFunctionBody( dtorDecl );
 
-		addDeclaration( ctorDecl );
-		addDeclaration( copyCtorDecl );
-		addDeclaration( dtorDecl );
-		addDeclaration( assignDecl ); // assignment should come last since it uses copy constructor in return
-
-		return tupleType;
-	}
-
-	DeclarationWithType * AutogenTupleRoutines::mutate( FunctionDecl *functionDecl ) {
-		functionDecl->set_functionType( maybeMutate( functionDecl->get_functionType(), *this ) );
+		declsToAddBefore.push_back( ctorDecl );
+		declsToAddBefore.push_back( copyCtorDecl );
+		declsToAddBefore.push_back( dtorDecl );
+		declsToAddBefore.push_back( assignDecl ); // assignment should come last since it uses copy constructor in return
+	}
+
+	void AutogenTupleRoutines::previsit( FunctionDecl *functionDecl ) {
+		visit_children = false;
+		maybeAccept( functionDecl->type, *visitor );
 		functionNesting += 1;
-		functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );
+		maybeAccept( functionDecl->statements, *visitor );
 		functionNesting -= 1;
-		return functionDecl;
-	}
-
-	CompoundStmt * AutogenTupleRoutines::mutate( CompoundStmt *compoundStmt ) {
-		seenTuples.beginScope();
-		compoundStmt = strict_dynamic_cast< CompoundStmt * >( Parent::mutate( compoundStmt ) );
-		seenTuples.endScope();
-		return compoundStmt;
+	}
+
+	void AutogenTupleRoutines::previsit( CompoundStmt * ) {
+		GuardScope( seenTuples );
 	}
 } // SymTab
Index: src/SymTab/Autogen.h
===================================================================
--- src/SymTab/Autogen.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SymTab/Autogen.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -19,4 +19,5 @@
 #include <string>                 // for string
 
+#include "CodeGen/OperatorTable.h"
 #include "Common/UniqueName.h"    // for UniqueName
 #include "InitTweak/InitTweak.h"  // for InitExpander
@@ -44,6 +45,12 @@
 	extern FunctionDecl * dereferenceOperator;
 
-	// temporary
+	// generate the type of an assignment function for paramType
 	FunctionType * genAssignType( Type * paramType );
+
+	// generate the type of a default constructor or destructor for paramType
+	FunctionType * genDefaultType( Type * paramType );
+
+	// generate the type of a copy constructor for paramType
+	FunctionType * genCopyType( Type * paramType );
 
 	/// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls.
@@ -54,8 +61,18 @@
 	/// optionally returns a statement which must be inserted prior to the containing loop, if there is one
 	template< typename OutputIterator >
-	Statement * genScalarCall( InitTweak::InitExpander & srcParam, Expression *dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast = false ) {
+	Statement * genScalarCall( InitTweak::InitExpander & srcParam, Expression * dstParam, std::string fname, OutputIterator out, Type * type, bool addCast = false ) {
+		bool isReferenceCtorDtor = false;
+		if ( dynamic_cast< ReferenceType * >( type ) && CodeGen::isCtorDtor( fname ) ) {
+			// reference constructors are essentially application of the rebind operator.
+			// apply & to both arguments, do not need a cast
+			fname = "?=?";
+			dstParam = new AddressExpr( dstParam );
+			addCast = false;
+			isReferenceCtorDtor = true;
+		}
+
 		// want to be able to generate assignment, ctor, and dtor generically,
 		// so fname is either ?=?, ?{}, or ^?{}
-		UntypedExpr *fExpr = new UntypedExpr( new NameExpr( fname ) );
+		UntypedExpr * fExpr = new UntypedExpr( new NameExpr( fname ) );
 
 		if ( addCast ) {
@@ -72,10 +89,19 @@
 			dstParam = new CastExpr( dstParam, new ReferenceType( Type::Qualifiers(), castType ) );
 		}
-		fExpr->get_args().push_back( dstParam );
+		fExpr->args.push_back( dstParam );
 
 		Statement * listInit = srcParam.buildListInit( fExpr );
 
-		std::list< Expression * > args = *++srcParam;
-		fExpr->get_args().splice( fExpr->get_args().end(), args );
+		// fetch next set of arguments
+		++srcParam;
+
+		// return if adding reference fails - will happen on default constructor and destructor
+		if ( isReferenceCtorDtor && ! srcParam.addReference() ) {
+			delete fExpr;
+			return listInit;
+		}
+
+		std::list< Expression * > args = *srcParam;
+		fExpr->args.splice( fExpr->args.end(), args );
 
 		*out++ = new ExprStmt( noLabels, fExpr );
@@ -99,5 +125,5 @@
 			// generate: for ( int i = 0; i < N; ++i )
 			begin = new ConstantExpr( Constant::from_int( 0 ) );
-			end = array->get_dimension()->clone();
+			end = array->dimension->clone();
 			cmp = new NameExpr( "?<?" );
 			update = new NameExpr( "++?" );
@@ -105,6 +131,6 @@
 			// generate: for ( int i = N-1; i >= 0; --i )
 			begin = new UntypedExpr( new NameExpr( "?-?" ) );
-			((UntypedExpr*)begin)->get_args().push_back( array->get_dimension()->clone() );
-			((UntypedExpr*)begin)->get_args().push_back( new ConstantExpr( Constant::from_int( 1 ) ) );
+			((UntypedExpr*)begin)->args.push_back( array->dimension->clone() );
+			((UntypedExpr*)begin)->args.push_back( new ConstantExpr( Constant::from_int( 1 ) ) );
 			end = new ConstantExpr( Constant::from_int( 0 ) );
 			cmp = new NameExpr( "?>=?" );
@@ -115,29 +141,29 @@
 
 		UntypedExpr *cond = new UntypedExpr( cmp );
-		cond->get_args().push_back( new VariableExpr( index ) );
-		cond->get_args().push_back( end );
+		cond->args.push_back( new VariableExpr( index ) );
+		cond->args.push_back( end );
 
 		UntypedExpr *inc = new UntypedExpr( update );
-		inc->get_args().push_back( new VariableExpr( index ) );
+		inc->args.push_back( new VariableExpr( index ) );
 
 		UntypedExpr *dstIndex = new UntypedExpr( new NameExpr( "?[?]" ) );
-		dstIndex->get_args().push_back( dstParam );
-		dstIndex->get_args().push_back( new VariableExpr( index ) );
+		dstIndex->args.push_back( dstParam );
+		dstIndex->args.push_back( new VariableExpr( index ) );
 		dstParam = dstIndex;
 
 		// srcParam must keep track of the array indices to build the
 		// source parameter and/or array list initializer
-		srcParam.addArrayIndex( new VariableExpr( index ), array->get_dimension()->clone() );
+		srcParam.addArrayIndex( new VariableExpr( index ), array->dimension->clone() );
 
 		// for stmt's body, eventually containing call
 		CompoundStmt * body = new CompoundStmt( noLabels );
-		Statement * listInit = genCall( srcParam, dstParam, fname, back_inserter( body->get_kids() ), array->get_base(), addCast, forward );
+		Statement * listInit = genCall( srcParam, dstParam, fname, back_inserter( body->kids ), array->base, addCast, forward );
 
 		// block containing for stmt and index variable
 		std::list<Statement *> initList;
 		CompoundStmt * block = new CompoundStmt( noLabels );
-		block->get_kids().push_back( new DeclStmt( noLabels, index ) );
+		block->push_back( new DeclStmt( noLabels, index ) );
 		if ( listInit ) block->get_kids().push_back( listInit );
-		block->get_kids().push_back( new ForStmt( noLabels, initList, cond, inc, body ) );
+		block->push_back( new ForStmt( noLabels, initList, cond, inc, body ) );
 
 		*out++ = block;
@@ -145,5 +171,5 @@
 
 	template< typename OutputIterator >
-	Statement * genCall( InitTweak::InitExpander &  srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast, bool forward ) {
+	Statement * genCall( InitTweak::InitExpander & srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast, bool forward ) {
 		if ( ArrayType * at = dynamic_cast< ArrayType * >( type ) ) {
 			genArrayCall( srcParam, dstParam, fname, out, at, addCast, forward );
@@ -159,5 +185,5 @@
 	/// ImplicitCtorDtorStmt node.
 	template< typename OutputIterator >
-	void genImplicitCall( InitTweak::InitExpander &  srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, DeclarationWithType * decl, bool forward = true ) {
+	void genImplicitCall( InitTweak::InitExpander & srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, DeclarationWithType * decl, bool forward = true ) {
 		ObjectDecl *obj = dynamic_cast<ObjectDecl *>( decl );
 		assert( obj );
@@ -167,5 +193,5 @@
 		bool addCast = (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && ! obj->get_bitfieldWidth() ) );
 		std::list< Statement * > stmts;
-		genCall( srcParam, dstParam, fname, back_inserter( stmts ), obj->get_type(), addCast, forward );
+		genCall( srcParam, dstParam, fname, back_inserter( stmts ), obj->type, addCast, forward );
 
 		// currently genCall should produce at most one element, but if that changes then the next line needs to be updated to grab the statement which contains the call
Index: src/SymTab/FixFunction.cc
===================================================================
--- src/SymTab/FixFunction.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SymTab/FixFunction.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -26,68 +26,40 @@
 	FixFunction::FixFunction() : isVoid( false ) {}
 
-	DeclarationWithType * FixFunction::mutate(FunctionDecl *functionDecl) {
-		ObjectDecl *pointer = new ObjectDecl( functionDecl->get_name(), functionDecl->get_storageClasses(), functionDecl->get_linkage(), 0, new PointerType( Type::Qualifiers(), functionDecl->get_type() ), 0, functionDecl->get_attributes() );
-		functionDecl->get_attributes().clear();
-		// can't delete function type because it may contain assertions, but can't transfer ownership without a clone since set_type checks for nullptr
-		functionDecl->set_type( functionDecl->get_type()->clone() );
+
+	DeclarationWithType * FixFunction::postmutate(FunctionDecl *functionDecl) {
+		// can't delete function type because it may contain assertions, so transfer ownership to new object
+		ObjectDecl *pointer = new ObjectDecl( functionDecl->name, functionDecl->get_storageClasses(), functionDecl->linkage, nullptr, new PointerType( Type::Qualifiers(), functionDecl->type ), nullptr, functionDecl->attributes );
+		functionDecl->attributes.clear();
+		functionDecl->type = nullptr;
 		delete functionDecl;
 		return pointer;
 	}
 
-	Type * FixFunction::mutate(VoidType *voidType) {
-		isVoid = true;
-		return voidType;
-	}
-
-	Type * FixFunction::mutate(BasicType *basicType) {
-		return basicType;
-	}
-
-	Type * FixFunction::mutate(PointerType *pointerType) {
-		return pointerType;
-	}
-
-	Type * FixFunction::mutate(ArrayType *arrayType) {
+	Type * FixFunction::postmutate(ArrayType *arrayType) {
 		// need to recursively mutate the base type in order for multi-dimensional arrays to work.
-		PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), arrayType->get_base()->clone()->acceptMutator( *this ), maybeClone( arrayType->get_dimension() ), arrayType->get_isVarLen(), arrayType->get_isStatic() );
+		PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), arrayType->base, arrayType->dimension, arrayType->isVarLen, arrayType->isStatic );
+		arrayType->base = nullptr;
+		arrayType->dimension = nullptr;
 		delete arrayType;
 		return pointerType;
 	}
 
-	Type * FixFunction::mutate(StructInstType *aggregateUseType) {
-		return aggregateUseType;
+	void FixFunction::premutate(VoidType *) {
+		isVoid = true;
 	}
 
-	Type * FixFunction::mutate(UnionInstType *aggregateUseType) {
-		return aggregateUseType;
-	}
-
-	Type * FixFunction::mutate(EnumInstType *aggregateUseType) {
-		return aggregateUseType;
-	}
-
-	Type * FixFunction::mutate(TraitInstType *aggregateUseType) {
-		return aggregateUseType;
-	}
-
-	Type * FixFunction::mutate(TypeInstType *aggregateUseType) {
-		return aggregateUseType;
-	}
-
-	Type * FixFunction::mutate(TupleType *tupleType) {
-		return tupleType;
-	}
-
-	Type * FixFunction::mutate(VarArgsType *varArgsType) {
-		return varArgsType;
-	}
-
-	Type * FixFunction::mutate(ZeroType *zeroType) {
-		return zeroType;
-	}
-
-	Type * FixFunction::mutate(OneType *oneType) {
-		return oneType;
-	}
+	void FixFunction::premutate(FunctionDecl *) { visit_children = false; }
+	void FixFunction::premutate(ArrayType *) { visit_children = false; }
+	void FixFunction::premutate(BasicType *) { visit_children = false; }
+	void FixFunction::premutate(PointerType *) { visit_children = false; }
+	void FixFunction::premutate(StructInstType *) { visit_children = false; }
+	void FixFunction::premutate(UnionInstType *) { visit_children = false; }
+	void FixFunction::premutate(EnumInstType *) { visit_children = false; }
+	void FixFunction::premutate(TraitInstType *) { visit_children = false; }
+	void FixFunction::premutate(TypeInstType *) { visit_children = false; }
+	void FixFunction::premutate(TupleType *) { visit_children = false; }
+	void FixFunction::premutate(VarArgsType *) { visit_children = false; }
+	void FixFunction::premutate(ZeroType *) { visit_children = false; }
+	void FixFunction::premutate(OneType *) { visit_children = false; }
 } // namespace SymTab
 
Index: src/SymTab/FixFunction.h
===================================================================
--- src/SymTab/FixFunction.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SymTab/FixFunction.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -16,32 +16,32 @@
 #pragma once
 
-#include "SynTree/Mutator.h"  // for Mutator
-#include "SynTree/SynTree.h"  // for Types
+#include "Common/PassVisitor.h" // for PassVisitor
+#include "SynTree/SynTree.h"    // for Types
 
 namespace SymTab {
 	/// Replaces function and array types by equivalent pointer types.
-	class FixFunction : public Mutator {
+	class FixFunction : public WithShortCircuiting {
 		typedef Mutator Parent;
 	  public:
 		FixFunction();
 
-		bool get_isVoid() const { return isVoid; }
-		void set_isVoid( bool newValue ) { isVoid = newValue; }
-	  private:
-		virtual DeclarationWithType* mutate(FunctionDecl *functionDecl);
+		void premutate(FunctionDecl *functionDecl);
+		DeclarationWithType* postmutate(FunctionDecl *functionDecl);
 
-		virtual Type* mutate(VoidType *voidType);
-		virtual Type* mutate(BasicType *basicType);
-		virtual Type* mutate(PointerType *pointerType);
-		virtual Type* mutate(ArrayType *arrayType);
-		virtual Type* mutate(StructInstType *aggregateUseType);
-		virtual Type* mutate(UnionInstType *aggregateUseType);
-		virtual Type* mutate(EnumInstType *aggregateUseType);
-		virtual Type* mutate(TraitInstType *aggregateUseType);
-		virtual Type* mutate(TypeInstType *aggregateUseType);
-		virtual Type* mutate(TupleType *tupleType);
-		virtual Type* mutate(VarArgsType *varArgsType);
-		virtual Type* mutate(ZeroType *zeroType);
-		virtual Type* mutate(OneType *oneType);
+		Type * postmutate(ArrayType * arrayType);
+
+		void premutate(ArrayType * arrayType);
+		void premutate(VoidType * voidType);
+		void premutate(BasicType * basicType);
+		void premutate(PointerType * pointerType);
+		void premutate(StructInstType * aggregateUseType);
+		void premutate(UnionInstType * aggregateUseType);
+		void premutate(EnumInstType * aggregateUseType);
+		void premutate(TraitInstType * aggregateUseType);
+		void premutate(TypeInstType * aggregateUseType);
+		void premutate(TupleType * tupleType);
+		void premutate(VarArgsType * varArgsType);
+		void premutate(ZeroType * zeroType);
+		void premutate(OneType * oneType);
 
 		bool isVoid;
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SymTab/Indexer.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -40,17 +40,4 @@
 
 namespace SymTab {
-	struct NewScope {
-		NewScope( SymTab::Indexer & indexer ) : indexer( indexer ) { indexer.enterScope(); }
-		~NewScope() { indexer.leaveScope(); }
-		SymTab::Indexer & indexer;
-	};
-
-	template< typename TreeType, typename VisitorType >
-	inline void acceptNewScope( TreeType *tree, VisitorType &visitor ) {
-		visitor.enterScope();
-		maybeAccept( tree, visitor );
-		visitor.leaveScope();
-	}
-
 	typedef std::unordered_map< std::string, DeclarationWithType* > MangleTable;
 	typedef std::unordered_map< std::string, MangleTable > IdTable;
@@ -198,9 +185,9 @@
 	}
 
-	Indexer::Indexer( bool _doDebug ) : tables( 0 ), scope( 0 ), doDebug( _doDebug ) {}
-
-	Indexer::Indexer( const Indexer &that ) : tables( newRef( that.tables ) ), scope( that.scope ), doDebug( that.doDebug ) {}
-
-	Indexer::Indexer( Indexer &&that ) : tables( that.tables ), scope( that.scope ), doDebug( that.doDebug ) {
+	Indexer::Indexer() : tables( 0 ), scope( 0 ) {}
+
+	Indexer::Indexer( const Indexer &that ) : doDebug( that.doDebug ), tables( newRef( that.tables ) ), scope( that.scope ) {}
+
+	Indexer::Indexer( Indexer &&that ) : doDebug( that.doDebug ), tables( that.tables ), scope( that.scope ) {
 		that.tables = 0;
 	}
@@ -420,7 +407,7 @@
 		makeWritable();
 
-		const std::string &name = decl->get_name();
+		const std::string &name = decl->name;
 		std::string mangleName;
-		if ( LinkageSpec::isOverridable( decl->get_linkage() ) ) {
+		if ( LinkageSpec::isOverridable( decl->linkage ) ) {
 			// mangle the name without including the appropriate suffix, so overridable routines are placed into the
 			// same "bucket" as their user defined versions.
@@ -431,5 +418,5 @@
 
 		// this ensures that no two declarations with the same unmangled name at the same scope both have C linkage
-		if ( ! LinkageSpec::isMangled( decl->get_linkage() ) ) {
+		if ( ! LinkageSpec::isMangled( decl->linkage ) ) {
 			// NOTE this is broken in Richard's original code in such a way that it never triggers (it
 			// doesn't check decls that have the same manglename, and all C-linkage decls are defined to
@@ -584,23 +571,25 @@
 
 		if ( doDebug ) {
-			std::cout << "--- Entering scope " << scope << std::endl;
+			std::cerr << "--- Entering scope " << scope << std::endl;
 		}
 	}
 
 	void Indexer::leaveScope() {
-		using std::cout;
+		using std::cerr;
 
 		assert( scope > 0 && "cannot leave initial scope" );
+		if ( doDebug ) {
+			cerr << "--- Leaving scope " << scope << " containing" << std::endl;
+		}
 		--scope;
 
 		while ( tables && tables->scope > scope ) {
 			if ( doDebug ) {
-				cout << "--- Leaving scope " << tables->scope << " containing" << std::endl;
-				dump( tables->idTable, cout );
-				dump( tables->typeTable, cout );
-				dump( tables->structTable, cout );
-				dump( tables->enumTable, cout );
-				dump( tables->unionTable, cout );
-				dump( tables->traitTable, cout );
+				dump( tables->idTable, cerr );
+				dump( tables->typeTable, cerr );
+				dump( tables->structTable, cerr );
+				dump( tables->enumTable, cerr );
+				dump( tables->unionTable, cerr );
+				dump( tables->traitTable, cerr );
 			}
 
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SymTab/Indexer.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -26,5 +26,5 @@
 	class Indexer {
 	  public:
-		explicit Indexer( bool useDebug = false );
+		explicit Indexer();
 
 		Indexer( const Indexer &that );
@@ -76,4 +76,5 @@
 		void addTrait( TraitDecl *decl );
 
+		bool doDebug = false; ///< Display debugging trace?
 	  private:
 		struct Impl;
@@ -81,5 +82,4 @@
 		Impl *tables;         ///< Copy-on-write instance of table data structure
 		unsigned long scope;  ///< Scope index of this pointer
-		bool doDebug;         ///< Display debugging trace?
 
 		/// Takes a new ref to a table (returns null if null)
Index: src/SymTab/Mangler.cc
===================================================================
--- src/SymTab/Mangler.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SymTab/Mangler.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:40:29 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Wed Jun 28 15:31:00 2017
-// Update Count     : 21
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Sep 25 15:49:26 2017
+// Update Count     : 23
 //
 #include "Mangler.h"
@@ -31,12 +31,18 @@
 
 namespace SymTab {
-	std::string Mangler::mangleType( Type *ty ) {
-		Mangler mangler( false, true );
+	std::string Mangler::mangleType( Type * ty ) {
+		Mangler mangler( false, true, true );
 		maybeAccept( ty, mangler );
 		return mangler.get_mangleName();
 	}
 
-	Mangler::Mangler( bool mangleOverridable, bool typeMode )
-		: nextVarNum( 0 ), isTopLevel( true ), mangleOverridable( mangleOverridable ), typeMode( typeMode ) {}
+	std::string Mangler::mangleConcrete( Type* ty ) {
+		Mangler mangler( false, false, false );
+		maybeAccept( ty, mangler );
+		return mangler.get_mangleName();
+	}
+
+	Mangler::Mangler( bool mangleOverridable, bool typeMode, bool mangleGenericParams )
+		: nextVarNum( 0 ), isTopLevel( true ), mangleOverridable( mangleOverridable ), typeMode( typeMode ), mangleGenericParams( mangleGenericParams ) {}
 
 	Mangler::Mangler( const Mangler &rhs ) : mangleName() {
@@ -48,5 +54,5 @@
 	}
 
-	void Mangler::mangleDecl( DeclarationWithType *declaration ) {
+	void Mangler::mangleDecl( DeclarationWithType * declaration ) {
 		bool wasTopLevel = isTopLevel;
 		if ( isTopLevel ) {
@@ -79,18 +85,18 @@
 	}
 
-	void Mangler::visit( ObjectDecl *declaration ) {
+	void Mangler::visit( ObjectDecl * declaration ) {
 		mangleDecl( declaration );
 	}
 
-	void Mangler::visit( FunctionDecl *declaration ) {
+	void Mangler::visit( FunctionDecl * declaration ) {
 		mangleDecl( declaration );
 	}
 
-	void Mangler::visit( VoidType *voidType ) {
+	void Mangler::visit( VoidType * voidType ) {
 		printQualifiers( voidType );
 		mangleName << "v";
 	}
 
-	void Mangler::visit( BasicType *basicType ) {
+	void Mangler::visit( BasicType * basicType ) {
 		static const char *btLetter[] = {
 			"b",	// Bool
@@ -115,4 +121,6 @@
 			"Id",	// DoubleImaginary
 			"Ir",	// LongDoubleImaginary
+			"w",	// SignedInt128
+			"Uw",	// UnsignedInt128
 		};
 
@@ -121,5 +129,5 @@
 	}
 
-	void Mangler::visit( PointerType *pointerType ) {
+	void Mangler::visit( PointerType * pointerType ) {
 		printQualifiers( pointerType );
 		mangleName << "P";
@@ -127,5 +135,5 @@
 	}
 
-	void Mangler::visit( ArrayType *arrayType ) {
+	void Mangler::visit( ArrayType * arrayType ) {
 		// TODO: encode dimension
 		printQualifiers( arrayType );
@@ -134,5 +142,5 @@
 	}
 
-	void Mangler::visit( ReferenceType *refType ) {
+	void Mangler::visit( ReferenceType * refType ) {
 		printQualifiers( refType );
 		mangleName << "R";
@@ -149,5 +157,5 @@
 	}
 
-	void Mangler::visit( FunctionType *functionType ) {
+	void Mangler::visit( FunctionType * functionType ) {
 		printQualifiers( functionType );
 		mangleName << "F";
@@ -160,48 +168,36 @@
 	}
 
-	void Mangler::mangleRef( ReferenceToType *refType, std::string prefix ) {
+	void Mangler::mangleRef( ReferenceToType * refType, std::string prefix ) {
 		printQualifiers( refType );
 
 		mangleName << ( refType->get_name().length() + prefix.length() ) << prefix << refType->get_name();
-	}
-
-	void Mangler::mangleGenericRef( ReferenceToType *refType, std::string prefix ) {
-		printQualifiers( refType );
-
-		std::ostringstream oldName( mangleName.str() );
-		mangleName.clear();
-
-		mangleName << prefix << refType->get_name();
-
-		std::list< Expression* >& params = refType->get_parameters();
-		if ( ! params.empty() ) {
-			mangleName << "_";
-			for ( std::list< Expression* >::const_iterator param = params.begin(); param != params.end(); ++param ) {
-				TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
-				assertf(paramType, "Aggregate parameters should be type expressions: %s", toString(*param).c_str());
-				maybeAccept( paramType->get_type(), *this );
+
+		if ( mangleGenericParams ) {
+			std::list< Expression* >& params = refType->get_parameters();
+			if ( ! params.empty() ) {
+				mangleName << "_";
+				for ( std::list< Expression* >::const_iterator param = params.begin(); param != params.end(); ++param ) {
+					TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
+					assertf(paramType, "Aggregate parameters should be type expressions: %s", toString(*param).c_str());
+					maybeAccept( paramType->get_type(), *this );
+				}
+				mangleName << "_";
 			}
-			mangleName << "_";
 		}
-
-		oldName << mangleName.str().length() << mangleName.str();
-		mangleName.str( oldName.str() );
-	}
-
-	void Mangler::visit( StructInstType *aggregateUseType ) {
-		if ( typeMode ) mangleGenericRef( aggregateUseType, "s" );
-		else mangleRef( aggregateUseType, "s" );
-	}
-
-	void Mangler::visit( UnionInstType *aggregateUseType ) {
-		if ( typeMode ) mangleGenericRef( aggregateUseType, "u" );
-		else mangleRef( aggregateUseType, "u" );
-	}
-
-	void Mangler::visit( EnumInstType *aggregateUseType ) {
+	}
+
+	void Mangler::visit( StructInstType * aggregateUseType ) {
+		mangleRef( aggregateUseType, "s" );
+	}
+
+	void Mangler::visit( UnionInstType * aggregateUseType ) {
+		mangleRef( aggregateUseType, "u" );
+	}
+
+	void Mangler::visit( EnumInstType * aggregateUseType ) {
 		mangleRef( aggregateUseType, "e" );
 	}
 
-	void Mangler::visit( TypeInstType *typeInst ) {
+	void Mangler::visit( TypeInstType * typeInst ) {
 		VarMapType::iterator varNum = varNums.find( typeInst->get_name() );
 		if ( varNum == varNums.end() ) {
@@ -212,7 +208,4 @@
 			numStream << varNum->second.first;
 			switch ( (TypeDecl::Kind )varNum->second.second ) {
-			  case TypeDecl::Any:
-				mangleName << "t";
-				break;
 			  case TypeDecl::Dtype:
 				mangleName << "d";
@@ -231,27 +224,27 @@
 	}
 
-	void Mangler::visit( TupleType *tupleType ) {
+	void Mangler::visit( TupleType * tupleType ) {
 		printQualifiers( tupleType );
 		mangleName << "T";
-		acceptAll( tupleType->get_types(), *this );
+		acceptAll( tupleType->types, *this );
 		mangleName << "_";
 	}
 
-	void Mangler::visit( VarArgsType *varArgsType ) {
+	void Mangler::visit( VarArgsType * varArgsType ) {
 		printQualifiers( varArgsType );
 		mangleName << "VARGS";
 	}
 
-	void Mangler::visit( __attribute__((unused)) ZeroType *zeroType ) {
+	void Mangler::visit( ZeroType * ) {
 		mangleName << "Z";
 	}
 
-	void Mangler::visit( __attribute__((unused)) OneType *oneType ) {
+	void Mangler::visit( OneType * ) {
 		mangleName << "O";
 	}
 
-	void Mangler::visit( TypeDecl *decl ) {
+	void Mangler::visit( TypeDecl * decl ) {
 		static const char *typePrefix[] = { "BT", "BD", "BF" };
-		mangleName << typePrefix[ decl->get_kind() ] << ( decl->get_name().length() + 1 ) << decl->get_name();
+		mangleName << typePrefix[ decl->get_kind() ] << ( decl->name.length() + 1 ) << decl->name;
 	}
 
@@ -262,5 +255,5 @@
 	}
 
-	void Mangler::printQualifiers( Type *type ) {
+	void Mangler::printQualifiers( Type * type ) {
 		// skip if not including qualifiers
 		if ( typeMode ) return;
@@ -270,9 +263,6 @@
 			int tcount = 0, dcount = 0, fcount = 0, vcount = 0;
 			mangleName << "A";
-			for ( Type::ForallList::iterator i = type->get_forall().begin(); i != type->get_forall().end(); ++i ) {
+			for ( Type::ForallList::iterator i = type->forall.begin(); i != type->forall.end(); ++i ) {
 				switch ( (*i)->get_kind() ) {
-				  case TypeDecl::Any:
-					tcount++;
-					break;
 				  case TypeDecl::Dtype:
 					dcount++;
@@ -287,7 +277,7 @@
 					assert( false );
 				} // switch
-				varNums[ (*i )->get_name() ] = std::pair< int, int >( nextVarNum++, (int )(*i )->get_kind() );
-				for ( std::list< DeclarationWithType* >::iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) {
-					Mangler sub_mangler( mangleOverridable, typeMode );
+				varNums[ (*i)->name ] = std::pair< int, int >( nextVarNum++, (int)(*i)->get_kind() );
+				for ( std::list< DeclarationWithType* >::iterator assert = (*i)->assertions.begin(); assert != (*i)->assertions.end(); ++assert ) {
+					Mangler sub_mangler( mangleOverridable, typeMode, mangleGenericParams );
 					sub_mangler.nextVarNum = nextVarNum;
 					sub_mangler.isTopLevel = false;
@@ -307,4 +297,7 @@
 			mangleName << "V";
 		} // if
+		if ( type->get_mutex() ) {
+			mangleName << "M";
+		} // if
 		// Removed due to restrict not affecting function compatibility in GCC
 //		if ( type->get_isRestrict() ) {
@@ -312,6 +305,7 @@
 //		} // if
 		if ( type->get_lvalue() ) {
+			// mangle based on whether the type is lvalue, so that the resolver can differentiate lvalues and rvalues
 			mangleName << "L";
-		} // if
+		}
 		if ( type->get_atomic() ) {
 			mangleName << "A";
Index: src/SymTab/Mangler.h
===================================================================
--- src/SymTab/Mangler.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SymTab/Mangler.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -30,7 +30,10 @@
 		/// Mangle syntax tree object; primary interface to clients
 		template< typename SynTreeClass >
-	    static std::string mangle( SynTreeClass *decl, bool mangleOverridable = true, bool typeMode = false );
+	    static std::string mangle( SynTreeClass *decl, bool mangleOverridable = true, bool typeMode = false, bool mangleGenericParams = true );
 		/// Mangle a type name; secondary interface
 		static std::string mangleType( Type* ty );
+		/// Mangle ignoring generic type parameters
+		static std::string mangleConcrete( Type* ty );
+
 
 		virtual void visit( ObjectDecl *declaration );
@@ -62,11 +65,11 @@
 		bool mangleOverridable;         ///< Specially mangle overridable built-in methods
 		bool typeMode;                  ///< Produce a unique mangled name for a type
+		bool mangleGenericParams;       ///< Include generic parameters in name mangling if true
 
-		Mangler( bool mangleOverridable, bool typeMode );
+		Mangler( bool mangleOverridable, bool typeMode, bool mangleGenericParams );
 		Mangler( const Mangler & );
 
 		void mangleDecl( DeclarationWithType *declaration );
 		void mangleRef( ReferenceToType *refType, std::string prefix );
-		void mangleGenericRef( ReferenceToType *refType, std::string prefix );
 
 		void printQualifiers( Type *type );
@@ -74,6 +77,6 @@
 
 	template< typename SynTreeClass >
-	std::string Mangler::mangle( SynTreeClass *decl, bool mangleOverridable, bool typeMode ) {
-		Mangler mangler( mangleOverridable, typeMode );
+	std::string Mangler::mangle( SynTreeClass *decl, bool mangleOverridable, bool typeMode, bool mangleGenericParams ) {
+		Mangler mangler( mangleOverridable, typeMode, mangleGenericParams );
 		maybeAccept( decl, mangler );
 		return mangler.get_mangleName();
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SymTab/Validate.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -56,4 +56,5 @@
 #include "FixFunction.h"               // for FixFunction
 #include "Indexer.h"                   // for Indexer
+#include "InitTweak/GenInit.h"         // for fixReturnStatements
 #include "InitTweak/InitTweak.h"       // for isCtorDtorAssign
 #include "Parser/LinkageSpec.h"        // for C
@@ -150,6 +151,8 @@
 	/// Replaces array and function types in forall lists by appropriate pointer type and assigns each Object and Function declaration a unique ID.
 	struct ForallPointerDecay final {
-		void previsit( ObjectDecl *object );
-		void previsit( FunctionDecl *func );
+		void previsit( ObjectDecl * object );
+		void previsit( FunctionDecl * func );
+		void previsit( StructDecl * aggrDecl );
+		void previsit( UnionDecl * aggrDecl );
 	};
 
@@ -265,17 +268,18 @@
 		HoistStruct::hoistStruct( translationUnit ); // must happen after EliminateTypedef, so that aggregate typedefs occur in the correct order
 		ReturnTypeFixer::fix( translationUnit ); // must happen before autogen
+		acceptAll( translationUnit, epc ); // must happen before VerifyCtorDtorAssign, because void return objects should not exist; before LinkReferenceToTypes because it is an indexer and needs correct types for mangling
 		acceptAll( translationUnit, lrt ); // must happen before autogen, because sized flag needs to propagate to generated functions
 		acceptAll( translationUnit, genericParams );  // check as early as possible - can't happen before LinkReferenceToTypes
-		acceptAll( translationUnit, epc ); // must happen before VerifyCtorDtorAssign, because void return objects should not exist
 		VerifyCtorDtorAssign::verify( translationUnit );  // must happen before autogen, because autogen examines existing ctor/dtors
+		ReturnChecker::checkFunctionReturns( translationUnit );
+		InitTweak::fixReturnStatements( translationUnit ); // must happen before autogen
 		Concurrency::applyKeywords( translationUnit );
+		acceptAll( translationUnit, fpd ); // must happen before autogenerateRoutines, after Concurrency::applyKeywords because uniqueIds must be set on declaration before resolution
 		autogenerateRoutines( translationUnit ); // moved up, used to be below compoundLiteral - currently needs EnumAndPointerDecay
 		Concurrency::implementMutexFuncs( translationUnit );
 		Concurrency::implementThreadStarter( translationUnit );
-		ReturnChecker::checkFunctionReturns( translationUnit );
 		mutateAll( translationUnit, compoundliteral );
-		acceptAll( translationUnit, fpd );
 		ArrayLength::computeLength( translationUnit );
-		acceptAll( translationUnit, finder );
+		acceptAll( translationUnit, finder ); // xxx - remove this pass soon
 		mutateAll( translationUnit, labelAddrFixer );
 	}
@@ -368,8 +372,8 @@
 			DWTIterator begin( dwts.begin() ), end( dwts.end() );
 			if ( begin == end ) return;
-			FixFunction fixer;
+			PassVisitor<FixFunction> fixer;
 			DWTIterator i = begin;
 			*i = (*i)->acceptMutator( fixer );
-			if ( fixer.get_isVoid() ) {
+			if ( fixer.pass.isVoid ) {
 				DWTIterator j = i;
 				++i;
@@ -382,7 +386,7 @@
 				++i;
 				for ( ; i != end; ++i ) {
-					FixFunction fixer;
+					PassVisitor<FixFunction> fixer;
 					*i = (*i)->acceptMutator( fixer );
-					if ( fixer.get_isVoid() ) {
+					if ( fixer.pass.isVoid ) {
 						throw SemanticError( "invalid type void in function type ", func );
 					} // if
@@ -579,6 +583,6 @@
 
 	/// Fix up assertions - flattens assertion lists, removing all trait instances
-	void forallFixer( Type * func ) {
-		for ( TypeDecl * type : func->get_forall() ) {
+	void forallFixer( std::list< TypeDecl * > & forall, BaseSyntaxNode * node ) {
+		for ( TypeDecl * type : forall ) {
 			std::list< DeclarationWithType * > asserts;
 			asserts.splice( asserts.end(), type->assertions );
@@ -596,8 +600,8 @@
 			// apply FixFunction to every assertion to check for invalid void type
 			for ( DeclarationWithType *& assertion : type->assertions ) {
-				FixFunction fixer;
+				PassVisitor<FixFunction> fixer;
 				assertion = assertion->acceptMutator( fixer );
-				if ( fixer.get_isVoid() ) {
-					throw SemanticError( "invalid type void in assertion of function ", func );
+				if ( fixer.pass.isVoid ) {
+					throw SemanticError( "invalid type void in assertion of function ", node );
 				} // if
 			} // for
@@ -607,7 +611,7 @@
 
 	void ForallPointerDecay::previsit( ObjectDecl *object ) {
-		forallFixer( object->get_type() );
-		if ( PointerType *pointer = dynamic_cast< PointerType * >( object->get_type() ) ) {
-			forallFixer( pointer->get_base() );
+		forallFixer( object->type->forall, object );
+		if ( PointerType *pointer = dynamic_cast< PointerType * >( object->type ) ) {
+			forallFixer( pointer->base->forall, object );
 		} // if
 		object->fixUniqueId();
@@ -615,6 +619,14 @@
 
 	void ForallPointerDecay::previsit( FunctionDecl *func ) {
-		forallFixer( func->get_type() );
+		forallFixer( func->type->forall, func );
 		func->fixUniqueId();
+	}
+
+	void ForallPointerDecay::previsit( StructDecl * aggrDecl ) {
+		forallFixer( aggrDecl->parameters, aggrDecl );
+	}
+
+	void ForallPointerDecay::previsit( UnionDecl * aggrDecl ) {
+		forallFixer( aggrDecl->parameters, aggrDecl );
 	}
 
@@ -656,5 +668,4 @@
 		}
 		filter( translationUnit, isTypedef, true );
-
 	}
 
@@ -664,15 +675,15 @@
 		TypedefMap::const_iterator def = typedefNames.find( typeInst->get_name() );
 		if ( def != typedefNames.end() ) {
-			Type *ret = def->second.first->get_base()->clone();
+			Type *ret = def->second.first->base->clone();
 			ret->get_qualifiers() |= typeInst->get_qualifiers();
 			// place instance parameters on the typedef'd type
-			if ( ! typeInst->get_parameters().empty() ) {
+			if ( ! typeInst->parameters.empty() ) {
 				ReferenceToType *rtt = dynamic_cast<ReferenceToType*>(ret);
 				if ( ! rtt ) {
-					throw SemanticError("cannot apply type parameters to base type of " + typeInst->get_name());
+					throw SemanticError("Cannot apply type parameters to base type of " + typeInst->name);
 				}
 				rtt->get_parameters().clear();
-				cloneAll( typeInst->get_parameters(), rtt->get_parameters() );
-				mutateAll( rtt->get_parameters(), *visitor );  // recursively fix typedefs on parameters
+				cloneAll( typeInst->parameters, rtt->parameters );
+				mutateAll( rtt->parameters, *visitor );  // recursively fix typedefs on parameters
 			} // if
 			delete typeInst;
@@ -680,8 +691,22 @@
 		} else {
 			TypeDeclMap::const_iterator base = typedeclNames.find( typeInst->get_name() );
-			assertf( base != typedeclNames.end(), "Cannot find typedecl name %s", typeInst->get_name().c_str() );
+			assertf( base != typedeclNames.end(), "Cannot find typedecl name %s", typeInst->name.c_str() );
 			typeInst->set_baseType( base->second );
 		} // if
 		return typeInst;
+	}
+
+	struct VarLenChecker : WithShortCircuiting {
+		void previsit( FunctionType * ) { visit_children = false; }
+		void previsit( ArrayType * at ) {
+			isVarLen |= at->isVarLen;
+		}
+		bool isVarLen = false;
+	};
+
+	bool isVariableLength( Type * t ) {
+		PassVisitor<VarLenChecker> varLenChecker;
+		maybeAccept( t, varLenChecker );
+		return varLenChecker.pass.isVarLen;
 	}
 
@@ -694,5 +719,9 @@
 			Type * t2 = typedefNames[ tyDecl->get_name() ].first->get_base();
 			if ( ! ResolvExpr::typesCompatible( t1, t2, Indexer() ) ) {
-				throw SemanticError( "cannot redefine typedef: " + tyDecl->get_name() );
+				throw SemanticError( "Cannot redefine typedef: " + tyDecl->name );
+			}
+			// cannot redefine VLA typedefs
+			if ( isVariableLength( t1 ) || isVariableLength( t2 ) ) {
+				throw SemanticError( "Cannot redefine typedef: " + tyDecl->name );
 			}
 		} else {
Index: src/SynTree/AddStmtVisitor.cc
===================================================================
--- src/SynTree/AddStmtVisitor.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,93 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// AddStmtVisitor.cc --
-//
-// Author           : Rob Schluntz
-// Created On       : Wed Jun 22 12:11:17 2016
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug  4 11:23:47 2016
-// Update Count     : 16
-//
-
-#include "AddStmtVisitor.h"
-
-#include "Common/SemanticError.h"  // for SemanticError
-#include "Declaration.h"           // for Declaration
-#include "Expression.h"            // for Expression
-#include "Statement.h"             // for CompoundStmt, ForStmt, IfStmt, Sta...
-#include "SynTree/Label.h"         // for Label, noLabels
-
-void AddStmtVisitor::visitStatementList( std::list< Statement* > &statements ) {
-	for ( std::list< Statement* >::iterator i = statements.begin(); i != statements.end(); ++i ) {
-		if ( ! stmtsToAddAfter.empty() ) {
-			statements.splice( i, stmtsToAddAfter );
-		} // if
-		(*i)->accept( *this );
-		if ( ! stmtsToAdd.empty() ) {
-			statements.splice( i, stmtsToAdd );
-		} // if
-	} // for
-	if ( ! stmtsToAddAfter.empty() ) {
-		statements.splice( statements.end(), stmtsToAddAfter );
-	} // if
-}
-
-Statement * AddStmtVisitor::visitStatement( Statement *stmt ) {
-	maybeAccept( stmt, *this );
-	if ( ! stmtsToAdd.empty() || ! stmtsToAddAfter.empty() ) {
-		CompoundStmt *compound = new CompoundStmt( noLabels );
-		compound->get_kids().splice( compound->get_kids().end(), stmtsToAdd );
-		compound->get_kids().push_back( stmt );
-		compound->get_kids().splice( compound->get_kids().end(), stmtsToAddAfter );
-		return compound;
-	} else {
-		return stmt;
-	}
-}
-
-void AddStmtVisitor::visit(CompoundStmt *compoundStmt) {
-	visitStatementList( compoundStmt->get_kids() );
-}
-
-void AddStmtVisitor::visit(IfStmt *ifStmt) {
-	ifStmt->set_thenPart( visitStatement( ifStmt->get_thenPart() ) );
-	ifStmt->set_elsePart( visitStatement( ifStmt->get_elsePart() ) );
-	maybeAccept( ifStmt->get_condition(), *this );
-}
-
-void AddStmtVisitor::visit(WhileStmt *whileStmt) {
-	whileStmt->set_body( visitStatement( whileStmt->get_body() ) );
-	maybeAccept( whileStmt->get_condition(), *this );
-}
-
-void AddStmtVisitor::visit(ForStmt *forStmt) {
-	forStmt->set_body( visitStatement( forStmt->get_body() ) );
-	acceptAll( forStmt->get_initialization(), *this );
-	maybeAccept( forStmt->get_condition(), *this );
-	maybeAccept( forStmt->get_increment(), *this );
-}
-
-void AddStmtVisitor::visit(SwitchStmt *switchStmt) {
-	visitStatementList( switchStmt->get_statements() );
-	maybeAccept( switchStmt->get_condition(), *this );
-}
-
-void AddStmtVisitor::visit(CaseStmt *caseStmt) {
-	visitStatementList( caseStmt->get_statements() );
-	maybeAccept( caseStmt->get_condition(), *this );
-}
-
-void AddStmtVisitor::visit(CatchStmt *catchStmt) {
-	catchStmt->set_body( visitStatement( catchStmt->get_body() ) );
-	maybeAccept( catchStmt->get_decl(), *this );
-}
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/SynTree/AddStmtVisitor.h
===================================================================
--- src/SynTree/AddStmtVisitor.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,47 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// AddStmtVisitor.h --
-//
-// Author           : Rob Schluntz
-// Created On       : Wed Jun 22 12:05:48 2016
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 09:51:08 2017
-// Update Count     : 9
-//
-
-#pragma once
-
-#include <list>               // for list
-
-#include "SynTree/SynTree.h"  // for Visitor Nodes
-#include "SynTree/Visitor.h"  // for Visitor
-
-class AddStmtVisitor : public Visitor {
-  public:
-	typedef Visitor Parent;
-
-	using Parent::visit;
-	virtual void visit(CompoundStmt *compoundStmt);
-	virtual void visit(IfStmt *ifStmt);
-	virtual void visit(WhileStmt *whileStmt);
-	virtual void visit(ForStmt *forStmt);
-	virtual void visit(SwitchStmt *switchStmt);
-	virtual void visit(CaseStmt *caseStmt);
-	virtual void visit(CatchStmt *catchStmt);
-
-  protected:
-	void visitStatementList( std::list< Statement * > & );
-	Statement * visitStatement( Statement * );
-	std::list< Statement* > stmtsToAdd;
-	std::list< Statement* > stmtsToAddAfter;
-};
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/SynTree/AddressExpr.cc
===================================================================
--- src/SynTree/AddressExpr.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/AddressExpr.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -33,5 +33,5 @@
 	Type * addrType( Type * type ) {
 		if ( ReferenceType * refType = dynamic_cast< ReferenceType * >( type ) ) {
-			return new ReferenceType( refType->get_qualifiers(), addrType( refType->get_base() ) );
+			return new ReferenceType( refType->get_qualifiers(), addrType( refType->base ) );
 		} else {
 			return new PointerType( Type::Qualifiers(), type->clone() );
@@ -40,13 +40,13 @@
 }
 
-AddressExpr::AddressExpr( Expression *arg, Expression *_aname ) : Expression( _aname ), arg( arg ) {
-	if ( arg->has_result() ) {
-		if ( arg->get_result()->get_lvalue() ) {
+AddressExpr::AddressExpr( Expression *arg ) : Expression(), arg( arg ) {
+	if ( arg->result ) {
+		if ( arg->result->get_lvalue() ) {
 			// lvalue, retains all layers of reference and gains a pointer inside the references
-			set_result( addrType( arg->get_result() ) );
+			set_result( addrType( arg->result ) );
 		} else {
 			// taking address of non-lvalue -- must be a reference, loses one layer of reference
-			ReferenceType * refType = strict_dynamic_cast< ReferenceType * >( arg->get_result() );
-			set_result( addrType( refType->get_base() ) );
+			ReferenceType * refType = strict_dynamic_cast< ReferenceType * >( arg->result );
+			set_result( addrType( refType->base ) );
 		}
 		// result of & is never an lvalue
@@ -62,9 +62,9 @@
 }
 
-void AddressExpr::print( std::ostream &os, int indent ) const {
+void AddressExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Address of:" << std::endl;
 	if ( arg ) {
-		os << std::string( indent+2, ' ' );
-		arg->print( os, indent+2 );
+		os << indent+1;
+		arg->print( os, indent+1 );
 	} // if
 }
@@ -77,6 +77,6 @@
 LabelAddressExpr::~LabelAddressExpr() {}
 
-void LabelAddressExpr::print( std::ostream & os, int indent ) const {
-	os << "Address of label:" << std::endl << std::string( indent+2, ' ' ) << arg;
+void LabelAddressExpr::print( std::ostream & os, Indenter ) const {
+	os << "Address of label:" << arg;
 }
 
Index: src/SynTree/AggregateDecl.cc
===================================================================
--- src/SynTree/AggregateDecl.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/AggregateDecl.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -41,38 +41,38 @@
 }
 
-void AggregateDecl::print( std::ostream &os, int indent ) const {
+void AggregateDecl::print( std::ostream &os, Indenter indent ) const {
 	using std::string;
 	using std::endl;
 
-	os << typeString() << " " << get_name() << ":";
+	os << typeString() << " " << name << ":";
 	if ( get_linkage() != LinkageSpec::Cforall ) {
-		os << " " << LinkageSpec::linkageName( get_linkage() );
+		os << " " << LinkageSpec::linkageName( linkage );
 	} // if
-	os << " with body " << has_body() << endl;
+	os << " with body " << has_body();
 
 	if ( ! parameters.empty() ) {
-		os << endl << string( indent+2, ' ' ) << "with parameters" << endl;
-		printAll( parameters, os, indent+4 );
+		os << endl << indent << "... with parameters" << endl;
+		printAll( parameters, os, indent+1 );
 	} // if
 	if ( ! members.empty() ) {
-		os << endl << string( indent+2, ' ' ) << "with members" << endl;
-		printAll( members, os, indent+4 );
+		os << endl << indent << "... with members" << endl;
+		printAll( members, os, indent+1 );
 	} // if
 	if ( ! attributes.empty() ) {
-		os << endl << string( indent+2, ' ' ) << "with attributes" << endl;
-		printAll( attributes, os, indent+4 );
+		os << endl << indent << "... with attributes" << endl;
+		printAll( attributes, os, indent+1 );
 	} // if
+	os << endl;
 }
 
-void AggregateDecl::printShort( std::ostream &os, int indent ) const {
+void AggregateDecl::printShort( std::ostream &os, Indenter indent ) const {
 	using std::string;
 	using std::endl;
 
-	os << typeString() << " " << get_name();
-	os << string( indent+2, ' ' ) << "with body " << has_body() << endl;
+	os << typeString() << " " << name << " with body " << has_body() << endl;
 
 	if ( ! parameters.empty() ) {
-		os << endl << string( indent+2, ' ' ) << "with parameters" << endl;
-		printAll( parameters, os, indent+4 );
+		os << indent << "... with parameters" << endl;
+		printAll( parameters, os, indent+1 );
 	} // if
 }
Index: src/SynTree/ApplicationExpr.cc
===================================================================
--- src/SynTree/ApplicationExpr.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/ApplicationExpr.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -55,9 +55,9 @@
 	set_result( ResolvExpr::extractResultType( function ) );
 
-	assert( has_result() );
+	assert( result );
 }
 
 ApplicationExpr::ApplicationExpr( const ApplicationExpr &other ) :
-		Expression( other ), function( maybeClone( other.function ) ), inferParams( other.inferParams ) {
+		Expression( other ), function( maybeClone( other.function ) ) {
 	cloneAll( other.args, args );
 }
@@ -68,24 +68,12 @@
 }
 
-void printInferParams( const InferredParams & inferParams, std::ostream &os, int indent, int level ) {
-	if ( ! inferParams.empty() ) {
-		os << std::string(indent, ' ') << "with inferred parameters " << level << ":" << std::endl;
-		for ( InferredParams::const_iterator i = inferParams.begin(); i != inferParams.end(); ++i ) {
-			os << std::string(indent+2, ' ');
-			Declaration::declFromId( i->second.decl )->printShort( os, indent+2 );
-			os << std::endl;
-			printInferParams( *i->second.inferParams, os, indent+2, level+1 );
-		} // for
+void ApplicationExpr::print( std::ostream &os, Indenter indent ) const {
+	os << "Application of" << std::endl << indent+1;
+	function->print( os, indent+1 );
+	os << std::endl;
+	if ( ! args.empty() ) {
+		os << indent << "... to arguments" << std::endl;
+		printAll( args, os, indent+1 );
 	} // if
-}
-
-void ApplicationExpr::print( std::ostream &os, int indent ) const {
-	os << "Application of" << std::endl << std::string(indent+2, ' ');
-	function->print( os, indent+2 );
-	if ( ! args.empty() ) {
-		os << std::string( indent, ' ' ) << "to arguments" << std::endl;
-		printAll( args, os, indent+2 );
-	} // if
-	printInferParams( inferParams, os, indent+2, 0 );
 	Expression::print( os, indent );
 }
Index: src/SynTree/ArrayType.cc
===================================================================
--- src/SynTree/ArrayType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/ArrayType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -39,5 +39,5 @@
 }
 
-void ArrayType::print( std::ostream &os, int indent ) const {
+void ArrayType::print( std::ostream &os, Indenter indent ) const {
 	Type::print( os, indent );
 	if ( isStatic ) {
Index: src/SynTree/AttrType.cc
===================================================================
--- src/SynTree/AttrType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/AttrType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// AttrType.cc.cc -- 
+// AttrType.cc.cc --
 //
 // Author           : Richard C. Bilson
@@ -42,5 +42,5 @@
 }
 
-void AttrType::print( std::ostream &os, int indent ) const {
+void AttrType::print( std::ostream &os, Indenter indent ) const {
 	Type::print( os, indent );
 	os << "attribute " << name << " applied to ";
Index: src/SynTree/Attribute.cc
===================================================================
--- src/SynTree/Attribute.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Attribute.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -28,5 +28,5 @@
 }
 
-void Attribute::print( std::ostream &os, int indent ) const {
+void Attribute::print( std::ostream &os, Indenter indent ) const {
   using std::endl;
   using std::string;
@@ -36,5 +36,5 @@
     if ( ! parameters.empty() ) {
       os << " with parameters: " << endl;
-      printAll( parameters, os, indent );
+      printAll( parameters, os, indent+1 );
     }
   }
Index: src/SynTree/Attribute.h
===================================================================
--- src/SynTree/Attribute.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Attribute.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -20,10 +20,18 @@
 #include <string>  // for string, operator==
 
+#include "BaseSyntaxNode.h"
+#include "Mutator.h"
+#include "Visitor.h"
+
 class Expression;
 
 // GCC attribute
 // https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Attribute-Syntax.html#Attribute-Syntax
-class Attribute {
+class Attribute : public BaseSyntaxNode {
   public:
+	std::string name;
+	// to keep things nice and tight, use NameExpr for special identifier parameters
+	std::list< Expression * > parameters;
+
 	Attribute( std::string name = "", const std::list< Expression * > & parameters = std::list< Expression * >() ) : name( name ), parameters( parameters ) {}
 	Attribute( const Attribute &other );
@@ -35,10 +43,8 @@
 	bool empty() const { return name == ""; }
 
-	Attribute * clone() const { return new Attribute( *this ); }
-	void print( std:: ostream &os, int indent = 0 ) const;
-  private:
-	std::string name;
-	// to keep things nice and tight, use NameExpr for special identifier parameters
-	std::list< Expression * > parameters;
+	Attribute * clone() const override { return new Attribute( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Attribute * acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
Index: src/SynTree/BaseSyntaxNode.h
===================================================================
--- src/SynTree/BaseSyntaxNode.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/BaseSyntaxNode.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -17,5 +17,7 @@
 
 #include "Common/CodeLocation.h"
+#include "Common/Indenter.h"
 class Visitor;
+class Mutator;
 
 class BaseSyntaxNode {
@@ -25,7 +27,17 @@
 	virtual ~BaseSyntaxNode() {}
 
+	virtual BaseSyntaxNode * clone() const = 0;
 	virtual void accept( Visitor & v ) = 0;
-  virtual void print( std::ostream & os, int indent = 0 ) const = 0;
+	virtual BaseSyntaxNode * acceptMutator( Mutator & m ) = 0;
+  /// Notes:
+  /// * each node is responsible for indenting its children.
+  /// * Expressions should not finish with a newline, since the expression's parent has better information.
+	virtual void print( std::ostream & os, Indenter indent = {} ) const = 0;
+  void print( std::ostream & os, unsigned int indent ) {
+    print( os, Indenter{ Indenter::tabsize, indent });
+  }
 };
+
+std::ostream & operator<<( std::ostream & out, const BaseSyntaxNode * node );
 
 // Local Variables: //
Index: src/SynTree/BasicType.cc
===================================================================
--- src/SynTree/BasicType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/BasicType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -5,11 +5,11 @@
 // file "LICENCE" distributed with Cforall.
 //
-// BasicType.cc -- 
+// BasicType.cc --
 //
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 11 12:52:05 2017
-// Update Count     : 9
+// Last Modified On : Mon Sep 25 14:14:03 2017
+// Update Count     : 11
 //
 
@@ -24,5 +24,5 @@
 BasicType::BasicType( const Type::Qualifiers &tq, Kind bt, const std::list< Attribute * > & attributes ) : Type( tq, attributes ), kind( bt ) {}
 
-void BasicType::print( std::ostream &os, int indent ) const {
+void BasicType::print( std::ostream &os, Indenter indent ) const {
 	Type::print( os, indent );
 	os << BasicType::typeNames[ kind ];
@@ -43,4 +43,6 @@
 	  case LongLongSignedInt:
 	  case LongLongUnsignedInt:
+	  case SignedInt128:
+	  case UnsignedInt128:
 		return true;
 	  case Float:
Index: src/SynTree/CommaExpr.cc
===================================================================
--- src/SynTree/CommaExpr.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/CommaExpr.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -21,6 +21,6 @@
 #include "Type.h"            // for Type
 
-CommaExpr::CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname )
-		: Expression( _aname ), arg1( arg1 ), arg2( arg2 ) {
+CommaExpr::CommaExpr( Expression *arg1, Expression *arg2 )
+		: Expression(), arg1( arg1 ), arg2( arg2 ) {
 	// xxx - result of a comma expression is never an lvalue, so should set lvalue
 	// to false on all result types. Actually doing this causes some strange things
@@ -39,11 +39,11 @@
 }
 
-void CommaExpr::print( std::ostream &os, int indent ) const {
+void CommaExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Comma Expression:" << std::endl;
-	os << std::string( indent+2, ' ' );
-	arg1->print( os, indent+2 );
+	os << (indent+1);
+	arg1->print( os, indent+1 );
 	os << std::endl;
-	os << std::string( indent+2, ' ' );
-	arg2->print( os, indent+2 );
+	os << (indent+1);
+	arg2->print( os, indent+1 );
 	Expression::print( os, indent );
 }
Index: src/SynTree/CompoundStmt.cc
===================================================================
--- src/SynTree/CompoundStmt.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/CompoundStmt.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -29,4 +29,7 @@
 
 CompoundStmt::CompoundStmt( std::list<Label> labels ) : Statement( labels ) {
+}
+
+CompoundStmt::CompoundStmt( std::list<Statement *> stmts ) : Statement( noLabels ), kids( stmts ) {
 }
 
@@ -70,7 +73,7 @@
 }
 
-void CompoundStmt::print( std::ostream &os, int indent ) const {
-	os << "CompoundStmt" << endl ;
-	printAll( kids, os, indent + 2 );
+void CompoundStmt::print( std::ostream &os, Indenter indent ) const {
+	os << "CompoundStmt" << endl;
+	printAll( kids, os, indent+1 );
 }
 
Index: src/SynTree/Constant.cc
===================================================================
--- src/SynTree/Constant.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Constant.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -34,4 +34,8 @@
 }
 
+Constant Constant::from_char( char c ) {
+	return Constant( new BasicType( Type::Qualifiers(), BasicType::Char ), std::to_string( c ), (unsigned long long int)c );
+}
+
 Constant Constant::from_int( int i ) {
 	return Constant( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), std::to_string( i ), (unsigned long long int)i );
@@ -67,5 +71,5 @@
 }
 
-void Constant::print( std::ostream &os ) const {
+void Constant::print( std::ostream &os, Indenter ) const {
 	os << "(" << rep << " " << val.ival;
 	if ( type ) {
Index: src/SynTree/Constant.h
===================================================================
--- src/SynTree/Constant.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Constant.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -19,4 +19,5 @@
 #include <string>     // for string
 
+#include "BaseSyntaxNode.h"
 #include "Mutator.h"  // for Mutator
 #include "Visitor.h"  // for Visitor
@@ -24,5 +25,5 @@
 class Type;
 
-class Constant {
+class Constant : public BaseSyntaxNode {
   public:
 	Constant( Type * type, std::string rep, unsigned long long val );
@@ -30,4 +31,6 @@
 	Constant( const Constant & other );
 	virtual ~Constant();
+
+	virtual Constant * clone() const { return new Constant( *this ); }
 
 	Type * get_type() { return type; }
@@ -40,4 +43,6 @@
 	/// generates a boolean constant of the given bool
 	static Constant from_bool( bool b );
+	/// generates a char constant of the given char
+	static Constant from_char( char c );
 	/// generates an integer constant of the given int
 	static Constant from_int( int i );
@@ -52,5 +57,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Constant * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os ) const;
+	virtual void print( std::ostream & os, Indenter indent = 0 ) const;
   private:
 	Type * type;
Index: src/SynTree/DeclStmt.cc
===================================================================
--- src/SynTree/DeclStmt.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/DeclStmt.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -33,5 +33,5 @@
 }
 
-void DeclStmt::print( std::ostream &os, int indent ) const {
+void DeclStmt::print( std::ostream &os, Indenter indent ) const {
 	assert( decl != 0 );
 	os << "Declaration of ";
Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Declaration.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -42,4 +42,6 @@
 
 void Declaration::fixUniqueId() {
+	// don't need to set unique ID twice
+	if ( uniqueId ) return;
 	uniqueId = ++lastUniqueId;
 	idMap[ uniqueId ] = this;
@@ -59,13 +61,4 @@
 }
 
-std::ostream & operator<<( std::ostream & out, const Declaration * decl ) {
-	if ( decl ){
-		decl->print( out );
-	} else {
-		out << "nullptr";
-	}
-	return out;
-}
-
 
 AsmDecl::AsmDecl( AsmStmt *stmt ) : Declaration( "", Type::StorageClasses(), LinkageSpec::C ), stmt( stmt ) {
@@ -79,9 +72,9 @@
 }
 
-void AsmDecl::print( std::ostream &os, int indent ) const {
+void AsmDecl::print( std::ostream &os, Indenter indent ) const {
 	stmt->print( os, indent );
 }
 
-void AsmDecl::printShort( std::ostream &os, int indent ) const {
+void AsmDecl::printShort( std::ostream &os, Indenter indent ) const {
 	stmt->print( os, indent );
 }
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Declaration.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -61,9 +61,9 @@
 
 	void fixUniqueId( void );
-	virtual Declaration *clone() const = 0;
-	virtual void accept( Visitor &v ) = 0;
-	virtual Declaration *acceptMutator( Mutator &m ) = 0;
-	virtual void print( std::ostream &os, int indent = 0 ) const = 0;
-	virtual void printShort( std::ostream &os, int indent = 0 ) const = 0;
+	virtual Declaration *clone() const override = 0;
+	virtual void accept( Visitor &v ) override = 0;
+	virtual Declaration *acceptMutator( Mutator &m ) override = 0;
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override = 0;
+	virtual void printShort( std::ostream &os, Indenter indent = {} ) const = 0;
 
 	static void dumpIds( std::ostream &os );
@@ -106,6 +106,6 @@
 	//void set_functionSpecifiers( Type::FuncSpecifiers newValue ) { fs = newValue; }
 
-	virtual DeclarationWithType *clone() const = 0;
-	virtual DeclarationWithType *acceptMutator( Mutator &m ) = 0;
+	virtual DeclarationWithType *clone() const override = 0;
+	virtual DeclarationWithType *acceptMutator( Mutator &m )  override = 0;
 
 	virtual Type * get_type() const = 0;
@@ -128,6 +128,6 @@
 	virtual ~ObjectDecl();
 
-	virtual Type * get_type() const { return type; }
-	virtual void set_type(Type *newType) { type = newType; }
+	virtual Type * get_type() const override { return type; }
+	virtual void set_type(Type *newType) override { type = newType; }
 
 	Initializer *get_init() const { return init; }
@@ -139,9 +139,9 @@
 	static ObjectDecl * newObject( const std::string & name, Type * type, Initializer * init );
 
-	virtual ObjectDecl *clone() const { return new ObjectDecl( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual DeclarationWithType *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
-	virtual void printShort( std::ostream &os, int indent = 0 ) const;
+	virtual ObjectDecl *clone() const override { return new ObjectDecl( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual DeclarationWithType *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
+	virtual void printShort( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -157,6 +157,6 @@
 	virtual ~FunctionDecl();
 
-	Type * get_type() const { return type; }
-	virtual void set_type(Type * t) { type = strict_dynamic_cast< FunctionType* >( t ); }
+	virtual Type * get_type() const override { return type; }
+	virtual void set_type(Type * t) override { type = strict_dynamic_cast< FunctionType* >( t ); }
 
 	FunctionType * get_functionType() const { return type; }
@@ -165,9 +165,11 @@
 	void set_statements( CompoundStmt *newValue ) { statements = newValue; }
 
-	virtual FunctionDecl *clone() const { return new FunctionDecl( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual DeclarationWithType *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
-	virtual void printShort( std::ostream &os, int indent = 0 ) const;
+	static FunctionDecl * newFunction( const std::string & name, FunctionType * type, CompoundStmt * statements );
+
+	virtual FunctionDecl *clone() const override { return new FunctionDecl( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual DeclarationWithType *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
+	virtual void printShort( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -190,7 +192,7 @@
 	virtual std::string typeString() const = 0;
 
-	virtual NamedTypeDecl *clone() const = 0;
-	virtual void print( std::ostream &os, int indent = 0 ) const;
-	virtual void printShort( std::ostream &os, int indent = 0 ) const;
+	virtual NamedTypeDecl *clone() const override = 0;
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
+	virtual void printShort( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -198,5 +200,5 @@
 	typedef NamedTypeDecl Parent;
   public:
-	enum Kind { Any, Dtype, Ftype, Ttype };
+	enum Kind { Dtype, Ftype, Ttype };
 
 	Type * init;
@@ -214,5 +216,5 @@
 	};
 
-	TypeDecl( const std::string &name, Type::StorageClasses scs, Type *type, Kind kind, Type * init = nullptr );
+	TypeDecl( const std::string &name, Type::StorageClasses scs, Type *type, Kind kind, bool sized, Type * init = nullptr );
 	TypeDecl( const TypeDecl &other );
 	virtual ~TypeDecl();
@@ -223,15 +225,15 @@
 	TypeDecl * set_init( Type * newValue ) { init = newValue; return this; }
 
-	bool isComplete() const { return kind == Any || sized; }
+	bool isComplete() const { return sized; }
 	bool get_sized() const { return sized; }
 	TypeDecl * set_sized( bool newValue ) { sized = newValue; return this; }
 
-	virtual std::string typeString() const;
+	virtual std::string typeString() const override;
 	virtual std::string genTypeString() const;
 
-	virtual TypeDecl *clone() const { return new TypeDecl( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual TypeDecl *clone() const override { return new TypeDecl( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 
   private:
@@ -245,9 +247,9 @@
 	TypedefDecl( const TypedefDecl &other ) : Parent( other ) {}
 
-	virtual std::string typeString() const;
-
-	virtual TypedefDecl *clone() const { return new TypedefDecl( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
+	virtual std::string typeString() const override;
+
+	virtual TypedefDecl *clone() const override { return new TypedefDecl( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
   private:
 };
@@ -274,6 +276,6 @@
 	AggregateDecl * set_body( bool body ) { AggregateDecl::body = body; return this; }
 
-	virtual void print( std::ostream &os, int indent = 0 ) const;
-	virtual void printShort( std::ostream &os, int indent = 0 ) const;
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
+	virtual void printShort( std::ostream &os, Indenter indent = {} ) const override;
   protected:
 	virtual std::string typeString() const = 0;
@@ -290,10 +292,10 @@
 	bool is_thread() { return kind == DeclarationNode::Thread; }
 
-	virtual StructDecl *clone() const { return new StructDecl( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
+	virtual StructDecl *clone() const override { return new StructDecl( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
   private:
 	DeclarationNode::Aggregate kind;
-	virtual std::string typeString() const;
+	virtual std::string typeString() const override;
 };
 
@@ -304,9 +306,9 @@
 	UnionDecl( const UnionDecl &other ) : Parent( other ) {}
 
-	virtual UnionDecl *clone() const { return new UnionDecl( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-  private:
-	virtual std::string typeString() const;
+	virtual UnionDecl *clone() const override { return new UnionDecl( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+  private:
+	virtual std::string typeString() const override;
 };
 
@@ -317,9 +319,9 @@
 	EnumDecl( const EnumDecl &other ) : Parent( other ) {}
 
-	virtual EnumDecl *clone() const { return new EnumDecl( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-  private:
-	virtual std::string typeString() const;
+	virtual EnumDecl *clone() const override { return new EnumDecl( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+  private:
+	virtual std::string typeString() const override;
 };
 
@@ -332,9 +334,9 @@
 	TraitDecl( const TraitDecl &other ) : Parent( other ) {}
 
-	virtual TraitDecl *clone() const { return new TraitDecl( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-  private:
-	virtual std::string typeString() const;
+	virtual TraitDecl *clone() const override { return new TraitDecl( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+  private:
+	virtual std::string typeString() const override;
 };
 
@@ -350,12 +352,11 @@
 	void set_stmt( AsmStmt *newValue ) { stmt = newValue; }
 
-	virtual AsmDecl *clone() const { return new AsmDecl( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual AsmDecl *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
-	virtual void printShort( std::ostream &os, int indent = 0 ) const;
-};
-
-std::ostream & operator<<( std::ostream & out, const Declaration * decl );
+	virtual AsmDecl *clone() const override { return new AsmDecl( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual AsmDecl *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
+	virtual void printShort( std::ostream &os, Indenter indent = {} ) const override;
+};
+
 std::ostream & operator<<( std::ostream & os, const TypeDecl::Data & data );
 
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Expression.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -33,32 +33,40 @@
 #include "GenPoly/Lvalue.h"
 
-Expression::Expression( Expression *_aname ) : result( 0 ), env( 0 ), argName( _aname ) {}
-
-Expression::Expression( const Expression &other ) : BaseSyntaxNode( other ), result( maybeClone( other.result ) ), env( maybeClone( other.env ) ), argName( maybeClone( other.get_argName() ) ), extension( other.extension ) {
+void printInferParams( const InferredParams & inferParams, std::ostream &os, Indenter indent, int level ) {
+	if ( ! inferParams.empty() ) {
+		os << indent << "with inferred parameters " << level << ":" << std::endl;
+		for ( InferredParams::const_iterator i = inferParams.begin(); i != inferParams.end(); ++i ) {
+			os << indent+1;
+			Declaration::declFromId( i->second.decl )->printShort( os, indent+1 );
+			os << std::endl;
+			printInferParams( *i->second.inferParams, os, indent+1, level+1 );
+		} // for
+	} // if
+}
+
+Expression::Expression() : result( 0 ), env( 0 ) {}
+
+Expression::Expression( const Expression &other ) : BaseSyntaxNode( other ), result( maybeClone( other.result ) ), env( maybeClone( other.env ) ), extension( other.extension ), inferParams( other.inferParams ) {
 }
 
 Expression::~Expression() {
 	delete env;
-	delete argName;	// xxx -- there's a problem in cloning ConstantExpr I still don't know how to fix
 	delete result;
 }
 
-void Expression::print( std::ostream &os, int indent ) const {
+void Expression::print( std::ostream &os, Indenter indent ) const {
+	printInferParams( inferParams, os, indent+1, 0 );
+
 	if ( env ) {
-		os << std::string( indent, ' ' ) << "with environment:" << std::endl;
-		env->print( os, indent+2 );
+		os << std::endl << indent << "... with environment:" << std::endl;
+		env->print( os, indent+1 );
 	} // if
 
-	if ( argName ) {
-		os << std::string( indent, ' ' ) << "with designator:";
-		argName->print( os, indent+2 );
+	if ( extension ) {
+		os << std::endl << indent << "... with extension:";
 	} // if
-
-	if ( extension ) {
-		os << std::string( indent, ' ' ) << "with extension:";
-	} // if
-}
-
-ConstantExpr::ConstantExpr( Constant _c, Expression *_aname ) : Expression( _aname ), constant( _c ) {
+}
+
+ConstantExpr::ConstantExpr( Constant _c ) : Expression(), constant( _c ) {
 	set_result( constant.get_type()->clone() );
 }
@@ -69,5 +77,5 @@
 ConstantExpr::~ConstantExpr() {}
 
-void ConstantExpr::print( std::ostream &os, int indent ) const {
+void ConstantExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "constant expression " ;
 	constant.print( os );
@@ -75,5 +83,5 @@
 }
 
-VariableExpr::VariableExpr( DeclarationWithType *_var, Expression *_aname ) : Expression( _aname ), var( _var ) {
+VariableExpr::VariableExpr( DeclarationWithType *_var ) : Expression(), var( _var ) {
 	assert( var );
 	assert( var->get_type() );
@@ -96,20 +104,17 @@
 }
 
-void VariableExpr::print( std::ostream &os, int indent ) const {
+void VariableExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Variable Expression: ";
-
-	Declaration *decl = get_var();
-	if ( decl != 0) decl->printShort(os, indent + 2);
-	os << std::endl;
-	Expression::print( os, indent );
-}
-
-SizeofExpr::SizeofExpr( Expression *expr_, Expression *_aname ) :
-		Expression( _aname ), expr(expr_), type(0), isType(false) {
+	var->printShort(os, indent);
+	Expression::print( os, indent );
+}
+
+SizeofExpr::SizeofExpr( Expression *expr_ ) :
+		Expression(), expr(expr_), type(0), isType(false) {
 	set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) );
 }
 
-SizeofExpr::SizeofExpr( Type *type_, Expression *_aname ) :
-		Expression( _aname ), expr(0), type(type_), isType(true) {
+SizeofExpr::SizeofExpr( Type *type_ ) :
+		Expression(), expr(0), type(type_), isType(true) {
 	set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) );
 }
@@ -124,23 +129,18 @@
 }
 
-void SizeofExpr::print( std::ostream &os, int indent) const {
+void SizeofExpr::print( std::ostream &os, Indenter indent) const {
 	os << "Sizeof Expression on: ";
-
-	if (isType)
-		type->print(os, indent + 2);
-	else
-		expr->print(os, indent + 2);
-
-	os << std::endl;
-	Expression::print( os, indent );
-}
-
-AlignofExpr::AlignofExpr( Expression *expr_, Expression *_aname ) :
-		Expression( _aname ), expr(expr_), type(0), isType(false) {
+	if (isType) type->print(os, indent+1);
+	else expr->print(os, indent+1);
+	Expression::print( os, indent );
+}
+
+AlignofExpr::AlignofExpr( Expression *expr_ ) :
+		Expression(), expr(expr_), type(0), isType(false) {
 	set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) );
 }
 
-AlignofExpr::AlignofExpr( Type *type_, Expression *_aname ) :
-		Expression( _aname ), expr(0), type(type_), isType(true) {
+AlignofExpr::AlignofExpr( Type *type_ ) :
+		Expression(), expr(0), type(type_), isType(true) {
 	set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) );
 }
@@ -155,18 +155,14 @@
 }
 
-void AlignofExpr::print( std::ostream &os, int indent) const {
+void AlignofExpr::print( std::ostream &os, Indenter indent) const {
 	os << "Alignof Expression on: ";
-
-	if (isType)
-		type->print(os, indent + 2);
-	else
-		expr->print(os, indent + 2);
-
-	os << std::endl;
-	Expression::print( os, indent );
-}
-
-UntypedOffsetofExpr::UntypedOffsetofExpr( Type *type_, const std::string &member_, Expression *_aname ) :
-		Expression( _aname ), type(type_), member(member_) {
+	if (isType) type->print(os, indent+1);
+	else expr->print(os, indent+1);
+	Expression::print( os, indent );
+}
+
+UntypedOffsetofExpr::UntypedOffsetofExpr( Type *type, const std::string &member ) :
+		Expression(), type(type), member(member) {
+	assert( type );
 	set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) );
 }
@@ -179,19 +175,14 @@
 }
 
-void UntypedOffsetofExpr::print( std::ostream &os, int indent) const {
-	os << std::string( indent, ' ' ) << "Untyped Offsetof Expression on member " << member << " of ";
-
-	if ( type ) {
-		type->print(os, indent + 2);
-	} else {
-		os << "<NULL>";
-	}
-
-	os << std::endl;
-	Expression::print( os, indent );
-}
-
-OffsetofExpr::OffsetofExpr( Type *type_, DeclarationWithType *member_, Expression *_aname ) :
-		Expression( _aname ), type(type_), member(member_) {
+void UntypedOffsetofExpr::print( std::ostream &os, Indenter indent) const {
+	os << "Untyped Offsetof Expression on member " << member << " of ";
+	type->print(os, indent+1);
+	Expression::print( os, indent );
+}
+
+OffsetofExpr::OffsetofExpr( Type *type, DeclarationWithType *member ) :
+		Expression(), type(type), member(member) {
+	assert( member );
+	assert( type );
 	set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) );
 }
@@ -204,26 +195,12 @@
 }
 
-void OffsetofExpr::print( std::ostream &os, int indent) const {
-	os << std::string( indent, ' ' ) << "Offsetof Expression on member ";
-
-	if ( member ) {
-		os << member->get_name();
-	} else {
-		os << "<NULL>";
-	}
-
-	os << " of ";
-
-	if ( type ) {
-		type->print(os, indent + 2);
-	} else {
-		os << "<NULL>";
-	}
-
-	os << std::endl;
-	Expression::print( os, indent );
-}
-
-OffsetPackExpr::OffsetPackExpr( StructInstType *type_, Expression *aname_ ) : Expression( aname_ ), type( type_ ) {
+void OffsetofExpr::print( std::ostream &os, Indenter indent) const {
+	os << "Offsetof Expression on member " << member->name << " of ";
+	type->print(os, indent+1);
+	Expression::print( os, indent );
+}
+
+OffsetPackExpr::OffsetPackExpr( StructInstType *type ) : Expression(), type( type ) {
+	assert( type );
 	set_result( new ArrayType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0, false, false ) );
 }
@@ -233,23 +210,16 @@
 OffsetPackExpr::~OffsetPackExpr() { delete type; }
 
-void OffsetPackExpr::print( std::ostream &os, int indent ) const {
-	os << std::string( indent, ' ' ) << "Offset pack expression on ";
-
-	if ( type ) {
-		type->print(os, indent + 2);
-	} else {
-		os << "<NULL>";
-	}
-
-	os << std::endl;
-	Expression::print( os, indent );
-}
-
-AttrExpr::AttrExpr( Expression *attr, Expression *expr_, Expression *_aname ) :
-		Expression( _aname ), attr( attr ), expr(expr_), type(0), isType(false) {
-}
-
-AttrExpr::AttrExpr( Expression *attr, Type *type_, Expression *_aname ) :
-		Expression( _aname ), attr( attr ), expr(0), type(type_), isType(true) {
+void OffsetPackExpr::print( std::ostream &os, Indenter indent ) const {
+	os << "Offset pack expression on ";
+	type->print(os, indent+1);
+	Expression::print( os, indent );
+}
+
+AttrExpr::AttrExpr( Expression *attr, Expression *expr_ ) :
+		Expression(), attr( attr ), expr(expr_), type(0), isType(false) {
+}
+
+AttrExpr::AttrExpr( Expression *attr, Type *type_ ) :
+		Expression(), attr( attr ), expr(0), type(type_), isType(true) {
 }
 
@@ -264,25 +234,20 @@
 }
 
-void AttrExpr::print( std::ostream &os, int indent) const {
+void AttrExpr::print( std::ostream &os, Indenter indent) const {
 	os << "Attr ";
-	attr->print( os, indent + 2 );
+	attr->print( os, indent+1);
 	if ( isType || expr ) {
 		os << "applied to: ";
-
-		if (isType)
-			type->print(os, indent + 2);
-		else
-			expr->print(os, indent + 2);
+		if (isType) type->print(os, indent+1);
+		else expr->print(os, indent+1);
 	} // if
-
-	os << std::endl;
-	Expression::print( os, indent );
-}
-
-CastExpr::CastExpr( Expression *arg_, Type *toType, Expression *_aname ) : Expression( _aname ), arg(arg_) {
+	Expression::print( os, indent );
+}
+
+CastExpr::CastExpr( Expression *arg_, Type *toType ) : Expression(), arg(arg_) {
 	set_result(toType);
 }
 
-CastExpr::CastExpr( Expression *arg_, Expression *_aname ) : Expression( _aname ), arg(arg_) {
+CastExpr::CastExpr( Expression *arg_ ) : Expression(), arg(arg_) {
 	set_result( new VoidType( Type::Qualifiers() ) );
 }
@@ -295,15 +260,14 @@
 }
 
-void CastExpr::print( std::ostream &os, int indent ) const {
-	os << "Cast of:" << std::endl << std::string( indent+2, ' ' );
-	arg->print(os, indent+2);
-	os << std::endl << std::string( indent, ' ' ) << "to:" << std::endl;
-	os << std::string( indent+2, ' ' );
+void CastExpr::print( std::ostream &os, Indenter indent ) const {
+	os << "Cast of:" << std::endl << indent+1;
+	arg->print(os, indent+1);
+	os << std::endl << indent << "... to:";
 	if ( result->isVoid() ) {
-		os << "nothing";
+		os << " nothing";
 	} else {
-		result->print( os, indent+2 );
+		os << std::endl << indent+1;
+		result->print( os, indent+1 );
 	} // if
-	os << std::endl;
 	Expression::print( os, indent );
 }
@@ -320,20 +284,21 @@
 }
 
-void VirtualCastExpr::print( std::ostream &os, int indent ) const {
-	os << "Virtual Cast of:" << std::endl << std::string( indent+2, ' ' );
-	arg->print(os, indent+2);
-	os << std::endl << std::string( indent, ' ' ) << "to:" << std::endl;
-	os << std::string( indent+2, ' ' );
+void VirtualCastExpr::print( std::ostream &os, Indenter indent ) const {
+	os << "Virtual Cast of:" << std::endl << indent+1;
+	arg->print(os, indent+1);
+	os << std::endl << indent << "... to:";
 	if ( ! result ) {
-		os << "unknown";
+		os << " unknown";
 	} else {
-		result->print( os, indent+2 );
+		os << std::endl << indent+1;
+		result->print( os, indent+1 );
 	} // if
-	os << std::endl;
-	Expression::print( os, indent );
-}
-
-UntypedMemberExpr::UntypedMemberExpr( Expression * _member, Expression *_aggregate, Expression *_aname ) :
-		Expression( _aname ), member(_member), aggregate(_aggregate) {}
+	Expression::print( os, indent );
+}
+
+UntypedMemberExpr::UntypedMemberExpr( Expression * member, Expression *aggregate ) :
+		Expression(), member(member), aggregate(aggregate) {
+	assert( aggregate );
+}
 
 UntypedMemberExpr::UntypedMemberExpr( const UntypedMemberExpr &other ) :
@@ -346,17 +311,9 @@
 }
 
-void UntypedMemberExpr::print( std::ostream &os, int indent ) const {
-	os << "Untyped Member Expression, with field: " << std::endl;
-	os << std::string( indent+2, ' ' );
-	get_member()->print(os, indent+4);
-	os << std::string( indent+2, ' ' );
-
-	Expression *agg = get_aggregate();
-	os << "from aggregate: " << std::endl;
-	if (agg != 0) {
-		os << std::string( indent + 4, ' ' );
-		agg->print(os, indent + 4);
-	}
-	os << std::string( indent+2, ' ' );
+void UntypedMemberExpr::print( std::ostream &os, Indenter indent ) const {
+	os << "Untyped Member Expression, with field: " << std::endl << indent+1;
+	member->print(os, indent+1 );
+	os << indent << "... from aggregate: " << std::endl << indent+1;
+	aggregate->print(os, indent+1);
 	Expression::print( os, indent );
 }
@@ -377,6 +334,8 @@
 
 
-MemberExpr::MemberExpr( DeclarationWithType *_member, Expression *_aggregate, Expression *_aname ) :
-		Expression( _aname ), member(_member), aggregate(_aggregate) {
+MemberExpr::MemberExpr( DeclarationWithType *member, Expression *aggregate ) :
+		Expression(), member(member), aggregate(aggregate) {
+	assert( member );
+	assert( aggregate );
 
 	TypeSubstitution sub( makeSub( aggregate->get_result() ) );
@@ -396,24 +355,15 @@
 }
 
-void MemberExpr::print( std::ostream &os, int indent ) const {
+void MemberExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Member Expression, with field: " << std::endl;
-
-	assert( member );
-	os << std::string( indent + 2, ' ' );
-	member->print( os, indent + 2 );
-	os << std::endl;
-
-	Expression *agg = get_aggregate();
-	os << std::string( indent, ' ' ) << "from aggregate: " << std::endl;
-	if (agg != 0) {
-		os << std::string( indent + 2, ' ' );
-		agg->print(os, indent + 2);
-	}
-	os << std::string( indent+2, ' ' );
-	Expression::print( os, indent );
-}
-
-UntypedExpr::UntypedExpr( Expression *_function, const std::list<Expression *> &_args, Expression *_aname ) :
-		Expression( _aname ), function(_function), args(_args) {}
+	os << indent+1;
+	member->print( os, indent+1 );
+	os << std::endl << indent << "... from aggregate: " << std::endl << indent+1;
+	aggregate->print(os, indent + 1);
+	Expression::print( os, indent );
+}
+
+UntypedExpr::UntypedExpr( Expression *function, const std::list<Expression *> &args ) :
+		Expression(), function(function), args(args) {}
 
 UntypedExpr::UntypedExpr( const UntypedExpr &other ) :
@@ -456,24 +406,16 @@
 
 
-void UntypedExpr::print( std::ostream &os, int indent ) const {
+void UntypedExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Applying untyped: " << std::endl;
-	os << std::string( indent+2, ' ' );
-	function->print(os, indent + 2);
-	os << std::string( indent, ' ' ) << "...to: " << std::endl;
-	printAll(args, os, indent + 2);
-	Expression::print( os, indent );
-}
-
-void UntypedExpr::printArgs( std::ostream &os, int indent ) const {
-	std::list<Expression *>::const_iterator i;
-	for (i = args.begin(); i != args.end(); i++) {
-		os << std::string(indent, ' ' );
-		(*i)->print(os, indent);
-	}
-}
-
-NameExpr::NameExpr( std::string _name, Expression *_aname ) : Expression( _aname ), name(_name) {
-	assertf(_name != "0", "Zero is not a valid name\n");
-	assertf(_name != "1", "One is not a valid name\n");
+	os << indent+1;
+	function->print(os, indent+1);
+	os << std::endl << indent << "...to: " << std::endl;
+	printAll(args, os, indent+1);
+	Expression::print( os, indent );
+}
+
+NameExpr::NameExpr( std::string name ) : Expression(), name(name) {
+	assertf(name != "0", "Zero is not a valid name");
+	assertf(name != "1", "One is not a valid name");
 }
 
@@ -483,11 +425,11 @@
 NameExpr::~NameExpr() {}
 
-void NameExpr::print( std::ostream &os, int indent ) const {
-	os << "Name: " << get_name() << std::endl;
-	Expression::print( os, indent );
-}
-
-LogicalExpr::LogicalExpr( Expression *arg1_, Expression *arg2_, bool andp, Expression *_aname ) :
-		Expression( _aname ), arg1(arg1_), arg2(arg2_), isAnd(andp) {
+void NameExpr::print( std::ostream &os, Indenter indent ) const {
+	os << "Name: " << get_name();
+	Expression::print( os, indent );
+}
+
+LogicalExpr::LogicalExpr( Expression *arg1_, Expression *arg2_, bool andp ) :
+		Expression(), arg1(arg1_), arg2(arg2_), isAnd(andp) {
 	set_result( new BasicType( Type::Qualifiers(), BasicType::SignedInt ) );
 }
@@ -502,15 +444,14 @@
 }
 
-void LogicalExpr::print( std::ostream &os, int indent )const {
-	os << "Short-circuited operation (" << (isAnd?"and":"or") << ") on: ";
+void LogicalExpr::print( std::ostream &os, Indenter indent )const {
+	os << "Short-circuited operation (" << (isAnd ? "and" : "or") << ") on: ";
 	arg1->print(os);
 	os << " and ";
 	arg2->print(os);
-	os << std::endl;
-	Expression::print( os, indent );
-}
-
-ConditionalExpr::ConditionalExpr( Expression *arg1_, Expression *arg2_, Expression *arg3_, Expression *_aname ) :
-		Expression( _aname ), arg1(arg1_), arg2(arg2_), arg3(arg3_) {}
+	Expression::print( os, indent );
+}
+
+ConditionalExpr::ConditionalExpr( Expression * arg1, Expression * arg2, Expression * arg3 ) :
+		Expression(), arg1(arg1), arg2(arg2), arg3(arg3) {}
 
 ConditionalExpr::ConditionalExpr( const ConditionalExpr &other ) :
@@ -524,15 +465,11 @@
 }
 
-void ConditionalExpr::print( std::ostream &os, int indent ) const {
-	os << "Conditional expression on: " << std::endl;
-	os << std::string( indent+2, ' ' );
-	arg1->print( os, indent+2 );
-	os << std::string( indent, ' ' ) << "First alternative:" << std::endl;
-	os << std::string( indent+2, ' ' );
-	arg2->print( os, indent+2 );
-	os << std::string( indent, ' ' ) << "Second alternative:" << std::endl;
-	os << std::string( indent+2, ' ' );
-	arg3->print( os, indent+2 );
-	os << std::endl;
+void ConditionalExpr::print( std::ostream &os, Indenter indent ) const {
+	os << "Conditional expression on: " << std::endl << indent+1;
+	arg1->print( os, indent+1 );
+	os << indent << "First alternative:" << std::endl << indent+1;
+	arg2->print( os, indent+1 );
+	os << indent << "Second alternative:" << std::endl << indent+1;
+	arg3->print( os, indent+1 );
 	Expression::print( os, indent );
 }
@@ -541,9 +478,9 @@
 
 
-void AsmExpr::print( std::ostream &os, int indent ) const {
+void AsmExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Asm Expression: " << std::endl;
-	if ( inout ) inout->print( os, indent + 2 );
-	if ( constraint ) constraint->print( os, indent + 2 );
-	if ( operand ) operand->print( os, indent + 2 );
+	if ( inout ) inout->print( os, indent+1 );
+	if ( constraint ) constraint->print( os, indent+1 );
+	if ( operand ) operand->print( os, indent+1 );
 }
 
@@ -551,5 +488,5 @@
 ImplicitCopyCtorExpr::ImplicitCopyCtorExpr( ApplicationExpr * callExpr ) : callExpr( callExpr ) {
 	assert( callExpr );
-	assert( callExpr->has_result() );
+	assert( callExpr->result );
 	set_result( callExpr->get_result()->clone() );
 }
@@ -569,13 +506,11 @@
 }
 
-void ImplicitCopyCtorExpr::print( std::ostream &os, int indent ) const {
-	os <<  "Implicit Copy Constructor Expression: " << std::endl;
-	assert( callExpr );
-	os << std::string( indent+2, ' ' );
-	callExpr->print( os, indent + 2 );
-	os << std::endl << std::string( indent, ' ' ) << "with temporaries:" << std::endl;
-	printAll(tempDecls, os, indent+2);
-	os << std::endl << std::string( indent, ' ' ) << "with return temporaries:" << std::endl;
-	printAll(returnDecls, os, indent+2);
+void ImplicitCopyCtorExpr::print( std::ostream &os, Indenter indent ) const {
+	os <<  "Implicit Copy Constructor Expression: " << std::endl << indent+1;
+	callExpr->print( os, indent+1 );
+	os << std::endl << indent << "... with temporaries:" << std::endl;
+	printAll( tempDecls, os, indent+1 );
+	os << std::endl << indent << "... with return temporaries:" << std::endl;
+	printAll( returnDecls, os, indent+1 );
 	Expression::print( os, indent );
 }
@@ -587,5 +522,5 @@
 	Expression * arg = InitTweak::getCallArg( callExpr, 0 );
 	assert( arg );
-	set_result( maybeClone( arg->get_result() ) );
+	set_result( maybeClone( arg->result ) );
 }
 
@@ -597,8 +532,6 @@
 }
 
-void ConstructorExpr::print( std::ostream &os, int indent ) const {
-	os <<  "Constructor Expression: " << std::endl;
-	assert( callExpr );
-	os << std::string( indent+2, ' ' );
+void ConstructorExpr::print( std::ostream &os, Indenter indent ) const {
+	os <<  "Constructor Expression: " << std::endl << indent+1;
 	callExpr->print( os, indent + 2 );
 	Expression::print( os, indent );
@@ -618,10 +551,9 @@
 }
 
-void CompoundLiteralExpr::print( std::ostream &os, int indent ) const {
-	os << "Compound Literal Expression: " << std::endl;
-	os << std::string( indent+2, ' ' );
-	get_result()->print( os, indent + 2 );
-	os << std::string( indent+2, ' ' );
-	initializer->print( os, indent + 2 );
+void CompoundLiteralExpr::print( std::ostream &os, Indenter indent ) const {
+	os << "Compound Literal Expression: " << std::endl << indent+1;
+	result->print( os, indent+1 );
+	os << indent+1;
+	initializer->print( os, indent+1 );
 	Expression::print( os, indent );
 }
@@ -629,5 +561,5 @@
 RangeExpr::RangeExpr( Expression *low, Expression *high ) : low( low ), high( high ) {}
 RangeExpr::RangeExpr( const RangeExpr &other ) : Expression( other ), low( other.low->clone() ), high( other.high->clone() ) {}
-void RangeExpr::print( std::ostream &os, int indent ) const {
+void RangeExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Range Expression: ";
 	low->print( os, indent );
@@ -659,14 +591,14 @@
 	deleteAll( returnDecls );
 }
-void StmtExpr::print( std::ostream &os, int indent ) const {
-	os << "Statement Expression: " << std::endl << std::string( indent, ' ' );
-	statements->print( os, indent+2 );
+void StmtExpr::print( std::ostream &os, Indenter indent ) const {
+	os << "Statement Expression: " << std::endl << indent+1;
+	statements->print( os, indent+1 );
 	if ( ! returnDecls.empty() ) {
-		os << std::string( indent+2, ' ' ) << "with returnDecls: ";
-		printAll( returnDecls, os, indent+2 );
+		os << indent+1 << "... with returnDecls: ";
+		printAll( returnDecls, os, indent+1 );
 	}
 	if ( ! dtors.empty() ) {
-		os << std::string( indent+2, ' ' ) << "with dtors: ";
-		printAll( dtors, os, indent+2 );
+		os << indent+1 << "... with dtors: ";
+		printAll( dtors, os, indent+1 );
 	}
 	Expression::print( os, indent );
@@ -690,10 +622,10 @@
 	delete var;
 }
-void UniqueExpr::print( std::ostream &os, int indent ) const {
-	os << "Unique Expression with id:" << id << std::endl << std::string( indent+2, ' ' );
-	get_expr()->print( os, indent+2 );
-	if ( get_object() ) {
-		os << std::string( indent+2, ' ' ) << "with decl: ";
-		get_object()->printShort( os, indent+2 );
+void UniqueExpr::print( std::ostream &os, Indenter indent ) const {
+	os << "Unique Expression with id:" << id << std::endl << indent+1;
+	expr->print( os, indent+1 );
+	if ( object ) {
+		os << indent << "... with decl: ";
+		get_object()->printShort( os, indent+1 );
 	}
 	Expression::print( os, indent );
@@ -713,12 +645,12 @@
 }
 
-void UntypedInitExpr::print( std::ostream & os, int indent ) const {
-	os << "Untyped Init Expression" << std::endl << std::string( indent+2, ' ' );
-	expr->print( os, indent+2 );
+void UntypedInitExpr::print( std::ostream & os, Indenter indent ) const {
+	os << "Untyped Init Expression" << std::endl << indent+1;
+	expr->print( os, indent+1 );
 	if ( ! initAlts.empty() ) {
 		for ( const InitAlternative & alt : initAlts ) {
-			os << std::string( indent+2, ' ' ) <<  "InitAlternative: ";
-			alt.type->print( os, indent+2 );
-			alt.designation->print( os, indent+2 );
+			os << indent+1 <<  "InitAlternative: ";
+			alt.type->print( os, indent+1 );
+			alt.designation->print( os, indent+1 );
 		}
 	}
@@ -734,19 +666,9 @@
 }
 
-void InitExpr::print( std::ostream & os, int indent ) const {
-	os << "Init Expression" << std::endl << std::string( indent+2, ' ' );
-	expr->print( os, indent+2 );
-	os << std::string( indent+2, ' ' ) << "with designation: ";
-	designation->print( os, indent+2 );
-}
-
-
-std::ostream & operator<<( std::ostream & out, const Expression * expr ) {
-	if ( expr ) {
-		expr->print( out );
-	} else {
-		out << "nullptr";
-	}
-	return out;
+void InitExpr::print( std::ostream & os, Indenter indent ) const {
+	os << "Init Expression" << std::endl << indent+1;
+	expr->print( os, indent+1 );
+	os << indent+1 << "... with designation: ";
+	designation->print( os, indent+1 );
 }
 
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Expression.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -31,34 +31,4 @@
 
 
-/// Expression is the root type for all expressions
-class Expression : public BaseSyntaxNode{
-  public:
-	Type * result;
-	TypeSubstitution * env;
-	Expression * argName; // if expression is used as an argument, it can be "designated" by this name
-	bool extension = false;
-
-	Expression( Expression * _aname = nullptr );
-	Expression( const Expression & other );
-	virtual ~Expression();
-
-	Type *& get_result() { return result; }
-	const Type * get_result() const { return result; }
-	void set_result( Type * newValue ) { result = newValue; }
-	bool has_result() const { return result != nullptr; }
-
-	TypeSubstitution * get_env() const { return env; }
-	void set_env( TypeSubstitution * newValue ) { env = newValue; }
-	Expression * get_argName() const { return argName; }
-	void set_argName( Expression * name ) { argName = name; }
-	bool get_extension() const { return extension; }
-	Expression * set_extension( bool exten ) { extension = exten; return this; }
-
-	virtual Expression * clone() const = 0;
-	virtual void accept( Visitor & v ) = 0;
-	virtual Expression * acceptMutator( Mutator & m ) = 0;
-	virtual void print( std::ostream & os, int indent = 0 ) const;
-};
-
 struct ParamEntry;
 
@@ -77,6 +47,35 @@
 	Type * actualType;
 	Type * formalType;
-	Expression* expr;
+	Expression * expr;
 	std::unique_ptr< InferredParams > inferParams;
+};
+
+/// Expression is the root type for all expressions
+class Expression : public BaseSyntaxNode {
+  public:
+	Type * result;
+	TypeSubstitution * env;
+	bool extension = false;
+	InferredParams inferParams;
+
+	Expression();
+	Expression( const Expression & other );
+	virtual ~Expression();
+
+	Type *& get_result() { return result; }
+	const Type * get_result() const { return result; }
+	void set_result( Type * newValue ) { result = newValue; }
+
+	TypeSubstitution * get_env() const { return env; }
+	void set_env( TypeSubstitution * newValue ) { env = newValue; }
+	bool get_extension() const { return extension; }
+	Expression * set_extension( bool exten ) { extension = exten; return this; }
+
+	InferredParams & get_inferParams() { return inferParams; }
+
+	virtual Expression * clone() const override = 0;
+	virtual void accept( Visitor & v ) override = 0;
+	virtual Expression * acceptMutator( Mutator & m ) override = 0;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -87,5 +86,4 @@
 	Expression * function;
 	std::list<Expression *> args;
-	InferredParams inferParams;
 
 	ApplicationExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >() );
@@ -96,10 +94,9 @@
 	void set_function( Expression * newValue ) { function = newValue; }
 	std::list<Expression *>& get_args() { return args; }
-	InferredParams & get_inferParams() { return inferParams; }
 
 	virtual ApplicationExpr * clone() const { return new ApplicationExpr( * this ); }
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -112,5 +109,5 @@
 	std::list<Expression*> args;
 
-	UntypedExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >(), Expression *_aname = nullptr );
+	UntypedExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >() );
 	UntypedExpr( const UntypedExpr & other );
 	virtual ~UntypedExpr();
@@ -119,5 +116,4 @@
 	void set_function( Expression * newValue ) { function = newValue; }
 
-	void set_args( std::list<Expression *> & listArgs ) { args = listArgs; }
 	std::list<Expression*>::iterator begin_args() { return args.begin(); }
 	std::list<Expression*>::iterator end_args() { return args.end(); }
@@ -130,6 +126,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
-	virtual void printArgs(std::ostream & os, int indent = 0) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -139,5 +134,5 @@
 	std::string name;
 
-	NameExpr( std::string name, Expression *_aname = nullptr );
+	NameExpr( std::string name );
 	NameExpr( const NameExpr & other );
 	virtual ~NameExpr();
@@ -149,5 +144,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -160,5 +155,5 @@
 	Expression * arg;
 
-	AddressExpr( Expression * arg, Expression *_aname = nullptr );
+	AddressExpr( Expression * arg );
 	AddressExpr( const AddressExpr & other );
 	virtual ~AddressExpr();
@@ -170,5 +165,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -186,5 +181,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -194,6 +189,6 @@
 	Expression * arg;
 
-	CastExpr( Expression * arg, Expression *_aname = nullptr );
-	CastExpr( Expression * arg, Type * toType, Expression *_aname = nullptr );
+	CastExpr( Expression * arg );
+	CastExpr( Expression * arg, Type * toType );
 	CastExpr( const CastExpr & other );
 	virtual ~CastExpr();
@@ -205,5 +200,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -223,5 +218,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -232,5 +227,5 @@
 	Expression * aggregate;
 
-	UntypedMemberExpr( Expression * member, Expression * aggregate, Expression *_aname = nullptr );
+	UntypedMemberExpr( Expression * member, Expression * aggregate );
 	UntypedMemberExpr( const UntypedMemberExpr & other );
 	virtual ~UntypedMemberExpr();
@@ -244,5 +239,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -254,5 +249,5 @@
 	Expression * aggregate;
 
-	MemberExpr( DeclarationWithType * member, Expression * aggregate, Expression *_aname = nullptr );
+	MemberExpr( DeclarationWithType * member, Expression * aggregate );
 	MemberExpr( const MemberExpr & other );
 	virtual ~MemberExpr();
@@ -266,5 +261,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -275,5 +270,5 @@
 	DeclarationWithType * var;
 
-	VariableExpr( DeclarationWithType * var, Expression *_aname = nullptr );
+	VariableExpr( DeclarationWithType * var );
 	VariableExpr( const VariableExpr & other );
 	virtual ~VariableExpr();
@@ -287,5 +282,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -295,5 +290,5 @@
 	Constant constant;
 
-	ConstantExpr( Constant constant, Expression *_aname = nullptr );
+	ConstantExpr( Constant constant );
 	ConstantExpr( const ConstantExpr & other );
 	virtual ~ConstantExpr();
@@ -305,5 +300,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -315,7 +310,7 @@
 	bool isType;
 
-	SizeofExpr( Expression * expr, Expression *_aname = nullptr );
+	SizeofExpr( Expression * expr );
 	SizeofExpr( const SizeofExpr & other );
-	SizeofExpr( Type * type, Expression *_aname = nullptr );
+	SizeofExpr( Type * type );
 	virtual ~SizeofExpr();
 
@@ -330,5 +325,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -340,7 +335,7 @@
 	bool isType;
 
-	AlignofExpr( Expression * expr, Expression *_aname = nullptr );
+	AlignofExpr( Expression * expr );
 	AlignofExpr( const AlignofExpr & other );
-	AlignofExpr( Type * type, Expression *_aname = nullptr );
+	AlignofExpr( Type * type );
 	virtual ~AlignofExpr();
 
@@ -355,5 +350,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -364,5 +359,5 @@
 	std::string member;
 
-	UntypedOffsetofExpr( Type * type, const std::string & member, Expression *_aname = nullptr );
+	UntypedOffsetofExpr( Type * type, const std::string & member );
 	UntypedOffsetofExpr( const UntypedOffsetofExpr & other );
 	virtual ~UntypedOffsetofExpr();
@@ -376,5 +371,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -385,5 +380,5 @@
 	DeclarationWithType * member;
 
-	OffsetofExpr( Type * type, DeclarationWithType * member, Expression *_aname = nullptr );
+	OffsetofExpr( Type * type, DeclarationWithType * member );
 	OffsetofExpr( const OffsetofExpr & other );
 	virtual ~OffsetofExpr();
@@ -397,5 +392,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -405,5 +400,5 @@
 	StructInstType * type;
 
-	OffsetPackExpr( StructInstType * type_, Expression * aname_ = 0 );
+	OffsetPackExpr( StructInstType * type );
 	OffsetPackExpr( const OffsetPackExpr & other );
 	virtual ~OffsetPackExpr();
@@ -415,5 +410,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -426,7 +421,7 @@
 	bool isType;
 
-	AttrExpr(Expression * attr, Expression * expr, Expression *_aname = nullptr );
+	AttrExpr(Expression * attr, Expression * expr );
 	AttrExpr( const AttrExpr & other );
-	AttrExpr( Expression * attr, Type * type, Expression *_aname = nullptr );
+	AttrExpr( Expression * attr, Type * type );
 	virtual ~AttrExpr();
 
@@ -443,5 +438,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -452,5 +447,5 @@
 	Expression * arg2;
 
-	LogicalExpr( Expression * arg1, Expression * arg2, bool andp = true, Expression *_aname = nullptr );
+	LogicalExpr( Expression * arg1, Expression * arg2, bool andp = true );
 	LogicalExpr( const LogicalExpr & other );
 	virtual ~LogicalExpr();
@@ -465,5 +460,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 
   private:
@@ -478,5 +473,5 @@
 	Expression * arg3;
 
-	ConditionalExpr( Expression * arg1, Expression * arg2, Expression * arg3, Expression *_aname = nullptr );
+	ConditionalExpr( Expression * arg1, Expression * arg2, Expression * arg3 );
 	ConditionalExpr( const ConditionalExpr & other );
 	virtual ~ConditionalExpr();
@@ -492,5 +487,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -501,5 +496,5 @@
 	Expression * arg2;
 
-	CommaExpr( Expression * arg1, Expression * arg2, Expression *_aname = nullptr );
+	CommaExpr( Expression * arg1, Expression * arg2 );
 	CommaExpr( const CommaExpr & other );
 	virtual ~CommaExpr();
@@ -513,5 +508,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -531,5 +526,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -557,5 +552,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 
 	// https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Machine-Constraints.html#Machine-Constraints
@@ -585,5 +580,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -603,5 +598,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -621,5 +616,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -640,5 +635,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -648,5 +643,5 @@
 	std::list<Expression*> exprs;
 
-	UntypedTupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr );
+	UntypedTupleExpr( const std::list< Expression * > & exprs );
 	UntypedTupleExpr( const UntypedTupleExpr & other );
 	virtual ~UntypedTupleExpr();
@@ -657,5 +652,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -665,5 +660,5 @@
 	std::list<Expression*> exprs;
 
-	TupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr );
+	TupleExpr( const std::list< Expression * > & exprs );
 	TupleExpr( const TupleExpr & other );
 	virtual ~TupleExpr();
@@ -674,5 +669,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -695,5 +690,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -703,5 +698,5 @@
 	StmtExpr * stmtExpr = nullptr;
 
-	TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls, Expression * _aname = nullptr );
+	TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls );
 	TupleAssignExpr( const TupleAssignExpr & other );
 	virtual ~TupleAssignExpr();
@@ -713,5 +708,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -736,5 +731,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -763,5 +758,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 
 private:
@@ -797,5 +792,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -818,9 +813,6 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
-};
-
-
-std::ostream & operator<<( std::ostream & out, const Expression * expr );
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
+};
 
 // Local Variables: //
Index: src/SynTree/FunctionDecl.cc
===================================================================
--- src/SynTree/FunctionDecl.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/FunctionDecl.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -26,4 +26,5 @@
 #include "Statement.h"           // for CompoundStmt
 #include "Type.h"                // for Type, FunctionType, Type::FuncSpecif...
+#include "VarExprReplacer.h"
 
 extern bool translation_unit_nomain;
@@ -39,4 +40,16 @@
 FunctionDecl::FunctionDecl( const FunctionDecl &other )
 		: Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ) {
+
+	VarExprReplacer::DeclMap declMap;
+	for ( auto p : group_iterate( other.type->parameters, type->parameters ) ) {
+		declMap[ std::get<0>(p) ] = std::get<1>(p);
+	}
+	for ( auto p : group_iterate( other.type->returnVals, type->returnVals ) ) {
+		declMap[ std::get<0>(p) ] = std::get<1>(p);
+	}
+	if ( ! declMap.empty() ) {
+		VarExprReplacer replacer( declMap );
+		accept( replacer );
+	}
 }
 
@@ -46,22 +59,26 @@
 }
 
-void FunctionDecl::print( std::ostream &os, int indent ) const {
+FunctionDecl * FunctionDecl::newFunction( const std::string & name, FunctionType * type, CompoundStmt * statements ) {
+	return new FunctionDecl( name, Type::StorageClasses(), LinkageSpec::C, type, statements );
+}
+
+void FunctionDecl::print( std::ostream &os, Indenter indent ) const {
 	using std::endl;
 	using std::string;
 
-	if ( get_name() != "" ) {
-		os << get_name() << ": ";
+	if ( name != "" ) {
+		os << name << ": ";
 	} // if
-	if ( get_linkage() != LinkageSpec::Cforall ) {
-		os << LinkageSpec::linkageName( get_linkage() ) << " ";
+	if ( linkage != LinkageSpec::Cforall ) {
+		os << LinkageSpec::linkageName( linkage ) << " ";
 	} // if
 
-	printAll( get_attributes(), os, indent );
+	printAll( attributes, os, indent );
 
 	get_storageClasses().print( os );
 	get_funcSpec().print( os );
 
-	if ( get_type() ) {
-		get_type()->print( os, indent );
+	if ( type ) {
+		type->print( os, indent );
 	} else {
 		os << "untyped entity ";
@@ -69,25 +86,22 @@
 
 	if ( statements ) {
-		os << string( indent + 2, ' ' ) << "with body " << endl;
-		os << string( indent + 4, ' ' );
-		statements->print( os, indent + 4 );
+		os << indent << "... with body " << endl << indent+1;
+		statements->print( os, indent+1 );
 	} // if
 }
 
-void FunctionDecl::printShort( std::ostream &os, int indent ) const {
+void FunctionDecl::printShort( std::ostream &os, Indenter indent ) const {
 	using std::endl;
 	using std::string;
 
-	if ( get_name() != "" ) {
-		os << get_name() << ": ";
+	if ( name != "" ) {
+		os << name << ": ";
 	} // if
-
-	// xxx - should printShort print attributes?
 
 	get_storageClasses().print( os );
 	get_funcSpec().print( os );
 
-	if ( get_type() ) {
-		get_type()->print( os, indent );
+	if ( type ) {
+		type->print( os, indent );
 	} else {
 		os << "untyped entity ";
Index: src/SynTree/FunctionType.cc
===================================================================
--- src/SynTree/FunctionType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/FunctionType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -51,5 +51,5 @@
 }
 
-void FunctionType::print( std::ostream &os, int indent ) const {
+void FunctionType::print( std::ostream &os, Indenter indent ) const {
 	using std::string;
 	using std::endl;
@@ -58,18 +58,18 @@
 	os << "function" << endl;
 	if ( ! parameters.empty() ) {
-		os << string( indent + 2, ' ' ) << "with parameters" << endl;
-		printAll( parameters, os, indent + 4 );
+		os << indent << "... with parameters" << endl;
+		printAll( parameters, os, indent+1 );
 		if ( isVarArgs ) {
-			os << string( indent + 4, ' ' ) << "and a variable number of other arguments" << endl;
+			os << indent+1 << "and a variable number of other arguments" << endl;
 		} // if
 	} else if ( isVarArgs ) {
-		os << string( indent + 4, ' ' ) << "accepting unspecified arguments" << endl;
+		os << indent+1 << "accepting unspecified arguments" << endl;
 	} // if
-	os << string( indent + 2, ' ' ) << "returning ";
+	os << indent << "... returning ";
 	if ( returnVals.empty() ) {
-		os << endl << string( indent + 4, ' ' ) << "nothing " << endl;
+		os << "nothing " << endl;
 	} else {
 		os << endl;
-		printAll( returnVals, os, indent + 4 );
+		printAll( returnVals, os, indent+1 );
 	} // if
 }
Index: src/SynTree/Initializer.cc
===================================================================
--- src/SynTree/Initializer.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Initializer.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -38,12 +38,12 @@
 }
 
-void Designation::print( std::ostream &os, int indent ) const {
+void Designation::print( std::ostream &os, Indenter indent ) const {
 	if ( ! designators.empty() ) {
-		os << std::string(indent + 2, ' ' ) << "designated by: " << std::endl;
-		for ( std::list < Expression * >::const_iterator i = designators.begin(); i != designators.end(); i++ ) {
-			os << std::string(indent + 4, ' ' );
-			( *i )->print(os, indent + 4 );
+		os << "... designated by: " << std::endl;
+		for ( const Expression * d : designators ) {
+			os << indent+1;
+			d->print(os, indent+1 );
+			os << std::endl;
 		}
-		os << std::endl;
 	} // if
 }
@@ -64,8 +64,7 @@
 }
 
-void SingleInit::print( std::ostream &os, int indent ) const {
-	os << std::string(indent, ' ' ) << "Simple Initializer: " << std::endl;
-	os << std::string(indent+4, ' ' );
-	value->print( os, indent+4 );
+void SingleInit::print( std::ostream &os, Indenter indent ) const {
+	os << "Simple Initializer: ";
+	value->print( os, indent );
 }
 
@@ -93,13 +92,16 @@
 }
 
-void ListInit::print( std::ostream &os, int indent ) const {
-	os << std::string(indent, ' ') << "Compound initializer:  " << std::endl;
-	for ( Designation * d : designations ) {
-		d->print( os, indent + 2 );
-	}
-
-	for ( const Initializer * init : initializers ) {
-		init->print( os, indent + 2 );
+void ListInit::print( std::ostream &os, Indenter indent ) const {
+	os << "Compound initializer: " << std::endl;
+	for ( auto p : group_iterate( designations, initializers ) ) {
+		const Designation * d = std::get<0>(p);
+		const Initializer * init = std::get<1>(p);
+		os << indent+1;
+		init->print( os, indent+1 );
 		os << std::endl;
+		if ( ! d->designators.empty() ) {
+			os << indent+1;
+			d->print( os, indent+1 );
+		}
 	}
 }
@@ -116,41 +118,20 @@
 }
 
-void ConstructorInit::print( std::ostream &os, int indent ) const {
-	os << std::endl << std::string(indent, ' ') << "Constructor initializer: " << std::endl;
+void ConstructorInit::print( std::ostream &os, Indenter indent ) const {
+	os << "Constructor initializer: " << std::endl;
 	if ( ctor ) {
-		os << std::string(indent+2, ' ');
-		os << "initially constructed with ";
-		ctor->print( os, indent+4 );
+		os << indent << "... initially constructed with ";
+		ctor->print( os, indent+1 );
 	} // if
 
 	if ( dtor ) {
-		os << std::string(indent+2, ' ');
-		os << "destructed with ";
-		dtor->print( os, indent+4 );
+		os << indent << "... destructed with ";
+		dtor->print( os, indent+1 );
 	}
 
 	if ( init ) {
-		os << std::string(indent+2, ' ');
-		os << "with fallback C-style initializer: ";
-		init->print( os, indent+4 );
+		os << indent << "... with fallback C-style initializer: ";
+		init->print( os, indent+1 );
 	}
-}
-
-std::ostream & operator<<( std::ostream & out, const Initializer * init ) {
-	if ( init ) {
-		init->print( out );
-	} else {
-		out << "nullptr";
-	}
-	return out;
-}
-
-std::ostream & operator<<( std::ostream & out, const Designation * des ) {
-	if ( des ) {
-		des->print( out );
-	} else {
-		out << "nullptr";
-	}
-	return out;
 }
 
Index: src/SynTree/Initializer.h
===================================================================
--- src/SynTree/Initializer.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Initializer.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -37,8 +37,8 @@
 	std::list< Expression * > & get_designators() { return designators; }
 
-	virtual Designation * clone() const { return new Designation( *this ); };
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Designation * acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual Designation * clone() const override { return new Designation( *this ); };
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Designation * acceptMutator( Mutator &m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -54,8 +54,8 @@
 	bool get_maybeConstructed() { return maybeConstructed; }
 
-	virtual Initializer *clone() const = 0;
-	virtual void accept( Visitor &v ) = 0;
-	virtual Initializer *acceptMutator( Mutator &m ) = 0;
-	virtual void print( std::ostream &os, int indent = 0 ) const = 0;
+	virtual Initializer *clone() const override = 0;
+	virtual void accept( Visitor &v ) override = 0;
+	virtual Initializer *acceptMutator( Mutator &m ) override = 0;
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override = 0;
   private:
 	bool maybeConstructed;
@@ -75,8 +75,8 @@
 	void set_value( Expression *newValue ) { value = newValue; }
 
-	virtual SingleInit *clone() const { return new SingleInit( *this); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual SingleInit *clone() const override { return new SingleInit( *this); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Initializer *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -103,8 +103,8 @@
 	const_iterator end() const { return initializers.end(); }
 
-	virtual ListInit *clone() const { return new ListInit( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual ListInit *clone() const override { return new ListInit( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Initializer *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -117,4 +117,7 @@
 	Statement * ctor;
 	Statement * dtor;
+	// C-style initializer made up of SingleInit and ListInit nodes to use as a fallback
+	// if an appropriate constructor definition is not found by the resolver
+	Initializer * init;
 
 	ConstructorInit( Statement * ctor, Statement * dtor, Initializer * init );
@@ -129,17 +132,11 @@
 	Initializer * get_init() const { return init; }
 
-	ConstructorInit *clone() const { return new ConstructorInit( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	ConstructorInit *clone() const override { return new ConstructorInit( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Initializer *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 
   private:
-	// C-style initializer made up of SingleInit and ListInit nodes to use as a fallback
-	// if an appropriate constructor definition is not found by the resolver
-	Initializer * init;
 };
-
-std::ostream & operator<<( std::ostream & out, const Initializer * init );
-std::ostream & operator<<( std::ostream & out, const Designation * des );
 
 // Local Variables: //
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Mutator.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -17,4 +17,5 @@
 #include <list>                // for list
 
+#include "Attribute.h"         // for Attribute
 #include "Declaration.h"       // for ObjectDecl, Declaration, DeclarationWi...
 #include "Expression.h"        // for Expression, ConstantExpr, ConditionalExpr
@@ -36,4 +37,5 @@
 	objectDecl->set_init( maybeMutate( objectDecl->get_init(), *this ) );
 	objectDecl->set_bitfieldWidth( maybeMutate( objectDecl->get_bitfieldWidth(), *this ) );
+	mutateAll( objectDecl->attributes, *this );
 	return objectDecl;
 }
@@ -42,4 +44,5 @@
 	functionDecl->set_functionType( maybeMutate( functionDecl->get_functionType(), *this ) );
 	functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );
+	mutateAll( functionDecl->attributes, *this );
 	return functionDecl;
 }
@@ -618,4 +621,19 @@
 }
 
+Attribute * Mutator::mutate( Attribute * attribute ) {
+	mutateAll( attribute->parameters, *this );
+	return attribute;
+}
+
+TypeSubstitution * Mutator::mutate( TypeSubstitution * sub ) {
+	for ( auto & p : sub->typeEnv ) {
+		p.second = maybeMutate( p.second, *this );
+	}
+	for ( auto & p : sub->varEnv ) {
+		p.second = maybeMutate( p.second, *this );
+	}
+	return sub;
+}
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Mutator.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -25,98 +25,102 @@
 	virtual ~Mutator();
   public:
-	virtual DeclarationWithType* mutate( ObjectDecl *objectDecl );
-	virtual DeclarationWithType* mutate( FunctionDecl *functionDecl );
-	virtual Declaration* mutate( StructDecl *aggregateDecl );
-	virtual Declaration* mutate( UnionDecl *aggregateDecl );
-	virtual Declaration* mutate( EnumDecl *aggregateDecl );
-	virtual Declaration* mutate( TraitDecl *aggregateDecl );
-	virtual Declaration* mutate( TypeDecl *typeDecl );
-	virtual Declaration* mutate( TypedefDecl *typeDecl );
-	virtual AsmDecl* mutate( AsmDecl *asmDecl );
+	virtual DeclarationWithType * mutate( ObjectDecl * objectDecl );
+	virtual DeclarationWithType * mutate( FunctionDecl * functionDecl );
+	virtual Declaration * mutate( StructDecl * aggregateDecl );
+	virtual Declaration * mutate( UnionDecl * aggregateDecl );
+	virtual Declaration * mutate( EnumDecl * aggregateDecl );
+	virtual Declaration * mutate( TraitDecl * aggregateDecl );
+	virtual Declaration * mutate( TypeDecl * typeDecl );
+	virtual Declaration * mutate( TypedefDecl * typeDecl );
+	virtual AsmDecl * mutate( AsmDecl * asmDecl );
 
-	virtual CompoundStmt* mutate( CompoundStmt *compoundStmt );
-	virtual Statement* mutate( ExprStmt *exprStmt );
-	virtual Statement* mutate( AsmStmt *asmStmt );
-	virtual Statement* mutate( IfStmt *ifStmt );
-	virtual Statement* mutate( WhileStmt *whileStmt );
-	virtual Statement* mutate( ForStmt *forStmt );
-	virtual Statement* mutate( SwitchStmt *switchStmt );
-	virtual Statement* mutate( CaseStmt *caseStmt );
-	virtual Statement* mutate( BranchStmt *branchStmt );
-	virtual Statement* mutate( ReturnStmt *returnStmt );
-	virtual Statement* mutate( ThrowStmt *throwStmt );
-	virtual Statement* mutate( TryStmt *tryStmt );
-	virtual Statement* mutate( CatchStmt *catchStmt );
-	virtual Statement* mutate( FinallyStmt *catchStmt );
-	virtual Statement* mutate( WaitForStmt *waitforStmt );
-	virtual NullStmt* mutate( NullStmt *nullStmt );
-	virtual Statement* mutate( DeclStmt *declStmt );
-	virtual Statement* mutate( ImplicitCtorDtorStmt *impCtorDtorStmt );
+	virtual CompoundStmt * mutate( CompoundStmt * compoundStmt );
+	virtual Statement * mutate( ExprStmt * exprStmt );
+	virtual Statement * mutate( AsmStmt * asmStmt );
+	virtual Statement * mutate( IfStmt * ifStmt );
+	virtual Statement * mutate( WhileStmt * whileStmt );
+	virtual Statement * mutate( ForStmt * forStmt );
+	virtual Statement * mutate( SwitchStmt * switchStmt );
+	virtual Statement * mutate( CaseStmt * caseStmt );
+	virtual Statement * mutate( BranchStmt * branchStmt );
+	virtual Statement * mutate( ReturnStmt * returnStmt );
+	virtual Statement * mutate( ThrowStmt * throwStmt );
+	virtual Statement * mutate( TryStmt * tryStmt );
+	virtual Statement * mutate( CatchStmt * catchStmt );
+	virtual Statement * mutate( FinallyStmt * catchStmt );
+	virtual Statement * mutate( WaitForStmt * waitforStmt );
+	virtual NullStmt * mutate( NullStmt * nullStmt );
+	virtual Statement * mutate( DeclStmt * declStmt );
+	virtual Statement * mutate( ImplicitCtorDtorStmt * impCtorDtorStmt );
 
-	virtual Expression* mutate( ApplicationExpr *applicationExpr );
-	virtual Expression* mutate( UntypedExpr *untypedExpr );
-	virtual Expression* mutate( NameExpr *nameExpr );
-	virtual Expression* mutate( AddressExpr *castExpr );
-	virtual Expression* mutate( LabelAddressExpr *labAddressExpr );
-	virtual Expression* mutate( CastExpr *castExpr );
-	virtual Expression* mutate( VirtualCastExpr *castExpr );
-	virtual Expression* mutate( UntypedMemberExpr *memberExpr );
-	virtual Expression* mutate( MemberExpr *memberExpr );
-	virtual Expression* mutate( VariableExpr *variableExpr );
-	virtual Expression* mutate( ConstantExpr *constantExpr );
-	virtual Expression* mutate( SizeofExpr *sizeofExpr );
-	virtual Expression* mutate( AlignofExpr *alignofExpr );
-	virtual Expression* mutate( UntypedOffsetofExpr *offsetofExpr );
-	virtual Expression* mutate( OffsetofExpr *offsetofExpr );
-	virtual Expression* mutate( OffsetPackExpr *offsetPackExpr );
-	virtual Expression* mutate( AttrExpr *attrExpr );
-	virtual Expression* mutate( LogicalExpr *logicalExpr );
-	virtual Expression* mutate( ConditionalExpr *conditionalExpr );
-	virtual Expression* mutate( CommaExpr *commaExpr );
-	virtual Expression* mutate( TypeExpr *typeExpr );
-	virtual Expression* mutate( AsmExpr *asmExpr );
-	virtual Expression* mutate( ImplicitCopyCtorExpr *impCpCtorExpr );
-	virtual Expression* mutate( ConstructorExpr *ctorExpr );
-	virtual Expression* mutate( CompoundLiteralExpr *compLitExpr );
-	virtual Expression* mutate( RangeExpr *rangeExpr );
-	virtual Expression* mutate( UntypedTupleExpr *tupleExpr );
-	virtual Expression* mutate( TupleExpr *tupleExpr );
-	virtual Expression* mutate( TupleIndexExpr *tupleExpr );
-	virtual Expression* mutate( TupleAssignExpr *assignExpr );
-	virtual Expression* mutate( StmtExpr * stmtExpr );
-	virtual Expression* mutate( UniqueExpr * uniqueExpr );
-	virtual Expression* mutate( UntypedInitExpr * initExpr );
-	virtual Expression* mutate( InitExpr * initExpr );
+	virtual Expression* mutate( ApplicationExpr * applicationExpr );
+	virtual Expression* mutate( UntypedExpr * untypedExpr );
+	virtual Expression* mutate( NameExpr * nameExpr );
+	virtual Expression* mutate( AddressExpr * castExpr );
+	virtual Expression* mutate( LabelAddressExpr * labAddressExpr );
+	virtual Expression* mutate( CastExpr * castExpr );
+	virtual Expression* mutate( VirtualCastExpr * castExpr );
+	virtual Expression* mutate( UntypedMemberExpr * memberExpr );
+	virtual Expression* mutate( MemberExpr * memberExpr );
+	virtual Expression* mutate( VariableExpr * variableExpr );
+	virtual Expression* mutate( ConstantExpr * constantExpr );
+	virtual Expression* mutate( SizeofExpr * sizeofExpr );
+	virtual Expression* mutate( AlignofExpr * alignofExpr );
+	virtual Expression* mutate( UntypedOffsetofExpr * offsetofExpr );
+	virtual Expression* mutate( OffsetofExpr * offsetofExpr );
+	virtual Expression* mutate( OffsetPackExpr * offsetPackExpr );
+	virtual Expression* mutate( AttrExpr * attrExpr );
+	virtual Expression* mutate( LogicalExpr * logicalExpr );
+	virtual Expression* mutate( ConditionalExpr * conditionalExpr );
+	virtual Expression* mutate( CommaExpr * commaExpr );
+	virtual Expression* mutate( TypeExpr * typeExpr );
+	virtual Expression* mutate( AsmExpr * asmExpr );
+	virtual Expression* mutate( ImplicitCopyCtorExpr * impCpCtorExpr );
+	virtual Expression* mutate( ConstructorExpr * ctorExpr );
+	virtual Expression* mutate( CompoundLiteralExpr * compLitExpr );
+	virtual Expression* mutate( RangeExpr * rangeExpr );
+	virtual Expression* mutate( UntypedTupleExpr * tupleExpr );
+	virtual Expression* mutate( TupleExpr * tupleExpr );
+	virtual Expression* mutate( TupleIndexExpr * tupleExpr );
+	virtual Expression* mutate( TupleAssignExpr * assignExpr );
+	virtual Expression* mutate( StmtExpr  * stmtExpr );
+	virtual Expression* mutate( UniqueExpr  * uniqueExpr );
+	virtual Expression* mutate( UntypedInitExpr  * initExpr );
+	virtual Expression* mutate( InitExpr  * initExpr );
 
-	virtual Type* mutate( VoidType *basicType );
-	virtual Type* mutate( BasicType *basicType );
-	virtual Type* mutate( PointerType *pointerType );
-	virtual Type* mutate( ArrayType *arrayType );
-	virtual Type* mutate( ReferenceType *refType );
-	virtual Type* mutate( FunctionType *functionType );
-	virtual Type* mutate( StructInstType *aggregateUseType );
-	virtual Type* mutate( UnionInstType *aggregateUseType );
-	virtual Type* mutate( EnumInstType *aggregateUseType );
-	virtual Type* mutate( TraitInstType *aggregateUseType );
-	virtual Type* mutate( TypeInstType *aggregateUseType );
-	virtual Type* mutate( TupleType *tupleType );
-	virtual Type* mutate( TypeofType *typeofType );
-	virtual Type* mutate( AttrType *attrType );
-	virtual Type* mutate( VarArgsType *varArgsType );
-	virtual Type* mutate( ZeroType *zeroType );
-	virtual Type* mutate( OneType *oneType );
+	virtual Type * mutate( VoidType * basicType );
+	virtual Type * mutate( BasicType * basicType );
+	virtual Type * mutate( PointerType * pointerType );
+	virtual Type * mutate( ArrayType * arrayType );
+	virtual Type * mutate( ReferenceType * refType );
+	virtual Type * mutate( FunctionType * functionType );
+	virtual Type * mutate( StructInstType * aggregateUseType );
+	virtual Type * mutate( UnionInstType * aggregateUseType );
+	virtual Type * mutate( EnumInstType * aggregateUseType );
+	virtual Type * mutate( TraitInstType * aggregateUseType );
+	virtual Type * mutate( TypeInstType * aggregateUseType );
+	virtual Type * mutate( TupleType * tupleType );
+	virtual Type * mutate( TypeofType * typeofType );
+	virtual Type * mutate( AttrType * attrType );
+	virtual Type * mutate( VarArgsType * varArgsType );
+	virtual Type * mutate( ZeroType * zeroType );
+	virtual Type * mutate( OneType * oneType );
 
-	virtual Designation* mutate( Designation *designation );
-	virtual Initializer* mutate( SingleInit *singleInit );
-	virtual Initializer* mutate( ListInit *listInit );
-	virtual Initializer* mutate( ConstructorInit *ctorInit );
+	virtual Designation * mutate( Designation * designation );
+	virtual Initializer * mutate( SingleInit * singleInit );
+	virtual Initializer * mutate( ListInit * listInit );
+	virtual Initializer * mutate( ConstructorInit * ctorInit );
 
-	virtual Subrange *mutate( Subrange *subrange );
+	virtual Subrange * mutate( Subrange * subrange );
 
-	virtual Constant *mutate( Constant *constant );
+	virtual Constant * mutate( Constant * constant );
+
+	virtual Attribute * mutate( Attribute * attribute );
+
+	virtual TypeSubstitution * mutate( TypeSubstitution * sub );
   private:
-	virtual Declaration* handleAggregateDecl(AggregateDecl *aggregateDecl );
-	virtual Declaration* handleNamedTypeDecl(NamedTypeDecl *typeDecl );
-	virtual Type* handleReferenceToType(ReferenceToType *aggregateUseType );
+	virtual Declaration * handleAggregateDecl(AggregateDecl * aggregateDecl );
+	virtual Declaration * handleNamedTypeDecl(NamedTypeDecl * typeDecl );
+	virtual Type * handleReferenceToType(ReferenceToType * aggregateUseType );
 };
 
Index: src/SynTree/NamedTypeDecl.cc
===================================================================
--- src/SynTree/NamedTypeDecl.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/NamedTypeDecl.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -38,12 +38,11 @@
 }
 
-void NamedTypeDecl::print( std::ostream &os, int indent ) const {
+void NamedTypeDecl::print( std::ostream &os, Indenter indent ) const {
 	using namespace std;
 
-	if ( get_name() != "" ) {
-		os << get_name() << ": ";
-	} // if
-	if ( get_linkage() != LinkageSpec::Cforall ) {
-		os << LinkageSpec::linkageName( get_linkage() ) << " ";
+	if ( name != "" ) os << name << ": ";
+
+	if ( linkage != LinkageSpec::Cforall ) {
+		os << LinkageSpec::linkageName( linkage ) << " ";
 	} // if
 	get_storageClasses().print( os );
@@ -51,31 +50,29 @@
 	if ( base ) {
 		os << " for ";
-		base->print( os, indent );
+		base->print( os, indent+1 );
 	} // if
 	if ( ! parameters.empty() ) {
-		os << endl << string( indent, ' ' ) << "with parameters" << endl;
-		printAll( parameters, os, indent+2 );
+		os << endl << indent << "... with parameters" << endl;
+		printAll( parameters, os, indent+1 );
 	} // if
 	if ( ! assertions.empty() ) {
-		os << endl << string( indent, ' ' ) << "with assertions" << endl;
-		printAll( assertions, os, indent+2 );
+		os << endl << indent << "... with assertions" << endl;
+		printAll( assertions, os, indent+1 );
 	} // if
 }
 
-void NamedTypeDecl::printShort( std::ostream &os, int indent ) const {
+void NamedTypeDecl::printShort( std::ostream &os, Indenter indent ) const {
 	using namespace std;
 
-	if ( get_name() != "" ) {
-		os << get_name() << ": ";
-	} // if
+	if ( name != "" ) os << name << ": ";
 	get_storageClasses().print( os );
 	os << typeString();
 	if ( base ) {
 		os << " for ";
-		base->print( os, indent );
+		base->print( os, indent+1 );
 	} // if
 	if ( ! parameters.empty() ) {
-		os << endl << string( indent, ' ' ) << "with parameters" << endl;
-		printAll( parameters, os, indent+2 );
+		os << endl << indent << "... with parameters" << endl;
+		printAll( parameters, os, indent+1 );
 	} // if
 }
Index: src/SynTree/ObjectDecl.cc
===================================================================
--- src/SynTree/ObjectDecl.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/ObjectDecl.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -44,19 +44,15 @@
 }
 
-void ObjectDecl::print( std::ostream &os, int indent ) const {
-	if ( get_name() != "" ) {
-		os << get_name() << ": ";
+void ObjectDecl::print( std::ostream &os, Indenter indent ) const {
+	if ( name != "" ) os << name << ": ";
+
+	if ( linkage != LinkageSpec::Cforall ) {
+		os << LinkageSpec::linkageName( linkage ) << " ";
 	} // if
-
-	if ( get_linkage() != LinkageSpec::Cforall ) {
-		os << LinkageSpec::linkageName( get_linkage() ) << " ";
-	} // if
-
-	printAll( get_attributes(), os, indent );
 
 	get_storageClasses().print( os );
 
-	if ( get_type() ) {
-		get_type()->print( os, indent );
+	if ( type ) {
+		type->print( os, indent );
 	} else {
 		os << " untyped entity ";
@@ -64,18 +60,21 @@
 
 	if ( init ) {
-		os << " with initializer " << std::endl;
-		init->print( os, indent+2 );
-		os << std::endl << std::string(indent+2, ' ');
-		os << "maybeConstructed? " << init->get_maybeConstructed();
+		os << " with initializer (" << (init->get_maybeConstructed() ? "maybe constructed" : "not constructed") << ")" << std::endl << indent+1;
+		init->print( os, indent+1 );
+		os << std::endl;
 	} // if
 
+	if ( ! attributes.empty() ) {
+		os << std::endl << indent << "... with attributes: " << std::endl;
+		printAll( attributes, os, indent+1 );
+	}
+
 	if ( bitfieldWidth ) {
-		os << std::string(indent, ' ');
-		os << " with bitfield width ";
+		os << indent << " with bitfield width ";
 		bitfieldWidth->print( os );
 	} // if
 }
 
-void ObjectDecl::printShort( std::ostream &os, int indent ) const {
+void ObjectDecl::printShort( std::ostream &os, Indenter indent ) const {
 #if 0
 	if ( get_mangleName() != "") {
@@ -83,14 +82,10 @@
 	} else
 #endif
-	if ( get_name() != "" ) {
-		os << get_name() << ": ";
-	} // if
-
-	// xxx - should printShort print attributes?
+	if ( name != "" ) os << name << ": ";
 
 	get_storageClasses().print( os );
 
-	if ( get_type() ) {
-		get_type()->print( os, indent );
+	if ( type ) {
+		type->print( os, indent );
 	} else {
 		os << "untyped entity ";
Index: src/SynTree/PointerType.cc
===================================================================
--- src/SynTree/PointerType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/PointerType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -41,5 +41,5 @@
 }
 
-void PointerType::print( std::ostream &os, int indent ) const {
+void PointerType::print( std::ostream &os, Indenter indent ) const {
 	Type::print( os, indent );
 	if ( ! is_array() ) {
Index: src/SynTree/ReferenceToType.cc
===================================================================
--- src/SynTree/ReferenceToType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/ReferenceToType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -14,5 +14,4 @@
 //
 
-#include <stddef.h>          // for NULL
 #include <cassert>           // for assert
 #include <list>              // for list, _List_const_iterator, list<>::cons...
@@ -38,5 +37,5 @@
 }
 
-void ReferenceToType::print( std::ostream &os, int indent ) const {
+void ReferenceToType::print( std::ostream &os, Indenter indent ) const {
 	using std::endl;
 
@@ -44,6 +43,6 @@
 	os << "instance of " << typeString() << " " << name << " ";
 	if ( ! parameters.empty() ) {
-		os << endl << std::string( indent, ' ' ) << "with parameters" << endl;
-		printAll( parameters, os, indent+2 );
+		os << endl << indent << "... with parameters" << endl;
+		printAll( parameters, os, indent+1 );
 	} // if
 }
@@ -65,5 +64,5 @@
 
 std::list<TypeDecl*>* StructInstType::get_baseParameters() {
-	if ( ! baseStruct ) return NULL;
+	if ( ! baseStruct ) return nullptr;
 	return &baseStruct->get_parameters();
 }
@@ -76,14 +75,14 @@
 }
 
-void StructInstType::print( std::ostream &os, int indent ) const {
+void StructInstType::print( std::ostream &os, Indenter indent ) const {
 	using std::endl;
 
-	if ( baseStruct == NULL ) ReferenceToType::print( os, indent );
+	if ( baseStruct == nullptr ) ReferenceToType::print( os, indent );
 	else {
 		Type::print( os, indent );
 		os << "instance of " << typeString() << " " << name << " with body " << baseStruct->has_body() << " ";
 		if ( ! parameters.empty() ) {
-			os << endl << std::string( indent, ' ' ) << "with parameters" << endl;
-			printAll( parameters, os, indent+2 );
+			os << endl << indent << "... with parameters" << endl;
+			printAll( parameters, os, indent+1 );
 		} // if
 	} // if
@@ -97,5 +96,5 @@
 
 std::list< TypeDecl * > * UnionInstType::get_baseParameters() {
-	if ( ! baseUnion ) return NULL;
+	if ( ! baseUnion ) return nullptr;
 	return &baseUnion->get_parameters();
 }
@@ -108,14 +107,14 @@
 }
 
-void UnionInstType::print( std::ostream &os, int indent ) const {
+void UnionInstType::print( std::ostream &os, Indenter indent ) const {
 	using std::endl;
 
-	if ( baseUnion == NULL ) ReferenceToType::print( os, indent );
+	if ( baseUnion == nullptr ) ReferenceToType::print( os, indent );
 	else {
 		Type::print( os, indent );
 		os << "instance of " << typeString() << " " << name << " with body " << baseUnion->has_body() << " ";
 		if ( ! parameters.empty() ) {
-			os << endl << std::string( indent, ' ' ) << "with parameters" << endl;
-			printAll( parameters, os, indent+2 );
+			os << endl << indent << "... with parameters" << endl;
+			printAll( parameters, os, indent+1 );
 		} // if
 	} // if
@@ -129,4 +128,15 @@
 
 bool EnumInstType::isComplete() const { return baseEnum ? baseEnum->has_body() : false; }
+
+void EnumInstType::print( std::ostream &os, Indenter indent ) const {
+	using std::endl;
+
+	if ( baseEnum == nullptr ) ReferenceToType::print( os, indent );
+	else {
+		Type::print( os, indent );
+		os << "instance of " << typeString() << " " << name << " with body " << baseEnum->has_body() << " ";
+	} // if
+}
+
 
 std::string TraitInstType::typeString() const { return "trait"; }
@@ -166,5 +176,5 @@
 bool TypeInstType::isComplete() const { return baseType->isComplete(); }
 
-void TypeInstType::print( std::ostream &os, int indent ) const {
+void TypeInstType::print( std::ostream &os, Indenter indent ) const {
 	using std::endl;
 
@@ -172,6 +182,6 @@
 	os << "instance of " << typeString() << " " << get_name() << " (" << ( isFtype ? "" : "not" ) << " function type) ";
 	if ( ! parameters.empty() ) {
-		os << endl << std::string( indent, ' ' ) << "with parameters" << endl;
-		printAll( parameters, os, indent+2 );
+		os << endl << indent << "... with parameters" << endl;
+		printAll( parameters, os, indent+1 );
 	} // if
 }
Index: src/SynTree/ReferenceType.cc
===================================================================
--- src/SynTree/ReferenceType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/ReferenceType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -35,5 +35,5 @@
 }
 
-void ReferenceType::print( std::ostream &os, int indent ) const {
+void ReferenceType::print( std::ostream &os, Indenter indent ) const {
 	Type::print( os, indent );
 	os << "reference to ";
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Statement.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -34,5 +34,13 @@
 Statement::Statement( std::list<Label> labels ) : labels( labels ) {}
 
-void Statement::print( __attribute__((unused)) std::ostream &, __attribute__((unused)) int indent ) const {}
+void Statement::print( std::ostream & os, Indenter ) const {
+	if ( ! labels.empty() ) {
+		os << "Labels: {";
+		for ( const Label & l : labels ) {
+			os << l << ",";
+		}
+		os << "}" << endl;
+	}
+}
 
 Statement::~Statement() {}
@@ -46,7 +54,7 @@
 }
 
-void ExprStmt::print( std::ostream &os, int indent ) const {
-	os << "Expression Statement:" << endl << std::string( indent + 2, ' ' );
-	expr->print( os, indent + 2 );
+void ExprStmt::print( std::ostream &os, Indenter indent ) const {
+	os << "Expression Statement:" << endl << indent+1;
+	expr->print( os, indent+1 );
 }
 
@@ -67,19 +75,19 @@
 }
 
-void AsmStmt::print( std::ostream &os, int indent ) const {
+void AsmStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Assembler Statement:" << endl;
-	os << std::string( indent, ' ' ) << "instruction: " << endl << std::string( indent, ' ' );
-	instruction->print( os, indent + 2 );
+	os << indent+1 << "instruction: " << endl << indent;
+	instruction->print( os, indent+1 );
 	if ( ! output.empty() ) {
-		os << endl << std::string( indent, ' ' ) << "output: " << endl;
-		printAll( output, os, indent + 2 );
+		os << endl << indent+1 << "output: " << endl;
+		printAll( output, os, indent+1 );
 	} // if
 	if ( ! input.empty() ) {
-		os << std::string( indent, ' ' ) << "input: " << endl << std::string( indent, ' ' );
-		printAll( input, os, indent + 2 );
+		os << indent+1 << "input: " << endl;
+		printAll( input, os, indent+1 );
 	} // if
 	if ( ! clobber.empty() ) {
-		os << std::string( indent, ' ' ) << "clobber: " << endl;
-		printAll( clobber, os, indent + 2 );
+		os << indent+1 << "clobber: " << endl;
+		printAll( clobber, os, indent+1 );
 	} // if
 }
@@ -103,9 +111,9 @@
 }
 
-void BranchStmt::print( std::ostream &os, int indent ) const {
-	os << string( indent, ' ' ) << "Branch (" << brType[type] << ")" << endl ;
-	if ( target != "" ) os << string( indent+2, ' ' ) << "with target: " << target << endl;
-	if ( originalTarget != "" ) os << string( indent+2, ' ' ) << "with original target: " << originalTarget << endl;
-	if ( computedTarget != nullptr ) os << string( indent+2, ' ' ) << "with computed target: " << computedTarget << endl;
+void BranchStmt::print( std::ostream &os, Indenter indent ) const {
+	os << "Branch (" << brType[type] << ")" << endl ;
+	if ( target != "" ) os << indent+1 << "with target: " << target << endl;
+	if ( originalTarget != "" ) os << indent+1 << "with original target: " << originalTarget << endl;
+	if ( computedTarget != nullptr ) os << indent+1 << "with computed target: " << computedTarget << endl;
 }
 
@@ -118,9 +126,9 @@
 }
 
-void ReturnStmt::print( std::ostream &os, int indent ) const {
-	os <<  "Return Statement, returning: ";
-	if ( expr != 0 ) {
-		os << endl << string( indent+2, ' ' );
-		expr->print( os, indent + 2 );
+void ReturnStmt::print( std::ostream &os, Indenter indent ) const {
+	os << "Return Statement, returning: ";
+	if ( expr != nullptr ) {
+		os << endl << indent+1;
+		expr->print( os, indent+1 );
 	}
 	os << endl;
@@ -142,31 +150,31 @@
 }
 
-void IfStmt::print( std::ostream &os, int indent ) const {
-	os << "If on condition: " << endl ;
-	os << string( indent+4, ' ' );
-	condition->print( os, indent + 4 );
+void IfStmt::print( std::ostream &os, Indenter indent ) const {
+	os << "If on condition: " << endl;
+	os << indent+1;
+	condition->print( os, indent+1 );
 
 	if ( !initialization.empty() ) {
-		os << string( indent + 2, ' ' ) << "initialization: \n";
-		for ( std::list<Statement *>::const_iterator it = initialization.begin(); it != initialization.end(); ++it ) {
-			os << string( indent + 4, ' ' );
-			(*it)->print( os, indent + 4 );
+		os << indent << "... with initialization: \n";
+		for ( const Statement * stmt : initialization ) {
+			os << indent+1;
+			stmt->print( os, indent+1 );
 		}
 		os << endl;
 	}
 
-	os << string( indent+2, ' ' ) << "... then: " << endl;
-
-	os << string( indent+4, ' ' );
-	thenPart->print( os, indent + 4 );
+	os << indent << "... then: " << endl;
+
+	os << indent+1;
+	thenPart->print( os, indent+1 );
 
 	if ( elsePart != 0 ) {
-		os << string( indent+2, ' ' ) << "... else: " << endl;
-		os << string( indent+4, ' ' );
-		elsePart->print( os, indent + 4 );
-	} // if
-}
-
-SwitchStmt::SwitchStmt( std::list<Label> labels, Expression * condition, std::list<Statement *> &statements ):
+		os << indent << "... else: " << endl;
+		os << indent+1;
+		elsePart->print( os, indent+1 );
+	} // if
+}
+
+SwitchStmt::SwitchStmt( std::list<Label> labels, Expression * condition, const std::list<Statement *> &statements ):
 	Statement( labels ), condition( condition ), statements( statements ) {
 }
@@ -183,21 +191,17 @@
 }
 
-void SwitchStmt::print( std::ostream &os, int indent ) const {
+void SwitchStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Switch on condition: ";
 	condition->print( os );
 	os << endl;
 
-	// statements
-	std::list<Statement *>::const_iterator i;
-	for ( i = statements.begin(); i != statements.end(); i++)
-		(*i)->print( os, indent + 4 );
-
-	//for_each( statements.begin(), statements.end(), mem_fun( bind1st(&Statement::print ), os ));
-}
-
-CaseStmt::CaseStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &statements, bool deflt ) throw ( SemanticError ) :
+	for ( const Statement * stmt : statements ) {
+		stmt->print( os, indent+1 );
+	}
+}
+
+CaseStmt::CaseStmt( std::list<Label> labels, Expression *condition, const std::list<Statement *> &statements, bool deflt ) throw ( SemanticError ) :
 	Statement( labels ), condition( condition ), stmts( statements ), _isDefault( deflt ) {
-	if ( isDefault() && condition != 0 )
-		throw SemanticError("default with conditions");
+	if ( isDefault() && condition != 0 ) throw SemanticError("default case with condition: ", condition);
 }
 
@@ -216,19 +220,15 @@
 }
 
-void CaseStmt::print( std::ostream &os, int indent ) const {
-	os << string( indent, ' ' );
-
-	if ( isDefault() )
-		os << "Default ";
+void CaseStmt::print( std::ostream &os, Indenter indent ) const {
+	if ( isDefault() ) os << "Default ";
 	else {
 		os << "Case ";
-		condition->print( os );
-	} // if
-
-	os << endl;
-
-	std::list<Statement *>::const_iterator i;
-	for ( i = stmts.begin(); i != stmts.end(); i++)
-		(*i )->print( os, indent + 4 );
+		condition->print( os, indent );
+	} // if
+	os << endl;
+
+	for ( Statement * stmt : stmts ) {
+		stmt->print( os, indent+1 );
+	}
 }
 
@@ -246,11 +246,11 @@
 }
 
-void WhileStmt::print( std::ostream &os, int indent ) const {
+void WhileStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "While on condition: " << endl ;
-	condition->print( os, indent + 4 );
-
-	os << string( indent, ' ' ) << ".... with body: " << endl;
-
-	if ( body != 0 ) body->print( os, indent + 4 );
+	condition->print( os, indent+1 );
+
+	os << indent << "... with body: " << endl;
+
+	if ( body != 0 ) body->print( os, indent+1 );
 }
 
@@ -272,37 +272,31 @@
 }
 
-void ForStmt::print( std::ostream &os, int indent ) const {
-	os << "Labels: {";
-	for ( std::list<Label>::const_iterator it = get_labels().begin(); it != get_labels().end(); ++it) {
-		os << *it << ",";
-	}
-	os << "}" << endl;
-
-	os << string( indent, ' ' ) << "For Statement" << endl ;
-
-	os << string( indent + 2, ' ' ) << "initialization: \n";
-	for ( std::list<Statement *>::const_iterator it = initialization.begin(); it != initialization.end(); ++it ) {
-		os << string( indent + 4, ' ' );
-		(*it)->print( os, indent + 4 );
-	}
-
-	os << "\n" << string( indent + 2, ' ' ) << "condition: \n";
-	if ( condition != 0 ) {
-		os << string( indent + 4, ' ' );
-		condition->print( os, indent + 4 );
-	}
-
-	os << "\n" << string( indent + 2, ' ' ) << "increment: \n";
-	if ( increment != 0 ) {
-		os << string( indent + 4, ' ' );
-		increment->print( os, indent + 4 );
-	}
-
-	os << "\n" << string( indent + 2, ' ' ) << "statement block: \n";
+void ForStmt::print( std::ostream &os, Indenter indent ) const {
+	Statement::print( os, indent ); // print labels
+
+	os << "For Statement" << endl;
+
+	if ( ! initialization.empty() ) {
+		os << indent << "... initialization: \n";
+		for ( Statement * stmt : initialization ) {
+			os << indent+1;
+			stmt->print( os, indent+1 );
+		}
+	}
+
+	if ( condition != nullptr ) {
+		os << indent << "... condition: \n" << indent+1;
+		condition->print( os, indent+1 );
+	}
+
+	if ( increment != nullptr ) {
+		os << "\n" << indent << "... increment: \n" << indent+1;
+		increment->print( os, indent+1 );
+	}
+
 	if ( body != 0 ) {
-		os << string( indent + 4, ' ' );
-		body->print( os, indent + 4 );
-	}
-
+		os << "\n" << indent << "... with body: \n" << indent+1;
+		body->print( os, indent+1 );
+	}
 	os << endl;
 }
@@ -322,13 +316,11 @@
 }
 
-void ThrowStmt::print( std::ostream &os, int indent) const {
+void ThrowStmt::print( std::ostream &os, Indenter indent) const {
+	if ( target ) os << "Non-Local ";
+	os << "Throw Statement, raising: ";
+	expr->print(os, indent+1);
 	if ( target ) {
-		os << "Non-Local ";
-	}
-	os << "Throw Statement, raising: ";
-	expr->print(os, indent + 4);
-	if ( target ) {
-		os << "At: ";
-		target->print(os, indent + 4);
+		os << "... at: ";
+		target->print(os, indent+1);
 	}
 }
@@ -348,21 +340,20 @@
 }
 
-void TryStmt::print( std::ostream &os, int indent ) const {
+void TryStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Try Statement" << endl;
-	os << string( indent + 2, ' ' ) << "with block:" << endl;
-	os << string( indent + 4, ' ' );
-	block->print( os, indent + 4 );
+	os << indent << "... with block:" << endl << indent+1;
+	block->print( os, indent+1 );
 
 	// handlers
-	os << string( indent + 2, ' ' ) << "and handlers:" << endl;
-	for ( std::list<CatchStmt *>::const_iterator i = handlers.begin(); i != handlers.end(); i++) {
-		os << string( indent + 4, ' ' );
-		(*i )->print( os, indent + 4 );
+	os << indent << "... and handlers:" << endl;
+	for ( const CatchStmt * stmt : handlers ) {
+		os << indent+1;
+		stmt->print( os, indent+1 );
 	}
 
 	// finally block
 	if ( finallyBlock != 0 ) {
-		os << string( indent + 2, ' ' ) << "and finally:" << endl;
-		finallyBlock->print( os, indent + 4 );
+		os << indent << "... and finally:" << endl << indent+1;
+		finallyBlock->print( os, indent+1 );
 	} // if
 }
@@ -370,4 +361,5 @@
 CatchStmt::CatchStmt( std::list<Label> labels, Kind kind, Declaration *decl, Expression *cond, Statement *body ) :
 	Statement( labels ), kind ( kind ), decl ( decl ), cond ( cond ), body( body ) {
+		assertf( decl, "Catch clause must have a declaration." );
 }
 
@@ -381,26 +373,19 @@
 }
 
-void CatchStmt::print( std::ostream &os, int indent ) const {
+void CatchStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Catch " << ((Terminate == kind) ? "Terminate" : "Resume") << " Statement" << endl;
 
-	os << string( indent + 2, ' ' ) << "... catching: ";
-	if ( decl ) {
-		decl->printShort( os, indent + 4 );
-		os << endl;
-	}
-	else
-		os << string( indent + 4 , ' ' ) << ">>> Error:  this catch clause must have a declaration <<<" << endl;
+	os << indent << "... catching: ";
+	decl->printShort( os, indent+1 );
+	os << endl;
 
 	if ( cond ) {
-		os << string( indent + 2, ' ' ) << "with conditional:" << endl;
-		os << string( indent + 4, ' ' );
-		cond->print( os, indent + 4 );
-	}
-	else
-		os << string( indent + 2, ' ' ) << "with no conditional" << endl;
-
-	os << string( indent + 2, ' ' ) << "with block:" << endl;
-	os << string( indent + 4, ' ' );
-	body->print( os, indent + 4 );
+		os << indent << "... with conditional:" << endl << indent+1;
+		cond->print( os, indent+1 );
+	}
+
+	os << indent << "... with block:" << endl;
+	os << indent+1;
+	body->print( os, indent+1 );
 }
 
@@ -417,9 +402,8 @@
 }
 
-void FinallyStmt::print( std::ostream &os, int indent ) const {
+void FinallyStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Finally Statement" << endl;
-	os << string( indent + 2, ' ' ) << "with block:" << endl;
-	os << string( indent + 4, ' ' );
-	block->print( os, indent + 4 );
+	os << indent << "... with block:" << endl << indent+1;
+	block->print( os, indent+1 );
 }
 
@@ -465,8 +449,7 @@
 }
 
-void WaitForStmt::print( std::ostream &os, int indent ) const {
+void WaitForStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Waitfor Statement" << endl;
-	os << string( indent + 2, ' ' ) << "with block:" << endl;
-	os << string( indent + 4, ' ' );
+	os << indent << "... with block:" << endl << indent+1;
 	// block->print( os, indent + 4 );
 }
@@ -475,6 +458,6 @@
 NullStmt::NullStmt() : Statement( std::list<Label>() ) {}
 
-void NullStmt::print( std::ostream &os, __attribute__((unused)) int indent ) const {
-	os << "Null Statement" << endl ;
+void NullStmt::print( std::ostream &os, Indenter ) const {
+	os << "Null Statement" << endl;
 }
 
@@ -490,18 +473,9 @@
 }
 
-void ImplicitCtorDtorStmt::print( std::ostream &os, int indent ) const {
+void ImplicitCtorDtorStmt::print( std::ostream &os, Indenter indent ) const {
 	os << "Implicit Ctor Dtor Statement" << endl;
-	os << string( indent + 2, ' ' ) << "with Ctor/Dtor: ";
-	callStmt->print( os, indent + 2);
-	os << endl;
-}
-
-std::ostream & operator<<( std::ostream & out, const Statement * statement ) {
-	if ( statement ) {
-		statement->print( out );
-	} else {
-		out << "nullptr";
-	}
-	return out;
+	os << indent << "... with Ctor/Dtor: ";
+	callStmt->print( os, indent+1);
+	os << endl;
 }
 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Statement.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -43,8 +43,8 @@
 	const std::list<Label> & get_labels() const { return labels; }
 
-	virtual Statement *clone() const = 0;
-	virtual void accept( Visitor &v ) = 0;
-	virtual Statement *acceptMutator( Mutator &m ) = 0;
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual Statement *clone() const override = 0;
+	virtual void accept( Visitor &v ) override = 0;
+	virtual Statement *acceptMutator( Mutator &m ) override = 0;
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -54,4 +54,5 @@
 
 	CompoundStmt( std::list<Label> labels );
+	CompoundStmt( std::list<Statement *> stmts );
 	CompoundStmt( const CompoundStmt &other );
 	virtual ~CompoundStmt();
@@ -61,8 +62,8 @@
 	void push_front( Statement * stmt ) { kids.push_front( stmt ); }
 
-	virtual CompoundStmt *clone() const { return new CompoundStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual CompoundStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual CompoundStmt *clone() const override { return new CompoundStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual CompoundStmt *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -72,8 +73,8 @@
 	NullStmt( std::list<Label> labels );
 
-	virtual NullStmt *clone() const { return new NullStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual NullStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual NullStmt *clone() const override { return new NullStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual NullStmt *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -89,8 +90,8 @@
 	void set_expr( Expression *newValue ) { expr = newValue; }
 
-	virtual ExprStmt *clone() const { return new ExprStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual ExprStmt *clone() const override { return new ExprStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -123,5 +124,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Statement * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -146,8 +147,8 @@
 	void set_elsePart( Statement *newValue ) { elsePart = newValue; }
 
-	virtual IfStmt *clone() const { return new IfStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual IfStmt *clone() const override { return new IfStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -157,5 +158,5 @@
 	std::list<Statement *> statements;
 
-	SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &statements );
+	SwitchStmt( std::list<Label> labels, Expression *condition, const std::list<Statement *> &statements );
 	SwitchStmt( const SwitchStmt &other );
 	virtual ~SwitchStmt();
@@ -166,9 +167,9 @@
 	std::list<Statement *> & get_statements() { return statements; }
 
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-
-	virtual SwitchStmt *clone() const { return new SwitchStmt( *this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+
+	virtual SwitchStmt *clone() const override { return new SwitchStmt( *this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 
 };
@@ -179,5 +180,5 @@
 	std::list<Statement *> stmts;
 
-	CaseStmt( std::list<Label> labels, Expression *conditions, std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError);
+	CaseStmt( std::list<Label> labels, Expression *conditions, const std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError);
 	CaseStmt( const CaseStmt &other );
 	virtual ~CaseStmt();
@@ -194,9 +195,9 @@
 	void set_statements( std::list<Statement *> &newValue ) { stmts = newValue; }
 
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-
-	virtual CaseStmt *clone() const { return new CaseStmt( *this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+
+	virtual CaseStmt *clone() const override { return new CaseStmt( *this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
   private:
 	bool _isDefault;
@@ -221,8 +222,8 @@
 	void set_isDoWhile( bool newValue ) { isDoWhile = newValue; }
 
-	virtual WhileStmt *clone() const { return new WhileStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual WhileStmt *clone() const override { return new WhileStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -247,8 +248,8 @@
 	void set_body( Statement *newValue ) { body = newValue; }
 
-	virtual ForStmt *clone() const { return new ForStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual ForStmt *clone() const override { return new ForStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -276,8 +277,8 @@
 	const char *get_typename() { return brType[ type ]; }
 
-	virtual BranchStmt *clone() const { return new BranchStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual BranchStmt *clone() const override { return new BranchStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
   private:
 	static const char *brType[];
@@ -295,8 +296,8 @@
 	void set_expr( Expression *newValue ) { expr = newValue; }
 
-	virtual ReturnStmt *clone() const { return new ReturnStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual ReturnStmt *clone() const override { return new ReturnStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -319,8 +320,8 @@
 	void set_target( Expression * newTarget ) { target = newTarget; }
 
-	virtual ThrowStmt *clone() const { return new ThrowStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual ThrowStmt *clone() const override { return new ThrowStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -342,8 +343,8 @@
 	void set_finally( FinallyStmt *newValue ) { finallyBlock = newValue; }
 
-	virtual TryStmt *clone() const { return new TryStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual TryStmt *clone() const override { return new TryStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -370,8 +371,8 @@
 	void set_body( Statement *newValue ) { body = newValue; }
 
-	virtual CatchStmt *clone() const { return new CatchStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual CatchStmt *clone() const override { return new CatchStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -387,8 +388,8 @@
 	void set_block( CompoundStmt *newValue ) { block = newValue; }
 
-	virtual FinallyStmt *clone() const { return new FinallyStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual FinallyStmt *clone() const override { return new FinallyStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -424,8 +425,8 @@
 	} orelse;
 
-	virtual WaitForStmt *clone() const { return new WaitForStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual WaitForStmt *clone() const override { return new WaitForStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 
 };
@@ -444,8 +445,8 @@
 	void set_decl( Declaration *newValue ) { decl = newValue; }
 
-	virtual DeclStmt *clone() const { return new DeclStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual DeclStmt *clone() const override { return new DeclStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
 };
 
@@ -466,12 +467,9 @@
 	void set_callStmt( Statement * newValue ) { callStmt = newValue; }
 
-	virtual ImplicitCtorDtorStmt *clone() const { return new ImplicitCtorDtorStmt( *this ); }
-	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 ) const;
-};
-
-
-std::ostream & operator<<( std::ostream & out, const Statement * statement );
+	virtual ImplicitCtorDtorStmt *clone() const override { return new ImplicitCtorDtorStmt( *this ); }
+	virtual void accept( Visitor &v ) override { v.visit( this ); }
+	virtual Statement *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream &os, Indenter indent = {} ) const override;
+};
 
 // Local Variables: //
Index: src/SynTree/TupleExpr.cc
===================================================================
--- src/SynTree/TupleExpr.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/TupleExpr.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -28,5 +28,5 @@
 #include "Type.h"               // for TupleType, Type
 
-UntypedTupleExpr::UntypedTupleExpr( const std::list< Expression * > & exprs, Expression *_aname ) : Expression( _aname ), exprs( exprs ) {
+UntypedTupleExpr::UntypedTupleExpr( const std::list< Expression * > & exprs ) : Expression(), exprs( exprs ) {
 }
 
@@ -39,11 +39,11 @@
 }
 
-void UntypedTupleExpr::print( std::ostream &os, int indent ) const {
+void UntypedTupleExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Untyped Tuple:" << std::endl;
-	printAll( exprs, os, indent+2 );
+	printAll( exprs, os, indent+1 );
 	Expression::print( os, indent );
 }
 
-TupleExpr::TupleExpr( const std::list< Expression * > & exprs, Expression *_aname ) : Expression( _aname ), exprs( exprs ) {
+TupleExpr::TupleExpr( const std::list< Expression * > & exprs ) : Expression(), exprs( exprs ) {
 	set_result( Tuples::makeTupleType( exprs ) );
 }
@@ -57,7 +57,7 @@
 }
 
-void TupleExpr::print( std::ostream &os, int indent ) const {
+void TupleExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Tuple:" << std::endl;
-	printAll( exprs, os, indent+2 );
+	printAll( exprs, os, indent+1 );
 	Expression::print( os, indent );
 }
@@ -78,13 +78,13 @@
 }
 
-void TupleIndexExpr::print( std::ostream &os, int indent ) const {
+void TupleIndexExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Tuple Index Expression, with tuple:" << std::endl;
-	os << std::string( indent+2, ' ' );
-	tuple->print( os, indent+2 );
-	os << std::string( indent+2, ' ' ) << "with index: " << index << std::endl;
+	os << indent+1;
+	tuple->print( os, indent+1 );
+	os << indent+1 << "with index: " << index << std::endl;
 	Expression::print( os, indent );
 }
 
-TupleAssignExpr::TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls, Expression * _aname ) : Expression( _aname ) {
+TupleAssignExpr::TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls ) : Expression() {
 	// convert internally into a StmtExpr which contains the declarations and produces the tuple of the assignments
 	set_result( Tuples::makeTupleType( assigns ) );
@@ -109,8 +109,8 @@
 }
 
-void TupleAssignExpr::print( std::ostream &os, int indent ) const {
+void TupleAssignExpr::print( std::ostream &os, Indenter indent ) const {
 	os << "Tuple Assignment Expression, with stmt expr:" << std::endl;
-	os << std::string( indent+2, ' ' );
-	stmtExpr->print( os, indent+4 );
+	os << indent+1;
+	stmtExpr->print( os, indent+1 );
 	Expression::print( os, indent );
 }
Index: src/SynTree/TupleType.cc
===================================================================
--- src/SynTree/TupleType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/TupleType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -48,8 +48,8 @@
 }
 
-void TupleType::print( std::ostream &os, int indent ) const {
+void TupleType::print( std::ostream &os, Indenter indent ) const {
 	Type::print( os, indent );
 	os << "tuple of types" << std::endl;
-	printAll( types, os, indent+2 );
+	printAll( types, os, indent+1 );
 }
 
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Type.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 11 13:21:25 2017
-// Update Count     : 37
+// Last Modified On : Mon Sep 25 15:16:32 2017
+// Update Count     : 38
 //
 #include "Type.h"
@@ -45,4 +45,6 @@
 	"double _Imaginary",
 	"long double _Imaginary",
+	"__int128",
+	"unsigned __int128",
 };
 
@@ -73,5 +75,5 @@
 	Type * type;
 	ReferenceType * ref;
-	for ( type = this; (ref = dynamic_cast<ReferenceType *>( type )); type = ref->get_base() );
+	for ( type = this; (ref = dynamic_cast<ReferenceType *>( type )); type = ref->base );
 	return type;
 }
@@ -79,14 +81,14 @@
 int Type::referenceDepth() const { return 0; }
 
-void Type::print( std::ostream &os, int indent ) const {
+void Type::print( std::ostream &os, Indenter indent ) const {
 	if ( ! forall.empty() ) {
 		os << "forall" << std::endl;
-		printAll( forall, os, indent + 4 );
-		os << std::string( indent+2, ' ' );
+		printAll( forall, os, indent+1 );
+		os << ++indent;
 	} // if
 
 	if ( ! attributes.empty() ) {
-		os << endl << string( indent+2, ' ' ) << "with attributes" << endl;
-		printAll( attributes, os, indent+4 );
+		os << "with attributes" << endl;
+		printAll( attributes, os, indent+1 );
 	} // if
 
@@ -99,13 +101,4 @@
 const Type::Qualifiers noQualifiers;
 
-std::ostream & operator<<( std::ostream & out, const Type * type ) {
-	if ( type ) {
-		type->print( out );
-	} else {
-		out << "nullptr";
-	} // if
-	return out;
-}
-
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Type.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Wed Aug  9 14:25:00 2017
-// Update Count     : 152
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Sep 25 14:14:01 2017
+// Update Count     : 154
 //
 
@@ -181,5 +181,5 @@
 	virtual void accept( Visitor & v ) = 0;
 	virtual Type *acceptMutator( Mutator & m ) = 0;
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
 };
 
@@ -192,11 +192,11 @@
 	VoidType( const Type::Qualifiers & tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
 
-	virtual unsigned size() const { return 0; };
-	virtual bool isComplete() const { return false; }
-
-	virtual VoidType *clone() const { return new VoidType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual unsigned size() const override { return 0; };
+	virtual bool isComplete() const override { return false; }
+
+	virtual VoidType *clone() const override { return new VoidType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -225,4 +225,6 @@
 		DoubleImaginary,
 		LongDoubleImaginary,
+		SignedInt128,
+		UnsignedInt128,
 		NUMBER_OF_BASIC_TYPES
 	} kind;
@@ -235,8 +237,8 @@
 	void set_kind( Kind newValue ) { kind = newValue; }
 
-	virtual BasicType *clone() const { return new BasicType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual BasicType *clone() const override { return new BasicType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 
 	bool isInteger() const;
@@ -268,10 +270,10 @@
 	bool is_array() const { return isStatic || isVarLen || dimension; }
 
-	virtual bool isComplete() const { return ! isVarLen; }
-
-	virtual PointerType *clone() const { return new PointerType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual bool isComplete() const override { return ! isVarLen; }
+
+	virtual PointerType *clone() const override { return new PointerType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -296,10 +298,13 @@
 	void set_isStatic( bool newValue ) { isStatic = newValue; }
 
-	virtual bool isComplete() const { return ! isVarLen; }
-
-	virtual ArrayType *clone() const { return new ArrayType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	// array types are complete if they have a dimension expression or are
+	// VLAs ('*' in parameter declaration), and incomplete otherwise.
+	// See 6.7.6.2
+	virtual bool isComplete() const override { return dimension || isVarLen; }
+
+	virtual ArrayType *clone() const override { return new ArrayType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -315,15 +320,15 @@
 	void set_base( Type *newValue ) { base = newValue; }
 
-	virtual int referenceDepth() const;
+	virtual int referenceDepth() const override;
 
 	// Since reference types act like value types, their size is the size of the base.
 	// This makes it simple to cast the empty tuple to a reference type, since casts that increase
 	// the number of values are disallowed.
-	virtual unsigned size() const { return base->size(); }
-
-	virtual ReferenceType *clone() const { return new ReferenceType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual unsigned size() const override { return base->size(); }
+
+	virtual ReferenceType *clone() const override { return new ReferenceType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -349,8 +354,8 @@
 	bool isTtype() const;
 
-	virtual FunctionType *clone() const { return new FunctionType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual FunctionType *clone() const override { return new FunctionType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -371,8 +376,8 @@
 	void set_hoistType( bool newValue ) { hoistType = newValue; }
 
-	virtual ReferenceToType *clone() const = 0;
-	virtual void accept( Visitor & v ) = 0;
-	virtual Type *acceptMutator( Mutator & m ) = 0;
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual ReferenceToType *clone() const override = 0;
+	virtual void accept( Visitor & v ) override = 0;
+	virtual Type *acceptMutator( Mutator & m ) override = 0;
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 
 	virtual void lookup( __attribute__((unused)) const std::string & name, __attribute__((unused)) std::list< Declaration* > & foundDecls ) const {}
@@ -398,17 +403,17 @@
 	std::list<TypeDecl*> * get_baseParameters();
 
-	virtual bool isComplete() const;
+	virtual bool isComplete() const override;
 
 	/// Looks up the members of this struct named "name" and places them into "foundDecls".
 	/// Clones declarations into "foundDecls", caller responsible for freeing
-	void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const;
-
-	virtual StructInstType *clone() const { return new StructInstType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const override;
+
+	virtual StructInstType *clone() const override { return new StructInstType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
   private:
-	virtual std::string typeString() const;
+	virtual std::string typeString() const override;
 };
 
@@ -430,17 +435,17 @@
 	std::list< TypeDecl * > * get_baseParameters();
 
-	virtual bool isComplete() const;
+	virtual bool isComplete() const override;
 
 	/// looks up the members of this union named "name" and places them into "foundDecls"
 	/// Clones declarations into "foundDecls", caller responsible for freeing
-	void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const;
-
-	virtual UnionInstType *clone() const { return new UnionInstType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const override;
+
+	virtual UnionInstType *clone() const override { return new UnionInstType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
   private:
-	virtual std::string typeString() const;
+	virtual std::string typeString() const override;
 };
 
@@ -459,11 +464,13 @@
 	void set_baseEnum( EnumDecl *newValue ) { baseEnum = newValue; }
 
-	virtual bool isComplete() const;
-
-	virtual EnumInstType *clone() const { return new EnumInstType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
+	virtual bool isComplete() const override;
+
+	virtual EnumInstType *clone() const override { return new EnumInstType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
   private:
-	virtual std::string typeString() const;
+	virtual std::string typeString() const override;
 };
 
@@ -480,11 +487,11 @@
 	~TraitInstType();
 
-	virtual bool isComplete() const;
-
-	virtual TraitInstType *clone() const { return new TraitInstType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
+	virtual bool isComplete() const override;
+
+	virtual TraitInstType *clone() const override { return new TraitInstType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
   private:
-	virtual std::string typeString() const;
+	virtual std::string typeString() const override;
 };
 
@@ -507,12 +514,12 @@
 	void set_isFtype( bool newValue ) { isFtype = newValue; }
 
-	virtual bool isComplete() const;
-
-	virtual TypeInstType *clone() const { return new TypeInstType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual bool isComplete() const override;
+
+	virtual TypeInstType *clone() const override { return new TypeInstType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
   private:
-	virtual std::string typeString() const;
+	virtual std::string typeString() const override;
 };
 
@@ -530,5 +537,5 @@
 
 	std::list<Type *> & get_types() { return types; }
-	virtual unsigned size() const { return types.size(); };
+	virtual unsigned size() const override { return types.size(); };
 
 	// For now, this is entirely synthetic -- tuple types always have unnamed members.
@@ -539,15 +546,15 @@
 	iterator end() { return types.end(); }
 
-	virtual Type * getComponent( unsigned i ) {
+	virtual Type * getComponent( unsigned i ) override {
 		assertf( i < size(), "TupleType::getComponent: index %d must be less than size %d", i, size() );
 		return *(begin()+i);
 	}
 
-	// virtual bool isComplete() const { return true; } // xxx - not sure if this is right, might need to recursively check complete-ness
-
-	virtual TupleType *clone() const { return new TupleType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	// virtual bool isComplete() const override { return true; } // xxx - not sure if this is right, might need to recursively check complete-ness
+
+	virtual TupleType *clone() const override { return new TupleType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -563,10 +570,10 @@
 	void set_expr( Expression *newValue ) { expr = newValue; }
 
-	virtual bool isComplete() const { assert( false ); return false; }
-
-	virtual TypeofType *clone() const { return new TypeofType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual bool isComplete() const override { assert( false ); return false; }
+
+	virtual TypeofType *clone() const override { return new TypeofType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -592,10 +599,10 @@
 	void set_isType( bool newValue ) { isType = newValue; }
 
-	virtual bool isComplete() const { assert( false ); } // xxx - not sure what to do here
-
-	virtual AttrType *clone() const { return new AttrType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual bool isComplete() const override { assert( false ); } // xxx - not sure what to do here
+
+	virtual AttrType *clone() const override { return new AttrType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -606,10 +613,10 @@
 	VarArgsType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
 
-	virtual bool isComplete() const{ return true; } // xxx - is this right?
-
-	virtual VarArgsType *clone() const { return new VarArgsType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual bool isComplete() const override{ return true; } // xxx - is this right?
+
+	virtual VarArgsType *clone() const override { return new VarArgsType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -620,8 +627,8 @@
 	ZeroType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
 
-	virtual ZeroType *clone() const { return new ZeroType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
+	virtual ZeroType *clone() const override { return new ZeroType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
 };
 
@@ -632,11 +639,9 @@
 	OneType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
 
-	virtual OneType *clone() const { return new OneType( *this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
-};
-
-std::ostream & operator<<( std::ostream & out, const Type * type );
+	virtual OneType *clone() const override { return new OneType( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
+};
 
 // Local Variables: //
Index: src/SynTree/TypeDecl.cc
===================================================================
--- src/SynTree/TypeDecl.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/TypeDecl.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -21,5 +21,5 @@
 #include "Type.h"            // for Type, Type::StorageClasses
 
-TypeDecl::TypeDecl( const std::string &name, Type::StorageClasses scs, Type *type, Kind kind, Type * init ) : Parent( name, scs, type ), init( init ), sized( kind == Any || kind == Ttype ), kind( kind ) {
+TypeDecl::TypeDecl( const std::string &name, Type::StorageClasses scs, Type *type, Kind kind, bool sized, Type * init ) : Parent( name, scs, type ), init( init ), sized( kind == Ttype || sized ), kind( kind ) {
 }
 
@@ -32,18 +32,22 @@
 
 std::string TypeDecl::typeString() const {
-	static const std::string kindNames[] = { "type", "incomplete type", "function type", "tuple type" };
-	return (kind != Any && isComplete() ? "sized " : "") + kindNames[ kind ];
+	static const std::string kindNames[] = { "object type", "function type", "tuple type" };
+	assertf( sizeof(kindNames)/sizeof(kindNames[0]) == DeclarationNode::NoTypeClass-1, "typeString: kindNames is out of sync." );
+	assertf( kind < sizeof(kindNames)/sizeof(kindNames[0]), "TypeDecl's kind is out of bounds." );
+	return (isComplete() ? "sized " : "") + kindNames[ kind ];
 }
 
 std::string TypeDecl::genTypeString() const {
-	static const std::string kindNames[] = { "otype", "dtype", "ftype", "ttype" };
+	static const std::string kindNames[] = { "dtype", "ftype", "ttype" };
+	assertf( sizeof(kindNames)/sizeof(kindNames[0]) == DeclarationNode::NoTypeClass-1, "genTypeString: kindNames is out of sync." );
+	assertf( kind < sizeof(kindNames)/sizeof(kindNames[0]), "TypeDecl's kind is out of bounds." );
 	return kindNames[ kind ];
 }
 
-void TypeDecl::print( std::ostream &os, int indent ) const {
+void TypeDecl::print( std::ostream &os, Indenter indent ) const {
   NamedTypeDecl::print( os, indent );
   if ( init ) {
-    os << std::endl << std::string( indent, ' ' ) << "with type initializer: ";
-    init->print( os, indent + 2 );
+    os << std::endl << indent << "with type initializer: ";
+    init->print( os, indent + 1 );
   }
 }
Index: src/SynTree/TypeExpr.cc
===================================================================
--- src/SynTree/TypeExpr.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/TypeExpr.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -30,5 +30,5 @@
 }
 
-void TypeExpr::print( std::ostream &os, int indent ) const {
+void TypeExpr::print( std::ostream &os, Indenter indent ) const {
 	if ( type ) type->print( os, indent );
 	Expression::print( os, indent );
Index: src/SynTree/TypeSubstitution.cc
===================================================================
--- src/SynTree/TypeSubstitution.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/TypeSubstitution.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -148,5 +148,5 @@
 template< typename TypeClass >
 Type *TypeSubstitution::handleType( TypeClass *type ) {
-	BoundVarsType oldBoundVars( boundVars );
+	ValueGuard<BoundVarsType> oldBoundVars( boundVars );
 	// bind type variables from forall-qualifiers
 	if ( freeOnly ) {
@@ -156,5 +156,4 @@
 	} // if
 	Type *ret = Mutator::mutate( type );
-	boundVars = oldBoundVars;
 	return ret;
 }
@@ -162,5 +161,5 @@
 template< typename TypeClass >
 Type *TypeSubstitution::handleAggregateType( TypeClass *type ) {
-	BoundVarsType oldBoundVars( boundVars );
+	ValueGuard<BoundVarsType> oldBoundVars( boundVars );
 	// bind type variables from forall-qualifiers
 	if ( freeOnly ) {
@@ -177,5 +176,4 @@
 	} // if
 	Type *ret = Mutator::mutate( type );
-	boundVars = oldBoundVars;
 	return ret;
 }
@@ -233,25 +231,15 @@
 }
 
-TypeSubstitution * TypeSubstitution::acceptMutator( Mutator & mutator ) {
-	for ( auto & p : typeEnv ) {
-		p.second = maybeMutate( p.second, mutator );
-	}
-	for ( auto & p : varEnv ) {
-		p.second = maybeMutate( p.second, mutator );
-	}
-	return this;
-}
-
-void TypeSubstitution::print( std::ostream &os, int indent ) const {
-	os << std::string( indent, ' ' ) << "Types:" << std::endl;
+void TypeSubstitution::print( std::ostream &os, Indenter indent ) const {
+	os << indent << "Types:" << std::endl;
 	for ( TypeEnvType::const_iterator i = typeEnv.begin(); i != typeEnv.end(); ++i ) {
-		os << std::string( indent+2, ' ' ) << i->first << " -> ";
-		i->second->print( os, indent+4 );
+		os << indent+1 << i->first << " -> ";
+		i->second->print( os, indent+2 );
 		os << std::endl;
 	} // for
-	os << std::string( indent, ' ' ) << "Non-types:" << std::endl;
+	os << indent << "Non-types:" << std::endl;
 	for ( VarEnvType::const_iterator i = varEnv.begin(); i != varEnv.end(); ++i ) {
-		os << std::string( indent+2, ' ' ) << i->first << " -> ";
-		i->second->print( os, indent+4 );
+		os << indent+1 << i->first << " -> ";
+		i->second->print( os, indent+2 );
 		os << std::endl;
 	} // for
Index: src/SynTree/TypeSubstitution.h
===================================================================
--- src/SynTree/TypeSubstitution.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/TypeSubstitution.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -59,7 +59,7 @@
 	void normalize();
 
-	TypeSubstitution * acceptMutator( Mutator & mutator );
+	TypeSubstitution * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 
-	void print( std::ostream &os, int indent = 0 ) const;
+	void print( std::ostream &os, Indenter indent = {} ) const;
 	TypeSubstitution *clone() const { return new TypeSubstitution( *this ); }
   private:
@@ -89,4 +89,9 @@
 
 	void initialize( const TypeSubstitution &src, TypeSubstitution &dest );
+
+	friend class Mutator;
+
+	template<typename pass_type>
+	friend class PassVisitor;
 
 	typedef std::map< std::string, Type* > TypeEnvType;
Index: src/SynTree/TypeofType.cc
===================================================================
--- src/SynTree/TypeofType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/TypeofType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// TypeofType.cc -- 
+// TypeofType.cc --
 //
 // Author           : Richard C. Bilson
@@ -33,5 +33,5 @@
 }
 
-void TypeofType::print( std::ostream &os, int indent ) const {
+void TypeofType::print( std::ostream &os, Indenter indent ) const {
 	Type::print( os, indent );
 	os << "type-of expression ";
Index: src/SynTree/VarArgsType.cc
===================================================================
--- src/SynTree/VarArgsType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/VarArgsType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -25,5 +25,5 @@
 VarArgsType::VarArgsType( Type::Qualifiers tq, const std::list< Attribute * > & attributes ) : Type( tq, attributes ) {}
 
-void VarArgsType::print( std::ostream &os, int indent ) const {
+void VarArgsType::print( std::ostream &os, Indenter indent ) const {
 	Type::print( os, indent );
 	os << "builtin var args pack";
Index: src/SynTree/VarExprReplacer.h
===================================================================
--- src/SynTree/VarExprReplacer.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/VarExprReplacer.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -29,5 +29,5 @@
 private:
 	const DeclMap & declMap;
-  bool debug;
+	bool debug;
 public:
 	VarExprReplacer( const DeclMap & declMap, bool debug = false );
@@ -35,4 +35,9 @@
 	// replace variable with new node from decl map
 	virtual void visit( VariableExpr * varExpr );
+
+	static void replace( BaseSyntaxNode * node, const DeclMap & declMap, bool debug = false ) {
+		VarExprReplacer replacer( declMap, debug );
+		maybeAccept( node, replacer );
+	}
 };
 
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Visitor.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -17,4 +17,5 @@
 #include <list>           // for list
 
+#include "Attribute.h"    // for Attribute
 #include "Constant.h"     // for Constant
 #include "Declaration.h"  // for DeclarationWithType, ObjectDecl, Declaration
@@ -35,4 +36,5 @@
 	maybeAccept( objectDecl->get_init(), *this );
 	maybeAccept( objectDecl->get_bitfieldWidth(), *this );
+	acceptAll( objectDecl->attributes, *this );
 }
 
@@ -40,4 +42,5 @@
 	maybeAccept( functionDecl->get_functionType(), *this );
 	maybeAccept( functionDecl->get_statements(), *this );
+	acceptAll( functionDecl->attributes, *this );
 }
 
@@ -487,8 +490,13 @@
 
 
-void Visitor::visit( __attribute__((unused)) Subrange *subrange ) {}
-
-
-void Visitor::visit( __attribute__((unused)) Constant *constant ) {}
+void Visitor::visit( Subrange * ) {}
+
+
+void Visitor::visit( Constant * ) {}
+
+void Visitor::visit( Attribute * attribute ) {
+	acceptAll( attribute->parameters, *this );
+}
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/Visitor.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -25,96 +25,98 @@
   public:
 	// visit: Default implementation of all functions visits the children
-    // of the given syntax node, but performs no other action.
+	// of the given syntax node, but performs no other action.
 
-	virtual void visit( ObjectDecl *objectDecl );
-	virtual void visit( FunctionDecl *functionDecl );
-	virtual void visit( StructDecl *aggregateDecl );
-	virtual void visit( UnionDecl *aggregateDecl );
-	virtual void visit( EnumDecl *aggregateDecl );
-	virtual void visit( TraitDecl *aggregateDecl );
-	virtual void visit( TypeDecl *typeDecl );
-	virtual void visit( TypedefDecl *typeDecl );
-	virtual void visit( AsmDecl *asmDecl );
+	virtual void visit( ObjectDecl * objectDecl );
+	virtual void visit( FunctionDecl * functionDecl );
+	virtual void visit( StructDecl * aggregateDecl );
+	virtual void visit( UnionDecl * aggregateDecl );
+	virtual void visit( EnumDecl * aggregateDecl );
+	virtual void visit( TraitDecl * aggregateDecl );
+	virtual void visit( TypeDecl * typeDecl );
+	virtual void visit( TypedefDecl * typeDecl );
+	virtual void visit( AsmDecl * asmDecl );
 
-	virtual void visit( CompoundStmt *compoundStmt );
-	virtual void visit( ExprStmt *exprStmt );
-	virtual void visit( AsmStmt *asmStmt );
-	virtual void visit( IfStmt *ifStmt );
-	virtual void visit( WhileStmt *whileStmt );
-	virtual void visit( ForStmt *forStmt );
-	virtual void visit( SwitchStmt *switchStmt );
-	virtual void visit( CaseStmt *caseStmt );
-	virtual void visit( BranchStmt *branchStmt );
-	virtual void visit( ReturnStmt *returnStmt );
-	virtual void visit( ThrowStmt *throwStmt );
-	virtual void visit( TryStmt *tryStmt );
-	virtual void visit( CatchStmt *catchStmt );
-	virtual void visit( FinallyStmt *finallyStmt );
-	virtual void visit( WaitForStmt *waitforStmt );
-	virtual void visit( NullStmt *nullStmt );
-	virtual void visit( DeclStmt *declStmt );
-	virtual void visit( ImplicitCtorDtorStmt *impCtorDtorStmt );
+	virtual void visit( CompoundStmt * compoundStmt );
+	virtual void visit( ExprStmt * exprStmt );
+	virtual void visit( AsmStmt * asmStmt );
+	virtual void visit( IfStmt * ifStmt );
+	virtual void visit( WhileStmt * whileStmt );
+	virtual void visit( ForStmt * forStmt );
+	virtual void visit( SwitchStmt * switchStmt );
+	virtual void visit( CaseStmt * caseStmt );
+	virtual void visit( BranchStmt * branchStmt );
+	virtual void visit( ReturnStmt * returnStmt );
+	virtual void visit( ThrowStmt * throwStmt );
+	virtual void visit( TryStmt * tryStmt );
+	virtual void visit( CatchStmt * catchStmt );
+	virtual void visit( FinallyStmt * finallyStmt );
+	virtual void visit( WaitForStmt * waitforStmt );
+	virtual void visit( NullStmt * nullStmt );
+	virtual void visit( DeclStmt * declStmt );
+	virtual void visit( ImplicitCtorDtorStmt * impCtorDtorStmt );
 
-	virtual void visit( ApplicationExpr *applicationExpr );
-	virtual void visit( UntypedExpr *untypedExpr );
-	virtual void visit( NameExpr *nameExpr );
-	virtual void visit( CastExpr *castExpr );
-	virtual void visit( VirtualCastExpr *castExpr );
-	virtual void visit( AddressExpr *addressExpr );
-	virtual void visit( LabelAddressExpr *labAddressExpr );
-	virtual void visit( UntypedMemberExpr *memberExpr );
-	virtual void visit( MemberExpr *memberExpr );
-	virtual void visit( VariableExpr *variableExpr );
-	virtual void visit( ConstantExpr *constantExpr );
-	virtual void visit( SizeofExpr *sizeofExpr );
-	virtual void visit( AlignofExpr *alignofExpr );
-	virtual void visit( UntypedOffsetofExpr *offsetofExpr );
-	virtual void visit( OffsetofExpr *offsetofExpr );
-	virtual void visit( OffsetPackExpr *offsetPackExpr );
-	virtual void visit( AttrExpr *attrExpr );
-	virtual void visit( LogicalExpr *logicalExpr );
-	virtual void visit( ConditionalExpr *conditionalExpr );
-	virtual void visit( CommaExpr *commaExpr );
-	virtual void visit( TypeExpr *typeExpr );
-	virtual void visit( AsmExpr *asmExpr );
-	virtual void visit( ImplicitCopyCtorExpr *impCpCtorExpr );
-	virtual void visit( ConstructorExpr * ctorExpr );
-	virtual void visit( CompoundLiteralExpr *compLitExpr );
-	virtual void visit( RangeExpr *rangeExpr );
-	virtual void visit( UntypedTupleExpr *tupleExpr );
-	virtual void visit( TupleExpr *tupleExpr );
-	virtual void visit( TupleIndexExpr *tupleExpr );
-	virtual void visit( TupleAssignExpr *assignExpr );
-	virtual void visit( StmtExpr * stmtExpr );
-	virtual void visit( UniqueExpr * uniqueExpr );
-	virtual void visit( UntypedInitExpr * initExpr );
-	virtual void visit( InitExpr * initExpr );
+	virtual void visit( ApplicationExpr * applicationExpr );
+	virtual void visit( UntypedExpr * untypedExpr );
+	virtual void visit( NameExpr * nameExpr );
+	virtual void visit( CastExpr * castExpr );
+	virtual void visit( VirtualCastExpr * castExpr );
+	virtual void visit( AddressExpr * addressExpr );
+	virtual void visit( LabelAddressExpr * labAddressExpr );
+	virtual void visit( UntypedMemberExpr * memberExpr );
+	virtual void visit( MemberExpr * memberExpr );
+	virtual void visit( VariableExpr * variableExpr );
+	virtual void visit( ConstantExpr * constantExpr );
+	virtual void visit( SizeofExpr * sizeofExpr );
+	virtual void visit( AlignofExpr * alignofExpr );
+	virtual void visit( UntypedOffsetofExpr * offsetofExpr );
+	virtual void visit( OffsetofExpr * offsetofExpr );
+	virtual void visit( OffsetPackExpr * offsetPackExpr );
+	virtual void visit( AttrExpr * attrExpr );
+	virtual void visit( LogicalExpr * logicalExpr );
+	virtual void visit( ConditionalExpr * conditionalExpr );
+	virtual void visit( CommaExpr * commaExpr );
+	virtual void visit( TypeExpr * typeExpr );
+	virtual void visit( AsmExpr * asmExpr );
+	virtual void visit( ImplicitCopyCtorExpr * impCpCtorExpr );
+	virtual void visit( ConstructorExpr *  ctorExpr );
+	virtual void visit( CompoundLiteralExpr * compLitExpr );
+	virtual void visit( RangeExpr * rangeExpr );
+	virtual void visit( UntypedTupleExpr * tupleExpr );
+	virtual void visit( TupleExpr * tupleExpr );
+	virtual void visit( TupleIndexExpr * tupleExpr );
+	virtual void visit( TupleAssignExpr * assignExpr );
+	virtual void visit( StmtExpr *  stmtExpr );
+	virtual void visit( UniqueExpr *  uniqueExpr );
+	virtual void visit( UntypedInitExpr *  initExpr );
+	virtual void visit( InitExpr *  initExpr );
 
-	virtual void visit( VoidType *basicType );
-	virtual void visit( BasicType *basicType );
-	virtual void visit( PointerType *pointerType );
-	virtual void visit( ArrayType *arrayType );
-	virtual void visit( ReferenceType *refType );
-	virtual void visit( FunctionType *functionType );
-	virtual void visit( StructInstType *aggregateUseType );
-	virtual void visit( UnionInstType *aggregateUseType );
-	virtual void visit( EnumInstType *aggregateUseType );
-	virtual void visit( TraitInstType *aggregateUseType );
-	virtual void visit( TypeInstType *aggregateUseType );
-	virtual void visit( TupleType *tupleType );
-	virtual void visit( TypeofType *typeofType );
-	virtual void visit( AttrType *attrType );
-	virtual void visit( VarArgsType *varArgsType );
-	virtual void visit( ZeroType *zeroType );
-	virtual void visit( OneType *oneType );
+	virtual void visit( VoidType * basicType );
+	virtual void visit( BasicType * basicType );
+	virtual void visit( PointerType * pointerType );
+	virtual void visit( ArrayType * arrayType );
+	virtual void visit( ReferenceType * refType );
+	virtual void visit( FunctionType * functionType );
+	virtual void visit( StructInstType * aggregateUseType );
+	virtual void visit( UnionInstType * aggregateUseType );
+	virtual void visit( EnumInstType * aggregateUseType );
+	virtual void visit( TraitInstType * aggregateUseType );
+	virtual void visit( TypeInstType * aggregateUseType );
+	virtual void visit( TupleType * tupleType );
+	virtual void visit( TypeofType * typeofType );
+	virtual void visit( AttrType * attrType );
+	virtual void visit( VarArgsType * varArgsType );
+	virtual void visit( ZeroType * zeroType );
+	virtual void visit( OneType * oneType );
 
-	virtual void visit( Designation *designation );
-	virtual void visit( SingleInit *singleInit );
-	virtual void visit( ListInit *listInit );
-	virtual void visit( ConstructorInit *ctorInit );
+	virtual void visit( Designation * designation );
+	virtual void visit( SingleInit * singleInit );
+	virtual void visit( ListInit * listInit );
+	virtual void visit( ConstructorInit * ctorInit );
 
-	virtual void visit( Subrange *subrange );
+	virtual void visit( Subrange * subrange );
 
-	virtual void visit( Constant *constant );
+	virtual void visit( Constant * constant );
+
+	virtual void visit( Attribute * attribute );
   private:
 	virtual void handleAggregateDecl( AggregateDecl *aggregateDecl );
Index: src/SynTree/VoidType.cc
===================================================================
--- src/SynTree/VoidType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/VoidType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// VoidType.cc -- 
+// VoidType.cc --
 //
 // Author           : Richard C. Bilson
@@ -24,5 +24,5 @@
 }
 
-void VoidType::print( std::ostream &os, int indent ) const {
+void VoidType::print( std::ostream &os, Indenter indent ) const {
 	Type::print( os, indent );
 	os << "void ";
Index: src/SynTree/ZeroOneType.cc
===================================================================
--- src/SynTree/ZeroOneType.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/ZeroOneType.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -25,5 +25,5 @@
 ZeroType::ZeroType( Type::Qualifiers tq, const std::list< Attribute * > & attributes ) : Type( tq, attributes ) {}
 
-void ZeroType::print( std::ostream &os, __attribute__((unused)) int indent ) const {
+void ZeroType::print( std::ostream &os, Indenter ) const {
 	os << "zero_t";
 }
@@ -33,5 +33,5 @@
 OneType::OneType( Type::Qualifiers tq, const std::list< Attribute * > & attributes ) : Type( tq, attributes ) {}
 
-void OneType::print( std::ostream &os, __attribute__((unused)) int indent ) const {
+void OneType::print( std::ostream &os, Indenter ) const {
 	os << "one_t";
 }
Index: src/SynTree/module.mk
===================================================================
--- src/SynTree/module.mk	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/SynTree/module.mk	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -48,5 +48,4 @@
        SynTree/Visitor.cc \
        SynTree/Mutator.cc \
-       SynTree/AddStmtVisitor.cc \
        SynTree/TypeSubstitution.cc \
        SynTree/Attribute.cc \
Index: src/Tuples/TupleAssignment.cc
===================================================================
--- src/Tuples/TupleAssignment.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Tuples/TupleAssignment.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -95,5 +95,5 @@
 	bool isTuple( Expression *expr ) {
 		if ( ! expr ) return false;
-		assert( expr->has_result() );
+		assert( expr->result );
 		return dynamic_cast< TupleType * >( expr->get_result()->stripReferences() );
 	}
@@ -285,5 +285,5 @@
 
 	ObjectDecl * TupleAssignSpotter::Matcher::newObject( UniqueName & namer, Expression * expr ) {
-		assert( expr->has_result() && ! expr->get_result()->isVoid() );
+		assert( expr->result && ! expr->get_result()->isVoid() );
 		ObjectDecl * ret = new ObjectDecl( namer.newName(), Type::StorageClasses(), LinkageSpec::Cforall, nullptr, expr->get_result()->clone(), new SingleInit( expr->clone() ) );
 		// if expression type is a reference, don't need to construct anything, a simple initializer is sufficient.
@@ -295,4 +295,5 @@
 			ctorInit->accept( rm );
 		}
+		PRINT( std::cerr << "new object: " << ret << std::endl; )
 		return ret;
 	}
Index: src/Tuples/TupleExpansion.cc
===================================================================
--- src/Tuples/TupleExpansion.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/Tuples/TupleExpansion.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -21,5 +21,4 @@
 #include "Common/ScopedMap.h"     // for ScopedMap
 #include "Common/utility.h"       // for CodeLocation
-#include "GenPoly/DeclMutator.h"  // for DeclMutator
 #include "InitTweak/InitTweak.h"  // for getFunction
 #include "Parser/LinkageSpec.h"   // for Spec, C, Intrinsic
@@ -205,5 +204,5 @@
 			decl->set_body( true );
 			for ( size_t i = 0; i < tupleSize; ++i ) {
-				TypeDecl * tyParam = new TypeDecl( toString( "tuple_param_", tupleSize, "_", i ), Type::StorageClasses(), nullptr, TypeDecl::Any );
+				TypeDecl * tyParam = new TypeDecl( toString( "tuple_param_", tupleSize, "_", i ), Type::StorageClasses(), nullptr, TypeDecl::Dtype, true );
 				decl->get_members().push_back( new ObjectDecl( toString("field_", i ), Type::StorageClasses(), LinkageSpec::C, nullptr, new TypeInstType( Type::Qualifiers(), tyParam->get_name(), tyParam ), nullptr ) );
 				decl->get_parameters().push_back( tyParam );
Index: src/benchmark/CorCtxSwitch.c
===================================================================
--- src/benchmark/CorCtxSwitch.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,37 +1,0 @@
-#include <fstream>
-#include <stdlib>
-#include <thread>
-
-#include "bench.h"
-
-coroutine GreatSuspender {};
-
-void ?{}( GreatSuspender * this ) {
-	prime(this);
-}
-
-void main( GreatSuspender * this )
-{
-	while( true ) {
-		suspend();
-	}
-}
-
-void resumer( GreatSuspender * this, const unsigned int NoOfTimes ) {
-	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
-		resume( this );
-	}
-}
-
-int main() {
-	const unsigned int NoOfTimes = N;
-	long long int StartTime, EndTime;
-
-	GreatSuspender s;
-
-	StartTime = Time();
-	resumer( &s, NoOfTimes );
-	EndTime = Time();
-
-	sout | ( EndTime - StartTime ) / NoOfTimes | endl;
-}
Index: src/benchmark/Makefile.am
===================================================================
--- src/benchmark/Makefile.am	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/benchmark/Makefile.am	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -19,6 +19,14 @@
 AM_CFLAGS = -g -Wall -Wno-unused-function -O2
 CC = @CFA_BINDIR@/@CFA_NAME@
+TOOLSDIR = ${abs_top_srcdir}/tools/
+REPEAT   = ${TOOLSDIR}repeat
+STATS    = ${TOOLSDIR}stat.py
+repeats  = 30
 
-noinst_PROGRAMS = bench$(EXEEXT) ctxswitch-coroutine$(EXEEXT) ctxswitch-thread$(EXEEXT) sched-int$(EXEEXT) monitor$(EXEEXT) csv-data$(EXEEXT)
+.NOTPARALLEL:
+
+noinst_PROGRAMS =
+
+all : ctxswitch$(EXEEXT) mutex$(EXEEXT) signal$(EXEEXT) waitfor$(EXEEXT) creation$(EXEEXT)
 
 bench$(EXEEXT) :
@@ -30,42 +38,131 @@
 	rm -f ./a.out ;
 
-ctxswitch-coroutine$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 CorCtxSwitch.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-ctxswitch-thread$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 ThrdCtxSwitch.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-sched-int$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 SchedInt.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-monitor$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 Monitor.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
 csv-data$(EXEEXT):
 	@${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=50000000 csv-data.c
 	@./a.out
 	@rm -f ./a.out
+
+## =========================================================================================================
+ctxswitch$(EXEEXT): \
+	ctxswitch-pthread.run		\
+	ctxswitch-cfa_coroutine.run	\
+	ctxswitch-cfa_thread.run	\
+	ctxswitch-upp_coroutine.run	\
+	ctxswitch-upp_thread.run
+
+ctxswitch-cfa_coroutine$(EXEEXT):
+	${CC}        ctxswitch/cfa_cor.c   -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-cfa_thread$(EXEEXT):
+	${CC}        ctxswitch/cfa_thrd.c  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-upp_coroutine$(EXEEXT):
+	u++          ctxswitch/upp_cor.cc  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-upp_thread$(EXEEXT):
+	u++          ctxswitch/upp_thrd.cc -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-pthread$(EXEEXT):
+	@BACKEND_CC@ ctxswitch/pthreads.c  -DBENCH_N=50000000  -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
+mutex$(EXEEXT) :\
+	mutex-function.run	\
+	mutex-pthread_lock.run	\
+	mutex-upp.run		\
+	mutex-cfa1.run		\
+	mutex-cfa2.run		\
+	mutex-cfa4.run
+
+mutex-function$(EXEEXT):
+	@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-pthread_lock$(EXEEXT):
+	@BACKEND_CC@ mutex/pthreads.c    -DBENCH_N=50000000    -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-upp$(EXEEXT):
+	u++          mutex/upp.cc        -DBENCH_N=50000000    -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa1$(EXEEXT):
+	${CC}        mutex/cfa1.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa2$(EXEEXT):
+	${CC}        mutex/cfa2.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa4$(EXEEXT):
+	${CC}        mutex/cfa4.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
+signal$(EXEEXT) :\
+	signal-upp.run		\
+	signal-cfa1.run		\
+	signal-cfa2.run		\
+	signal-cfa4.run
+
+signal-upp$(EXEEXT):
+	u++          schedint/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa1$(EXEEXT):
+	${CC}        schedint/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa2$(EXEEXT):
+	${CC}        schedint/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa4$(EXEEXT):
+	${CC}        schedint/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
+waitfor$(EXEEXT) :\
+	waitfor-upp.run		\
+	waitfor-cfa1.run		\
+	waitfor-cfa2.run		\
+	waitfor-cfa4.run
+
+waitfor-upp$(EXEEXT):
+	u++          schedext/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa1$(EXEEXT):
+	${CC}        schedext/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa2$(EXEEXT):
+	${CC}        schedext/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa4$(EXEEXT):
+	${CC}        schedext/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
+creation$(EXEEXT) :\
+	creation-pthread.run		\
+	creation-cfa_coroutine.run	\
+	creation-cfa_thread.run		\
+	creation-upp_coroutine.run	\
+	creation-upp_thread.run
+
+creation-cfa_coroutine$(EXEEXT):
+	${CC}        creation/cfa_cor.c   -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-cfa_thread$(EXEEXT):
+	${CC}        creation/cfa_thrd.c  -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-upp_coroutine$(EXEEXT):
+	u++          creation/upp_cor.cc  -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-upp_thread$(EXEEXT):
+	u++          creation/upp_thrd.cc -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-pthread$(EXEEXT):
+	@BACKEND_CC@ creation/pthreads.c  -DBENCH_N=250000     -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
+
+%.run : %$(EXEEXT) ${REPEAT}
+	@rm -f .result.log
+	@echo "------------------------------------------------------"
+	@echo $<
+	@${REPEAT} ${repeats} ./a.out | tee -a .result.log
+	@${STATS} .result.log
+	@echo "------------------------------------------------------"
+	@rm -f a.out .result.log
+
+${REPEAT} :
+	@+make -C ${TOOLSDIR} repeat
Index: src/benchmark/Makefile.in
===================================================================
--- src/benchmark/Makefile.in	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/benchmark/Makefile.in	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -92,4 +92,5 @@
 build_triplet = @build@
 host_triplet = @host@
+noinst_PROGRAMS =
 subdir = src/benchmark
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -103,22 +104,4 @@
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-bench_SOURCES = bench.c
-bench_OBJECTS = bench.$(OBJEXT)
-bench_LDADD = $(LDADD)
-csv_data_SOURCES = csv-data.c
-csv_data_OBJECTS = csv-data.$(OBJEXT)
-csv_data_LDADD = $(LDADD)
-ctxswitch_coroutine_SOURCES = ctxswitch-coroutine.c
-ctxswitch_coroutine_OBJECTS = ctxswitch-coroutine.$(OBJEXT)
-ctxswitch_coroutine_LDADD = $(LDADD)
-ctxswitch_thread_SOURCES = ctxswitch-thread.c
-ctxswitch_thread_OBJECTS = ctxswitch-thread.$(OBJEXT)
-ctxswitch_thread_LDADD = $(LDADD)
-monitor_SOURCES = monitor.c
-monitor_OBJECTS = monitor.$(OBJEXT)
-monitor_LDADD = $(LDADD)
-sched_int_SOURCES = sched-int.c
-sched_int_OBJECTS = sched-int.$(OBJEXT)
-sched_int_LDADD = $(LDADD)
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -133,24 +116,6 @@
 am__v_at_0 = @
 am__v_at_1 = 
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/automake/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC      " $@;
-am__v_CC_1 = 
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD    " $@;
-am__v_CCLD_1 = 
-SOURCES = bench.c csv-data.c ctxswitch-coroutine.c ctxswitch-thread.c \
-	monitor.c sched-int.c
-DIST_SOURCES = bench.c csv-data.c ctxswitch-coroutine.c \
-	ctxswitch-thread.c monitor.c sched-int.c
+SOURCES =
+DIST_SOURCES =
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -159,23 +124,5 @@
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
@@ -302,9 +249,11 @@
 top_srcdir = @top_srcdir@
 AM_CFLAGS = -g -Wall -Wno-unused-function -O2
-noinst_PROGRAMS = bench$(EXEEXT) ctxswitch-coroutine$(EXEEXT) ctxswitch-thread$(EXEEXT) sched-int$(EXEEXT) monitor$(EXEEXT) csv-data$(EXEEXT)
+TOOLSDIR = ${abs_top_srcdir}/tools/
+REPEAT = ${TOOLSDIR}repeat
+STATS = ${TOOLSDIR}stat.py
+repeats = 30
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .o .obj
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
@@ -339,85 +288,10 @@
 clean-noinstPROGRAMS:
 	-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bench.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csv-data.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctxswitch-coroutine.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctxswitch-thread.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monitor.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sched-int.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-ID: $(am__tagged_files)
-	$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	set x; \
-	here=`pwd`; \
-	$(am__define_uniq_tagged_files); \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: ctags-am
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	$(am__define_uniq_tagged_files); \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
-	list='$(am__tagged_files)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
 
 distdir: $(DISTFILES)
@@ -490,8 +364,6 @@
 
 distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
+distclean-am: clean-am distclean-generic
 
 dvi: dvi-am
@@ -536,5 +408,4 @@
 
 maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -542,5 +413,5 @@
 mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
+mostlyclean-am: mostlyclean-generic
 
 pdf: pdf-am
@@ -556,19 +427,22 @@
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-	clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
-	distclean-compile distclean-generic distclean-tags distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
+.PHONY: all all-am check check-am clean clean-generic \
+	clean-noinstPROGRAMS cscopelist-am ctags-am distclean \
+	distclean-generic distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \
 	uninstall-am
 
 .PRECIOUS: Makefile
 
+
+.NOTPARALLEL:
+
+all : ctxswitch$(EXEEXT) mutex$(EXEEXT) signal$(EXEEXT) waitfor$(EXEEXT) creation$(EXEEXT)
 
 bench$(EXEEXT) :
@@ -580,40 +454,4 @@
 	rm -f ./a.out ;
 
-ctxswitch-coroutine$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 CorCtxSwitch.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-ctxswitch-thread$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 ThrdCtxSwitch.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-sched-int$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 SchedInt.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
-monitor$(EXEEXT):
-	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 Monitor.c
-	@rm -f .result.log
-	@for number in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do \
-                ./a.out | tee -a .result.log ; \
-        done
-	@./stat.py .result.log
-	@rm -f a.out .result.log
-
 csv-data$(EXEEXT):
 	@${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=50000000 csv-data.c
@@ -621,4 +459,122 @@
 	@rm -f ./a.out
 
+ctxswitch$(EXEEXT): \
+	ctxswitch-pthread.run		\
+	ctxswitch-cfa_coroutine.run	\
+	ctxswitch-cfa_thread.run	\
+	ctxswitch-upp_coroutine.run	\
+	ctxswitch-upp_thread.run
+
+ctxswitch-cfa_coroutine$(EXEEXT):
+	${CC}        ctxswitch/cfa_cor.c   -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-cfa_thread$(EXEEXT):
+	${CC}        ctxswitch/cfa_thrd.c  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-upp_coroutine$(EXEEXT):
+	u++          ctxswitch/upp_cor.cc  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-upp_thread$(EXEEXT):
+	u++          ctxswitch/upp_thrd.cc -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-pthread$(EXEEXT):
+	@BACKEND_CC@ ctxswitch/pthreads.c  -DBENCH_N=50000000  -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex$(EXEEXT) :\
+	mutex-function.run	\
+	mutex-pthread_lock.run	\
+	mutex-upp.run		\
+	mutex-cfa1.run		\
+	mutex-cfa2.run		\
+	mutex-cfa4.run
+
+mutex-function$(EXEEXT):
+	@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-pthread_lock$(EXEEXT):
+	@BACKEND_CC@ mutex/pthreads.c    -DBENCH_N=50000000    -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-upp$(EXEEXT):
+	u++          mutex/upp.cc        -DBENCH_N=50000000    -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa1$(EXEEXT):
+	${CC}        mutex/cfa1.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa2$(EXEEXT):
+	${CC}        mutex/cfa2.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa4$(EXEEXT):
+	${CC}        mutex/cfa4.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal$(EXEEXT) :\
+	signal-upp.run		\
+	signal-cfa1.run		\
+	signal-cfa2.run		\
+	signal-cfa4.run
+
+signal-upp$(EXEEXT):
+	u++          schedint/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa1$(EXEEXT):
+	${CC}        schedint/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa2$(EXEEXT):
+	${CC}        schedint/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa4$(EXEEXT):
+	${CC}        schedint/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor$(EXEEXT) :\
+	waitfor-upp.run		\
+	waitfor-cfa1.run		\
+	waitfor-cfa2.run		\
+	waitfor-cfa4.run
+
+waitfor-upp$(EXEEXT):
+	u++          schedext/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa1$(EXEEXT):
+	${CC}        schedext/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa2$(EXEEXT):
+	${CC}        schedext/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa4$(EXEEXT):
+	${CC}        schedext/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation$(EXEEXT) :\
+	creation-pthread.run		\
+	creation-cfa_coroutine.run	\
+	creation-cfa_thread.run		\
+	creation-upp_coroutine.run	\
+	creation-upp_thread.run
+
+creation-cfa_coroutine$(EXEEXT):
+	${CC}        creation/cfa_cor.c   -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-cfa_thread$(EXEEXT):
+	${CC}        creation/cfa_thrd.c  -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-upp_coroutine$(EXEEXT):
+	u++          creation/upp_cor.cc  -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-upp_thread$(EXEEXT):
+	u++          creation/upp_thrd.cc -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-pthread$(EXEEXT):
+	@BACKEND_CC@ creation/pthreads.c  -DBENCH_N=250000     -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+%.run : %$(EXEEXT) ${REPEAT}
+	@rm -f .result.log
+	@echo "------------------------------------------------------"
+	@echo $<
+	@${REPEAT} ${repeats} ./a.out | tee -a .result.log
+	@${STATS} .result.log
+	@echo "------------------------------------------------------"
+	@rm -f a.out .result.log
+
+${REPEAT} :
+	@+make -C ${TOOLSDIR} repeat
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
Index: src/benchmark/SchedInt.c
===================================================================
--- src/benchmark/SchedInt.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,83 +1,0 @@
-#include <fstream>
-#include <stdlib>
-#include <thread>
-
-#include "bench.h"
-
-condition condA; 
-condition condB;
-condition condC;
-condition condD;
-
-monitor mon_t {};
-
-mon_t mon1, mon2;
-
-thread thrdA {};
-thread thrdB {};
-thread thrdC {};
-thread thrdD {};
-
-//-------------------------------------------------------------------
-// 1 monitor signal cycle
-void sideA( mon_t * mutex a ) {
-	long long int StartTime, EndTime;
-
-	StartTime = Time();
-	for( int i = 0;; i++ ) {
-		signal(&condA);
-		if( i > N ) break;
-		wait(&condB);
-	}
-	EndTime = Time();
-
-	sout | ( EndTime - StartTime ) / N;
-}
-
-void sideB( mon_t * mutex a ) {
-	for( int i = 0;; i++ ) {
-		signal(&condB);
-		if( i > N ) break;
-		wait(&condA);
-	}
-}
-
-//-------------------------------------------------------------------
-// 2 monitor signal cycle
-void sideC( mon_t * mutex a, mon_t * mutex b ) {
-	long long int StartTime, EndTime;
-
-	StartTime = Time();
-	for( int i = 0;; i++ ) {
-		signal(&condC);
-		if( i > N ) break;
-		wait(&condD);
-	}
-	EndTime = Time();
-
-	sout | ( EndTime - StartTime ) / N | endl;
-}
-
-void sideD( mon_t * mutex a, mon_t * mutex b ) {
-	for( int i = 0;; i++ ) {
-		signal(&condD);
-		if( i > N ) break;
-		wait(&condC);
-	}
-}
-
-void main( thrdA * this ) { sideA( &mon1 ); }
-void main( thrdB * this ) { sideB( &mon1 ); }
-void main( thrdC * this ) { sideC( &mon1, &mon2 ); }
-void main( thrdD * this ) { sideD( &mon1, &mon2 ); }
-
-int main() {
-	{
-		thrdA a;
-		thrdB b;
-	}
-	{
-		thrdC c;
-		thrdD d;
-	}
-}
Index: src/benchmark/ThrdCtxSwitch.c
===================================================================
--- src/benchmark/ThrdCtxSwitch.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,18 +1,0 @@
-#include <fstream>
-#include <stdlib>
-#include <thread>
-
-#include "bench.h"
-
-int main() {
-	const unsigned int NoOfTimes = N;
-	long long int StartTime, EndTime;
-
-	StartTime = Time();
-	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
-		yield();
-	}
-	EndTime = Time();
-
-	sout | ( EndTime - StartTime ) / NoOfTimes | endl;
-}
Index: src/benchmark/bench.h
===================================================================
--- src/benchmark/bench.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/benchmark/bench.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -1,12 +1,17 @@
 #pragma once
 
+#if defined(__CFORALL__)
 extern "C" {
+#endif
+	#include <stdlib.h>
 	#include <unistd.h>					// sysconf
 	#include <sys/times.h>					// times
 	#include <time.h>
+#if defined(__CFORALL__)
 }
+#endif
 
-inline unsigned long long int Time() {
-    timespec ts;
+static inline unsigned long long int Time() {
+    struct timespec ts;
     clock_gettime(
 #if defined( __linux__ )
@@ -23,7 +28,20 @@
 } // Time
 
-#ifndef N
-#define N 10000000
+#ifndef BENCH_N
+#define BENCH_N 500 //10000000
 #endif
+
+#define BENCH(statement, output)		\
+	size_t n = BENCH_N;			\
+	if( argc > 2 ) return 1;		\
+	if( argc == 2 ) {				\
+		n = atoi(argv[1]);		\
+	}						\
+	long long int StartTime, EndTime;	\
+	StartTime = Time();			\
+	statement;					\
+	EndTime = Time();				\
+	unsigned long long int output = 	\
+	( EndTime - StartTime ) / n;
 
 unsigned int default_preemption() {
Index: src/benchmark/create_cfaCor.c
===================================================================
--- src/benchmark/create_cfaCor.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,18 +1,0 @@
-#include <coroutine>
-#include <stdlib.h>
-#include <stdio.h>
-
-coroutine MyCoroutine {};
-void main(MyCoroutine * this) {}
-
-int main(int argc, char* argv[]) {
-	size_t n = 1000000;
-	if( argc > 2 ) return 1;
-	if( argc == 2 ) {
-		n = atoi(argv[1]);
-	}
-	printf("%lu\n", n);
-	for (size_t i = 0; i < n; i++) {
-		MyCoroutine m;
-	}
-}
Index: src/benchmark/create_cfaThrd.c
===================================================================
--- src/benchmark/create_cfaThrd.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,18 +1,0 @@
-#include <thread>
-#include <stdlib.h>
-#include <stdio.h>
-
-thread MyThread {};
-void main(MyThread * this) {}
-
-int main(int argc, char* argv[]) {
-	size_t n = 1000000;
-	if( argc > 2 ) return 1;
-	if( argc == 2 ) {
-		n = atoi(argv[1]);
-	}
-	printf("%lu\n", n);
-	for (size_t i = 0; i < n; i++) {
-		MyThread m;
-	}
-}
Index: src/benchmark/create_pthrd.c
===================================================================
--- src/benchmark/create_pthrd.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,31 +1,0 @@
-#include <pthread.h>
-#include <err.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-static void *foo(void *arg) {
-    return arg;
-}
-
-int main(int argc, char* argv[]) {
-	size_t n = 1000000;
-	if( argc > 2 ) return 1;
-	if( argc == 2 ) {
-		n = atoi(argv[1]);
-	}
-	printf("create %lu pthreads ... ", n);
-
-	for (size_t i = 0; i < n; i++) {
-		pthread_t thread;
-		if (pthread_create(&thread, NULL, foo, NULL) < 0) {
-			perror( "failure" );
-			return 1;
-		}
-
-		if (pthread_join( thread, NULL) < 0) {
-			perror( "failure" );
-			return 1;
-		}
-	}
-	printf("finish\n");
-}
Index: src/benchmark/create_uCor.cpp
===================================================================
--- src/benchmark/create_uCor.cpp	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,19 +1,0 @@
-#include <cstdlib>
-#include <cstdio>
-
-_Coroutine MyCor {
-	void main() {}
-};
-
-int main(int argc, char* argv[]) {
-	size_t n = 1000000;
-	if( argc > 2 ) return 1;
-	if( argc == 2 ) {
-		n = atoi(argv[1]);
-	}
-	printf("%lu\n", n);
-	for (size_t i = 0; i < n; i++) {
-		MyCor m;
-	}
-	return 0;
-}
Index: src/benchmark/create_uTask.cpp
===================================================================
--- src/benchmark/create_uTask.cpp	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,19 +1,0 @@
-#include <cstdlib>
-#include <cstdio>
-
-_Task MyThread {
-	void main() {}
-};
-
-int main(int argc, char* argv[]) {
-	size_t n = 1000000;
-	if( argc > 2 ) return 1;
-	if( argc == 2 ) {
-		n = atoi(argv[1]);
-	}
-	printf("%lu\n", n);
-	for (size_t i = 0; i < n; i++) {
-		MyThread m;
-	}
-	return 0;
-}
Index: src/benchmark/creation/cfa_cor.c
===================================================================
--- src/benchmark/creation/cfa_cor.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/creation/cfa_cor.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <coroutine>
+
+#include "bench.h"
+
+coroutine MyCoroutine {};
+void ?{} (MyCoroutine & this) { prime(this); }
+void main(MyCoroutine & this) {}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			MyCoroutine m;
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/creation/cfa_thrd.c
===================================================================
--- src/benchmark/creation/cfa_thrd.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/creation/cfa_thrd.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <thread>
+
+#include "bench.h"
+
+thread MyThread {};
+void main(MyThread & this) {}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			MyThread m;
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/creation/pthreads.c
===================================================================
--- src/benchmark/creation/pthreads.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/creation/pthreads.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,28 @@
+#include <pthread.h>
+#include <stdio.h>
+
+#include "bench.h"
+
+static void *foo(void *arg) {
+    return arg;
+}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			pthread_t thread;
+			if (pthread_create(&thread, NULL, foo, NULL) < 0) {
+				perror( "failure" );
+				return 1;
+			}
+
+			if (pthread_join( thread, NULL) < 0) {
+				perror( "failure" );
+				return 1;
+			}
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/creation/upp_cor.cc
===================================================================
--- src/benchmark/creation/upp_cor.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/creation/upp_cor.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,18 @@
+#include <cstdio>
+
+#include "bench.h"
+
+_Coroutine MyCor {
+	void main() {}
+};
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			MyCor m;
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/creation/upp_thrd.cc
===================================================================
--- src/benchmark/creation/upp_thrd.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/creation/upp_thrd.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,18 @@
+#include <cstdio>
+
+#include "bench.h"
+
+_Task MyThread {
+	void main() {}
+};
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			MyThread m;
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/csv-data.c
===================================================================
--- src/benchmark/csv-data.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/benchmark/csv-data.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -111,7 +111,7 @@
 	StartTime = Time();
 	for( int i = 0;; i++ ) {
-		signal(&cond1a);
-		if( i > N ) break;
-		wait(&cond1b);
+		signal(cond1a);
+		if( i > N ) break;
+		wait(cond1b);
 	}
 	EndTime = Time();
@@ -122,7 +122,7 @@
 void side1B( mon_t & mutex a ) {
 	for( int i = 0;; i++ ) {
-		signal(&cond1b);
-		if( i > N ) break;
-		wait(&cond1a);
+		signal(cond1b);
+		if( i > N ) break;
+		wait(cond1a);
 	}
 }
@@ -159,7 +159,7 @@
 	StartTime = Time();
 	for( int i = 0;; i++ ) {
-		signal(&cond2a);
-		if( i > N ) break;
-		wait(&cond2b);
+		signal(cond2a);
+		if( i > N ) break;
+		wait(cond2b);
 	}
 	EndTime = Time();
@@ -170,7 +170,7 @@
 void side2B( mon_t & mutex a, mon_t & mutex b ) {
 	for( int i = 0;; i++ ) {
-		signal(&cond2b);
-		if( i > N ) break;
-		wait(&cond2a);
+		signal(cond2b);
+		if( i > N ) break;
+		wait(cond2a);
 	}
 }
Index: src/benchmark/ctxswitch/cfa_cor.c
===================================================================
--- src/benchmark/ctxswitch/cfa_cor.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/ctxswitch/cfa_cor.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <thread>
+
+#include "bench.h"
+
+coroutine GreatSuspender {};
+
+void ?{}( GreatSuspender & this ) {
+	prime(this);
+}
+
+void main( GreatSuspender & this ) {
+	while( true ) {
+		suspend();
+	}
+}
+
+int main(int argc, char* argv[]) {
+	GreatSuspender s;
+
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			resume( s );
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/ctxswitch/cfa_thrd.c
===================================================================
--- src/benchmark/ctxswitch/cfa_thrd.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/ctxswitch/cfa_thrd.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include <thread>
+
+#include "bench.h"
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			yield();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/ctxswitch/pthreads.c
===================================================================
--- src/benchmark/ctxswitch/pthreads.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/ctxswitch/pthreads.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sched.h>
+
+#include "bench.h"
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			sched_yield();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/ctxswitch/upp_cor.cc
===================================================================
--- src/benchmark/ctxswitch/upp_cor.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/ctxswitch/upp_cor.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,33 @@
+#include <cstdio>
+
+#include "bench.h"
+
+_Coroutine GreatSuspender {
+public:
+	GreatSuspender() {
+		resume();
+	}
+
+	void do_resume() {
+		resume();
+	}
+private:
+	void main() {
+		while( true ) {
+			suspend();
+		}
+	}
+};
+
+int main(int argc, char* argv[]) {
+	GreatSuspender s;
+
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			s.do_resume();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/ctxswitch/upp_thrd.cc
===================================================================
--- src/benchmark/ctxswitch/upp_thrd.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/ctxswitch/upp_thrd.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,14 @@
+#include <cstdio>
+
+#include "bench.h"
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			uThisTask().yield();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/mutex/cfa1.c
===================================================================
--- src/benchmark/mutex/cfa1.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/mutex/cfa1.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,19 @@
+#include <monitor>
+#include <stdio.h>
+
+#include "bench.h"
+
+monitor M {};
+void __attribute__((noinline)) call( M & mutex m ) {}
+
+int main(int argc, char* argv[]) {
+	M m;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			call(m);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/mutex/cfa2.c
===================================================================
--- src/benchmark/mutex/cfa2.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/mutex/cfa2.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,19 @@
+#include <monitor>
+#include <stdio.h>
+
+#include "bench.h"
+
+monitor M {};
+void __attribute__((noinline)) call( M & mutex m1, M & mutex m2 ) {}
+
+int main(int argc, char* argv[]) {
+	M m1, m2;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			call(m1, m2);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/mutex/cfa4.c
===================================================================
--- src/benchmark/mutex/cfa4.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/mutex/cfa4.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,20 @@
+#include <monitor>
+#include <stdio.h>
+
+#include "bench.h"
+
+
+monitor M {};
+void __attribute__((noinline)) call( M & mutex m1, M & mutex m2, M & mutex m3, M & mutex m4 ) {}
+
+int main(int argc, char* argv[]) {
+	M m1, m2, m3, m4;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			call(m1, m2, m3, m4);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/mutex/function.c
===================================================================
--- src/benchmark/mutex/function.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/mutex/function.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,18 @@
+#include <stdio.h>
+
+#include "bench.h"
+
+void __attribute__((noinline)) do_call() {
+	asm volatile ("");
+}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			do_call();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/mutex/pthreads.c
===================================================================
--- src/benchmark/mutex/pthreads.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/mutex/pthreads.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,22 @@
+#include <pthread.h>
+#include <stdio.h>
+
+#include "bench.h"
+
+pthread_mutex_t mutex;
+
+void __attribute__((noinline)) call() {
+	 pthread_mutex_lock  (&mutex);
+	 pthread_mutex_unlock(&mutex);
+}
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			call();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/mutex/upp.cc
===================================================================
--- src/benchmark/mutex/upp.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/mutex/upp.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,20 @@
+#include <cstdio>
+
+#include "bench.h"
+
+_Monitor MyMonitor {
+public:
+	void __attribute__((noinline)) call() {}
+};
+
+int main(int argc, char* argv[]) {
+	MyMonitor m;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			m.call();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: src/benchmark/schedext/cfa1.c
===================================================================
--- src/benchmark/schedext/cfa1.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/schedext/cfa1.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,44 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+monitor M {};
+M m1;
+
+void __attribute__((noinline)) call( M & mutex a1 ) {}
+
+int  __attribute__((noinline)) wait( M & mutex a1 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			waitfor(call, a1);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return wait(m1);
+}
Index: src/benchmark/schedext/cfa2.c
===================================================================
--- src/benchmark/schedext/cfa2.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/schedext/cfa2.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,44 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+monitor M {};
+M m1, m2;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2 ) {}
+
+int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			waitfor(call, a1, a2);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1, m2); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return wait(m1, m2);
+}
Index: src/benchmark/schedext/cfa4.c
===================================================================
--- src/benchmark/schedext/cfa4.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/schedext/cfa4.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,44 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+monitor M {};
+M m1, m2, m3, m4;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {}
+
+int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			waitfor(call, a1, a2, a3, a4);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1, m2, m3, m4); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return wait(m1, m2, m3, m4);
+}
Index: src/benchmark/schedext/upp.cc
===================================================================
--- src/benchmark/schedext/upp.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/schedext/upp.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,43 @@
+#include <cstdio>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+_Monitor M {
+public:
+	void __attribute__((noinline)) call() {}
+
+	int __attribute__((noinline)) wait() {
+		go = 1;
+		BENCH(
+			for (size_t i = 0; i < n; i++) {
+				_Accept(call);
+			},
+			result
+		)
+
+		printf("%llu\n", result);
+		go = 0;
+		return 0;
+	}
+};
+
+M m;
+
+_Task T {
+	void main() {
+		while(go == 0) { yield(); }
+		while(go == 1) { m.call(); }
+
+	}
+};
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return m.wait();
+}
Index: src/benchmark/schedint/cfa1.c
===================================================================
--- src/benchmark/schedint/cfa1.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/schedint/cfa1.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,47 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+condition c;
+monitor M {};
+M m1;
+
+void __attribute__((noinline)) call( M & mutex a1 ) {
+	signal(c);
+}
+
+int  __attribute__((noinline)) wait( M & mutex a1 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			wait(c);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return wait(m1);
+}
Index: src/benchmark/schedint/cfa2.c
===================================================================
--- src/benchmark/schedint/cfa2.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/schedint/cfa2.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,47 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+condition c;
+monitor M {};
+M m1, m2;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2 ) {
+	signal(c);
+}
+
+int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			wait(c);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1, m2); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return wait(m1, m2);
+}
Index: src/benchmark/schedint/cfa4.c
===================================================================
--- src/benchmark/schedint/cfa4.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/schedint/cfa4.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,47 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+condition c;
+monitor M {};
+M m1, m2, m3, m4;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {
+	signal(c);
+}
+
+int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			wait(c);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1, m2, m3, m4); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return wait(m1, m2, m3, m4);
+}
Index: src/benchmark/schedint/upp.cc
===================================================================
--- src/benchmark/schedint/upp.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/benchmark/schedint/upp.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,46 @@
+#include <cstdio>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+_Monitor M {
+	uCondition cond;
+public:
+	void __attribute__((noinline)) call() {
+		cond.signal();
+	}
+
+	int __attribute__((noinline)) wait() {
+		go = 1;
+		BENCH(
+			for (size_t i = 0; i < n; i++) {
+				cond.wait();
+			},
+			result
+		)
+
+		printf("%llu\n", result);
+		go = 0;
+		return 0;
+	}
+};
+
+M m;
+
+_Task T {
+	void main() {
+		while(go == 0) { yield(); }
+		while(go == 1) { m.call(); }
+
+	}
+};
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	T t;
+	return m.wait();
+}
Index: src/benchmark/stat.py
===================================================================
--- src/benchmark/stat.py	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,20 +1,0 @@
-#!/usr/bin/python
-
-import sys
-import numpy
-
-if len(sys.argv) != 2 :
-	sys.exit("Expected file name as only argument")
-
-try:
-	with open(sys.argv[1]) as f:
-		content = f.readlines()
-		content = [x.strip() for x in content]
-		content = [int(x) for x in content]
-		content.remove(max(content))
-		content.remove(min(content))
-		print "median {0} avg {1} stddev {2}".format( numpy.median(content), numpy.mean(content), numpy.std(content) )
-
-
-except IOError as e:
-	sys.exit(e.strerror)
Index: src/driver/cfa.cc
===================================================================
--- src/driver/cfa.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/driver/cfa.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -9,7 +9,7 @@
 // Author           : Peter A. Buhr
 // Created On       : Tue Aug 20 13:44:49 2002
-// Last Modified By : Andrew Beach
-// Last Modified On : Thr Aug 17 15:24:00 2017
-// Update Count     : 156
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Oct 31 11:40:44 2017
+// Update Count     : 160
 //
 
@@ -305,8 +305,14 @@
 	} // if
 
+	shuffle( args, sargs, nargs, 1 );					// make room at front of argument list
+	nargs += 1;
 	if ( CFA_flag ) {
+		args[sargs] = "-D__CFA_FLAG__=-N";
 		args[nargs] = "-D__CFA_PREPROCESS_";
 		nargs += 1;
-	} // if
+	} else {
+		args[sargs] = "-D__CFA_FLAG__=-L";
+	} // if
+	sargs += 1;
 
 	if ( debug ) {
@@ -345,4 +351,6 @@
 		} // if
 		args[nargs] = "-fgnu89-inline";
+		nargs += 1;
+		args[nargs] = "-D__int8_t_defined";				// prevent gcc type-size attributes
 		nargs += 1;
 		args[nargs] = ( *new string( string("-B") + Bprefix + "/" ) ).c_str();
Index: src/examples/sum.c
===================================================================
--- src/examples/sum.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,96 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// sum.c -- test resolvers ability to deal with many variables with the same name and to use the minimum number of casts
-//    necessary to disambiguate overloaded variable names.
-//
-// Author           : Peter A. Buhr
-// Created On       : Wed May 27 17:56:53 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu May 26 09:25:42 2016
-// Update Count     : 201
-//
-
-#include <fstream>
-
-trait sumable( otype T ) {
-	const T 0;
-	T ?+?( T, T );
-	T ?+=?( T *, T );
-	T ++?( T * );
-	T ?++( T * );
-}; // sumable
-
-forall( otype T | sumable( T ) )
-T sum( unsigned int n, T a[] ) {
-	T total = 0;										// instantiate T, select 0
-	for ( unsigned int i = 0; i < n; i += 1 )
-		total += a[i];									// select +
-	return total;
-} // sum
-
-// Required to satisfy sumable as char does not have addition.
-const char 0;
-char ?+?( char t1, char t2 ) { return (int)t1 + t2; }	// cast forces integer addition, otherwise recursion
-char ?+=?( char *t1, char t2 ) { *t1 = *t1 + t2; return *t1; }
-char ++?( char *t ) { *t += 1; return *t; }
-char ?++( char *t ) { char temp = *t; *t += 1; return temp; }
-
-int main( void ) {
-	const int low = 5, High = 15, size = High - low;
-
-	char s = 0, a[size], v = low;
-	for ( int i = 0; i < size; i += 1, v += 1 ) {
-		s += v;
-		a[i] = v;
-	} // for
-	sout | "sum from" | low | "to" | High | "is"
-		 | (int)sum( size, a ) | ", check" | (int)s | endl;
-
-	int s = 0, a[size], v = low;
-	for ( int i = 0; i < size; i += 1, v += 1 ) {
-		s += (int)v;
-		a[i] = (int)v;
-	} // for
-	sout | "sum from" | low | "to" | High | "is"
-		 | sum( size, (int *)a ) | ", check" | (int)s | endl;
-
-	float s = 0.0, a[size], v = low / 10.0;
-	for ( int i = 0; i < size; i += 1, v += 0.1f ) {
-		s += (float)v;
-		a[i] = (float)v;
-	} // for
-	sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
-		 | sum( size, (float *)a ) | ", check" | (float)s | endl;
-
-	double s = 0, a[size], v = low / 10.0;
-	for ( int i = 0; i < size; i += 1, v += 0.1 ) {
-		s += (double)v;
-		a[i] = (double)v;
-	} // for
-	sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
-		 | sum( size, (double *)a ) | ", check" | (double)s | endl;
-
-	struct S { int i, j; } 0 = { 0, 0 }, 1 = { 1, 1 };
-	S ?+?( S t1, S t2 ) { return (S){ t1.i + t2.i, t1.j + t2.j }; }
-	S ?+=?( S *t1, S t2 ) { *t1 = *t1 + t2; return *t1; }
-	S ++?( S *t ) { *t += 1; return *t; }
-	S ?++( S *t ) { S temp = *t; *t += 1; return temp; }
-	ofstream * ?|?( ofstream * os, S v ) { return os | v.i | v.j; }
-
-	S s = 0, a[size], v = { low, low };
-	for ( int i = 0; i < size; i += 1, v += (S)1 ) {
-		s += (S)v;
-		a[i] = (S)v;
-	} // for
-	sout | "sum from" | low | "to" | High | "is"
-		 | sum( size, (S *)a ) | ", check" | (S)s | endl;
-} // main
-
-// Local Variables: //
-// tab-width: 4 //
-// compile-command: "cfa sum.c" //
-// End: //
Index: src/include/cassert
===================================================================
--- src/include/cassert	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/include/cassert	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -41,5 +41,5 @@
 static inline T strict_dynamic_cast( const U & src ) {
 	T ret = dynamic_cast<T>(src);
-	assert(ret);
+	assertf(ret, "%s", toString(src).c_str());
 	return ret;
 }
Index: src/libcfa/Makefile.am
===================================================================
--- src/libcfa/Makefile.am	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/Makefile.am	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -31,10 +31,10 @@
 
 libcfa_a-libcfa-prelude.o : libcfa-prelude.c
-	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -O2 -c -o $@ $<
+	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -Wall -O2 -c -o $@ $<
 
 libcfa_d_a-libcfa-prelude.o : libcfa-prelude.c
-	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -D__CFA_DEBUG__ -O0 -c -o $@ $<
+	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -D__CFA_DEBUG__ -Wall -O0 -c -o $@ $<
 
-EXTRA_FLAGS = -g -Wall -Werror -Wno-unused-function -imacros libcfa-prelude.c @CFA_FLAGS@
+EXTRA_FLAGS = -g -Wall -Wno-unused-function -imacros libcfa-prelude.c @CFA_FLAGS@
 
 AM_CCASFLAGS = @CFA_FLAGS@
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/Makefile.in	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -416,5 +416,5 @@
 ARFLAGS = cr
 lib_LIBRARIES = $(am__append_1) $(am__append_2)
-EXTRA_FLAGS = -g -Wall -Werror -Wno-unused-function -imacros libcfa-prelude.c @CFA_FLAGS@
+EXTRA_FLAGS = -g -Wall -Wno-unused-function -imacros libcfa-prelude.c @CFA_FLAGS@
 AM_CCASFLAGS = @CFA_FLAGS@
 headers = fstream iostream iterator limits rational stdlib \
@@ -1498,8 +1498,8 @@
 
 libcfa_a-libcfa-prelude.o : libcfa-prelude.c
-	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -O2 -c -o $@ $<
+	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -Wall -O2 -c -o $@ $<
 
 libcfa_d_a-libcfa-prelude.o : libcfa-prelude.c
-	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -D__CFA_DEBUG__ -O0 -c -o $@ $<
+	 ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -D__CFA_DEBUG__ -Wall -O0 -c -o $@ $<
 
 # extensionless header files are overridden by -o flag in default makerule => explicitly override default rule to silently do nothing
Index: src/libcfa/bits/algorithms.h
===================================================================
--- src/libcfa/bits/algorithms.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/libcfa/bits/algorithms.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,191 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// bits/algorithms.h -- Builtins for exception handling.
+//
+// Author           : Thierry Delisle
+// Created On       : Mon Oct 30 13:37:34 2017
+// Last Modified By : --
+// Last Modified On : --
+// Update Count     : 0
+//
+
+#pragma once
+
+#ifdef SAFE_SORT
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } ) static inline void __libcfa_small_sort2( T * arr );
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } ) static inline void __libcfa_small_sort3( T * arr );
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } ) static inline void __libcfa_small_sort4( T * arr );
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } ) static inline void __libcfa_small_sort5( T * arr );
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } ) static inline void __libcfa_small_sort6( T * arr );
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } ) static inline void __libcfa_small_sortN( T * arr, size_t dim );
+
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } )
+static inline void __libcfa_small_sort( T * arr, size_t dim ) {
+	switch( dim ) {
+		case 1 : return;
+		case 2 : __libcfa_small_sort2( arr ); return;
+		case 3 : __libcfa_small_sort3( arr ); return;
+		case 4 : __libcfa_small_sort4( arr ); return;
+		case 5 : __libcfa_small_sort5( arr ); return;
+		case 6 : __libcfa_small_sort6( arr ); return;
+		default: __libcfa_small_sortN( arr, dim ); return;
+	}
+}
+
+#define min(x, y) (y > x ? x : y)
+#define max(x, y) (y > x ? y : x)
+#define SWAP(x,y) { T a = min(arr[x], arr[y]); T b = max(arr[x], arr[y]); arr[x] = a; arr[y] = b;}
+
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } )
+static inline void __libcfa_small_sort2( T * arr ) {
+	SWAP(0, 1);
+}
+
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } )
+static inline void __libcfa_small_sort3( T * arr ) {
+	SWAP(1, 2);
+	SWAP(0, 2);
+	SWAP(0, 1);
+}
+
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } )
+static inline void __libcfa_small_sort4( T * arr ) {
+	SWAP(0, 1);
+	SWAP(2, 3);
+	SWAP(0, 2);
+	SWAP(1, 3);
+	SWAP(1, 2);
+}
+
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } )
+static inline void __libcfa_small_sort5( T * arr ) {
+	SWAP(0, 1);
+	SWAP(3, 4);
+	SWAP(2, 4);
+	SWAP(2, 3);
+	SWAP(0, 3);
+	SWAP(0, 2);
+	SWAP(1, 4);
+	SWAP(1, 3);
+	SWAP(1, 2);
+}
+
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } )
+static inline void __libcfa_small_sort6( T * arr ) {
+	SWAP(1, 2);
+	SWAP(4, 5);
+	SWAP(0, 2);
+	SWAP(3, 5);
+	SWAP(0, 1);
+	SWAP(3, 4);
+	SWAP(1, 4);
+	SWAP(0, 3);
+	SWAP(2, 5);
+	SWAP(1, 3);
+	SWAP(2, 4);
+	SWAP(2, 3);
+}
+
+forall( otype T | {  int ?<?( T, T ); int ?>?( T, T ); } )
+static inline void __libcfa_small_sortN( T * arr, size_t dim ) {
+	int i, j;
+	for (i = 1; i < dim; i++) {
+		T tmp = arr[i];
+		for (j = i; j >= 1 && tmp < arr[j-1]; j--) {
+			arr[j] = arr[j-1];
+		}
+		arr[j] = tmp;
+	}
+}
+
+#else
+
+static inline void __libcfa_small_sort2( void* * arr );
+static inline void __libcfa_small_sort3( void* * arr );
+static inline void __libcfa_small_sort4( void* * arr );
+static inline void __libcfa_small_sort5( void* * arr );
+static inline void __libcfa_small_sort6( void* * arr );
+static inline void __libcfa_small_sortN( void* * arr, size_t dim );
+
+forall( dtype T )
+static inline void __libcfa_small_sort( T* * arr, size_t dim ) {
+	switch( dim ) {
+		case 1 : return;
+		case 2 : __libcfa_small_sort2( (void **) arr ); return;
+		case 3 : __libcfa_small_sort3( (void **) arr ); return;
+		case 4 : __libcfa_small_sort4( (void **) arr ); return;
+		case 5 : __libcfa_small_sort5( (void **) arr ); return;
+		case 6 : __libcfa_small_sort6( (void **) arr ); return;
+		default: __libcfa_small_sortN( (void **) arr, dim ); return;
+	}
+}
+
+#define min(x, y) (y > x ? x : y)
+#define max(x, y) (y > x ? y : x)
+#define SWAP(x,y) { void* a = min(arr[x], arr[y]); void* b = max(arr[x], arr[y]); arr[x] = a; arr[y] = b;}
+
+static inline void __libcfa_small_sort2( void* * arr ) {
+	SWAP(0, 1);
+}
+
+static inline void __libcfa_small_sort3( void* * arr ) {
+	SWAP(1, 2);
+	SWAP(0, 2);
+	SWAP(0, 1);
+}
+
+static inline void __libcfa_small_sort4( void* * arr ) {
+	SWAP(0, 1);
+	SWAP(2, 3);
+	SWAP(0, 2);
+	SWAP(1, 3);
+	SWAP(1, 2);
+}
+
+static inline void __libcfa_small_sort5( void* * arr ) {
+	SWAP(0, 1);
+	SWAP(3, 4);
+	SWAP(2, 4);
+	SWAP(2, 3);
+	SWAP(0, 3);
+	SWAP(0, 2);
+	SWAP(1, 4);
+	SWAP(1, 3);
+	SWAP(1, 2);
+}
+
+static inline void __libcfa_small_sort6( void* * arr ) {
+	SWAP(1, 2);
+	SWAP(4, 5);
+	SWAP(0, 2);
+	SWAP(3, 5);
+	SWAP(0, 1);
+	SWAP(3, 4);
+	SWAP(1, 4);
+	SWAP(0, 3);
+	SWAP(2, 5);
+	SWAP(1, 3);
+	SWAP(2, 4);
+	SWAP(2, 3);
+}
+
+static inline void __libcfa_small_sortN( void* * arr, size_t dim ) {
+	int i, j;
+	for (i = 1; i < dim; i++) {
+		void* tmp = arr[i];
+		for (j = i; j >= 1 && tmp < arr[j-1]; j--) {
+			arr[j] = arr[j-1];
+		}
+		arr[j] = tmp;
+	}
+}
+
+#endif
+
+#undef SWAP
+#undef min
+#undef max
Index: src/libcfa/concurrency/coroutine.c
===================================================================
--- src/libcfa/concurrency/coroutine.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/concurrency/coroutine.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -123,6 +123,4 @@
 	if(pageSize == 0ul) pageSize = sysconf( _SC_PAGESIZE );
 
-	LIB_DEBUG_PRINT_SAFE("FRED");
-
 	size_t cxtSize = libCeiling( sizeof(machine_context_t), 8 ); // minimum alignment
 
@@ -158,5 +156,5 @@
 		this->limit = (char *)libCeiling( (unsigned long)this->storage, 16 ); // minimum alignment
 	} // if
-	assertf( this->size >= MinStackSize, "Stack size %d provides less than minimum of %d bytes for a stack.", this->size, MinStackSize );
+	assertf( this->size >= MinStackSize, "Stack size %zd provides less than minimum of %d bytes for a stack.", this->size, MinStackSize );
 
 	this->base = (char *)this->limit + this->size;
Index: src/libcfa/concurrency/invoke.h
===================================================================
--- src/libcfa/concurrency/invoke.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/concurrency/invoke.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -25,88 +25,173 @@
 #define _INVOKE_H_
 
-      #define unlikely(x)    __builtin_expect(!!(x), 0)
-      #define thread_local _Thread_local
-
-      typedef void (*fptr_t)();
-
-      struct spinlock {
-            volatile int lock;
-            #ifdef __CFA_DEBUG__
-                  const char * prev_name;
-                  void* prev_thrd;
-            #endif
-      };
-
-      struct __thread_queue_t {
-            struct thread_desc * head;
-            struct thread_desc ** tail;
-      };
-
-      struct __condition_stack_t {
-            struct __condition_criterion_t * top;
-      };
-
-      #ifdef __CFORALL__
-      extern "Cforall" {
-            void ?{}( struct __thread_queue_t & );
-            void append( struct __thread_queue_t *, struct thread_desc * );
-            struct thread_desc * pop_head( struct __thread_queue_t * );
-            struct thread_desc * remove( struct __thread_queue_t *, struct thread_desc ** );
-
-            void ?{}( struct __condition_stack_t & );
-            void push( struct __condition_stack_t *, struct __condition_criterion_t * );
-            struct __condition_criterion_t * pop( struct __condition_stack_t * );
-
-            void ?{}(spinlock & this);
-            void ^?{}(spinlock & this);
-      }
-      #endif
-
-      struct coStack_t {
-            unsigned int size;                        // size of stack
-            void *storage;                            // pointer to stack
-            void *limit;                              // stack grows towards stack limit
-            void *base;                               // base of stack
-            void *context;                            // address of cfa_context_t
-            void *top;                                // address of top of storage
-            bool userStack;                           // whether or not the user allocated the stack
-      };
-
-      enum coroutine_state { Halted, Start, Inactive, Active, Primed };
-
-      struct coroutine_desc {
-            struct coStack_t stack;                   // stack information of the coroutine
-            const char *name;                         // textual name for coroutine/task, initialized by uC++ generated code
-            int errno_;                               // copy of global UNIX variable errno
-            enum coroutine_state state;               // current execution status for coroutine
-            struct coroutine_desc * starter;          // first coroutine to resume this one
-            struct coroutine_desc * last;             // last coroutine to resume this one
-      };
-
-      struct monitor_desc {
-            struct spinlock lock;                     // spinlock to protect internal data
-            struct thread_desc * owner;               // current owner of the monitor
-            struct __thread_queue_t entry_queue;      // queue of threads that are blocked waiting for the monitor
-            struct __condition_stack_t signal_stack;  // stack of conditions to run next once we exit the monitor
-            unsigned int recursion;                   // monitor routines can be called recursively, we need to keep track of that
-
-            struct __acceptable_t * acceptables;      // list of acceptable functions, null if any
-            unsigned short acceptable_count;          // number of acceptable functions
-            short accepted_index;                     // the index of the accepted function, -1 if none
-       };
-
-      struct thread_desc {
-            // Core threading fields
-            struct coroutine_desc cor;                // coroutine body used to store context
-            struct monitor_desc mon;                  // monitor body used for mutual exclusion
-
-            // Link lists fields
-            struct thread_desc * next;                // instrusive link field for threads
-
-            // Current status related to monitors
-            struct monitor_desc ** current_monitors;  // currently held monitors
-            unsigned short current_monitor_count;     // number of currently held monitors
-            fptr_t current_monitor_func;              // last function that acquired monitors
+	#define unlikely(x)    __builtin_expect(!!(x), 0)
+	#define thread_local _Thread_local
+
+	typedef void (*fptr_t)();
+	typedef int_fast16_t __lock_size_t;
+
+	struct spinlock {
+		volatile int lock;
+		#ifdef __CFA_DEBUG__
+			const char * prev_name;
+			void* prev_thrd;
+		#endif
+	};
+
+	struct __thread_queue_t {
+		struct thread_desc * head;
+		struct thread_desc ** tail;
+	};
+
+	struct __condition_stack_t {
+		struct __condition_criterion_t * top;
+	};
+
+	#ifdef __CFORALL__
+	extern "Cforall" {
+		void ?{}( struct __thread_queue_t & );
+		void append( struct __thread_queue_t &, struct thread_desc * );
+		struct thread_desc * pop_head( struct __thread_queue_t & );
+		struct thread_desc * remove( struct __thread_queue_t &, struct thread_desc ** );
+
+		void ?{}( struct __condition_stack_t & );
+		void push( struct __condition_stack_t &, struct __condition_criterion_t * );
+		struct __condition_criterion_t * pop( struct __condition_stack_t & );
+
+		void  ?{}(spinlock & this);
+		void ^?{}(spinlock & this);
+	}
+	#endif
+
+	struct coStack_t {
+		// size of stack
+		size_t size;
+
+		// pointer to stack
+		void *storage;
+
+		// stack grows towards stack limit
+		void *limit;
+
+		// base of stack
+		void *base;
+
+		// address of cfa_context_t
+		void *context;
+
+		// address of top of storage
+		void *top;
+
+		// whether or not the user allocated the stack
+		bool userStack;
+	};
+
+	enum coroutine_state { Halted, Start, Inactive, Active, Primed };
+
+	struct coroutine_desc {
+		// stack information of the coroutine
+		struct coStack_t stack;
+
+		// textual name for coroutine/task, initialized by uC++ generated code
+		const char *name;
+
+		// copy of global UNIX variable errno
+		int errno_;
+
+		// current execution status for coroutine
+		enum coroutine_state state;
+
+		// first coroutine to resume this one
+		struct coroutine_desc * starter;
+
+		// last coroutine to resume this one
+		struct coroutine_desc * last;
+	};
+
+	struct __waitfor_mask_t {
+		// the index of the accepted function, -1 if none
+		short * accepted;
+
+		// list of acceptable functions, null if any
+		struct __acceptable_t * clauses;
+
+		// number of acceptable functions
+		__lock_size_t size;
+	};
+
+	struct monitor_desc {
+		// spinlock to protect internal data
+		struct spinlock lock;
+
+		// current owner of the monitor
+		struct thread_desc * owner;
+
+		// queue of threads that are blocked waiting for the monitor
+		struct __thread_queue_t entry_queue;
+
+		// stack of conditions to run next once we exit the monitor
+		struct __condition_stack_t signal_stack;
+
+		// monitor routines can be called recursively, we need to keep track of that
+		unsigned int recursion;
+
+		// mask used to know if some thread is waiting for something while holding the monitor
+		struct __waitfor_mask_t mask;
+
+		// node used to signal the dtor in a waitfor dtor
+		struct __condition_node_t * dtor_node;
+	};
+
+	struct __monitor_group_t {
+		// currently held monitors
+		struct monitor_desc ** list;
+
+		// number of currently held monitors
+		__lock_size_t size;
+
+		// last function that acquired monitors
+		fptr_t func;
+	};
+
+	struct thread_desc {
+		// Core threading fields
+		// coroutine body used to store context
+		struct coroutine_desc  self_cor;
+
+		// monitor body used for mutual exclusion
+		struct monitor_desc    self_mon;
+
+		// pointer to monitor with sufficient lifetime for current monitors
+		struct monitor_desc *  self_mon_p;
+
+		// monitors currently held by this thread
+		struct __monitor_group_t monitors;
+
+		// Link lists fields
+		// instrusive link field for threads
+		struct thread_desc * next;
      };
+
+     #ifdef __CFORALL__
+     extern "Cforall" {
+		static inline monitor_desc * ?[?]( const __monitor_group_t & this, ptrdiff_t index ) {
+			return this.list[index];
+		}
+
+		static inline bool ?==?( const __monitor_group_t & lhs, const __monitor_group_t & rhs ) {
+			if( (lhs.list != 0) != (rhs.list != 0) ) return false;
+			if( lhs.size != rhs.size ) return false;
+			if( lhs.func != rhs.func ) return false;
+
+			// Check that all the monitors match
+			for( int i = 0; i < lhs.size; i++ ) {
+				// If not a match, check next function
+				if( lhs[i] != rhs[i] ) return false;
+			}
+
+			return true;
+		}
+	}
+	#endif
 
 #endif //_INVOKE_H_
@@ -115,25 +200,25 @@
 #define _INVOKE_PRIVATE_H_
 
-      struct machine_context_t {
-            void *SP;
-            void *FP;
-            void *PC;
-      };
-
-      // assembler routines that performs the context switch
-      extern void CtxInvokeStub( void );
-      void CtxSwitch( void * from, void * to ) asm ("CtxSwitch");
-
-      #if   defined( __x86_64__ )
-      #define CtxGet( ctx ) __asm__ ( \
-                  "movq %%rsp,%0\n"   \
-                  "movq %%rbp,%1\n"   \
-            : "=rm" (ctx.SP), "=rm" (ctx.FP) )
-      #elif defined( __i386__ )
-      #define CtxGet( ctx ) __asm__ ( \
-                  "movl %%esp,%0\n"   \
-                  "movl %%ebp,%1\n"   \
-            : "=rm" (ctx.SP), "=rm" (ctx.FP) )
-      #endif
+	struct machine_context_t {
+		void *SP;
+		void *FP;
+		void *PC;
+	};
+
+	// assembler routines that performs the context switch
+	extern void CtxInvokeStub( void );
+	void CtxSwitch( void * from, void * to ) asm ("CtxSwitch");
+
+	#if   defined( __x86_64__ )
+	#define CtxGet( ctx ) __asm__ ( \
+			"movq %%rsp,%0\n"   \
+			"movq %%rbp,%1\n"   \
+		: "=rm" (ctx.SP), "=rm" (ctx.FP) )
+	#elif defined( __i386__ )
+	#define CtxGet( ctx ) __asm__ ( \
+			"movl %%esp,%0\n"   \
+			"movl %%ebp,%1\n"   \
+		: "=rm" (ctx.SP), "=rm" (ctx.FP) )
+	#endif
 
 #endif //_INVOKE_PRIVATE_H_
Index: src/libcfa/concurrency/kernel
===================================================================
--- src/libcfa/concurrency/kernel	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/concurrency/kernel	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -26,8 +26,15 @@
 //-----------------------------------------------------------------------------
 // Locks
-void lock      ( spinlock * DEBUG_CTX_PARAM2 );       // Lock the spinlock, spin if already acquired
-void lock_yield( spinlock * DEBUG_CTX_PARAM2 );       // Lock the spinlock, yield repeatedly if already acquired
-bool try_lock  ( spinlock * DEBUG_CTX_PARAM2 );       // Lock the spinlock, return false if already acquired
-void unlock    ( spinlock * );                        // Unlock the spinlock
+// Lock the spinlock, spin if already acquired
+void lock      ( spinlock * DEBUG_CTX_PARAM2 );
+
+// Lock the spinlock, yield repeatedly if already acquired
+void lock_yield( spinlock * DEBUG_CTX_PARAM2 );
+
+// Lock the spinlock, return false if already acquired
+bool try_lock  ( spinlock * DEBUG_CTX_PARAM2 );
+
+// Unlock the spinlock
+void unlock    ( spinlock * );
 
 struct semaphore {
@@ -39,6 +46,6 @@
 void  ?{}(semaphore & this, int count = 1);
 void ^?{}(semaphore & this);
-void P(semaphore * this);
-void V(semaphore * this);
+void   P (semaphore & this);
+void   V (semaphore & this);
 
 
@@ -46,10 +53,15 @@
 // Cluster
 struct cluster {
-	spinlock ready_queue_lock;                      // Ready queue locks
-	__thread_queue_t ready_queue;                   // Ready queue for threads
-	unsigned long long int preemption;              // Preemption rate on this cluster
+	// Ready queue locks
+	spinlock ready_queue_lock;
+
+	// Ready queue for threads
+	__thread_queue_t ready_queue;
+
+	// Preemption rate on this cluster
+	unsigned long long int preemption;
 };
 
-void ?{}(cluster & this);
+void ?{} (cluster & this);
 void ^?{}(cluster & this);
 
@@ -79,26 +91,39 @@
 struct processor {
 	// Main state
-	struct processorCtx_t * runner;                 // Coroutine ctx who does keeps the state of the processor
-	cluster * cltr;                                 // Cluster from which to get threads
-	pthread_t kernel_thread;                        // Handle to pthreads
+	// Coroutine ctx who does keeps the state of the processor
+	struct processorCtx_t * runner;
+
+	// Cluster from which to get threads
+	cluster * cltr;
+
+	// Handle to pthreads
+	pthread_t kernel_thread;
 
 	// Termination
-	volatile bool do_terminate;                     // Set to true to notify the processor should terminate
-	semaphore terminated;                           // Termination synchronisation
+	// Set to true to notify the processor should terminate
+	volatile bool do_terminate;
+
+	// Termination synchronisation
+	semaphore terminated;
 
 	// RunThread data
-	struct FinishAction finish;                     // Action to do after a thread is ran
+	// Action to do after a thread is ran
+	struct FinishAction finish;
 
 	// Preemption data
-	struct alarm_node_t * preemption_alarm;         // Node which is added in the discrete event simulaiton
-	bool pending_preemption;                        // If true, a preemption was triggered in an unsafe region, the processor must preempt as soon as possible
+	// Node which is added in the discrete event simulaiton
+	struct alarm_node_t * preemption_alarm;
+
+	// If true, a preemption was triggered in an unsafe region, the processor must preempt as soon as possible
+	bool pending_preemption;
 
 #ifdef __CFA_DEBUG__
-	char * last_enable;                             // Last function to enable preemption on this processor
+	// Last function to enable preemption on this processor
+	char * last_enable;
 #endif
 };
 
-void ?{}(processor & this);
-void ?{}(processor & this, cluster * cltr);
+void  ?{}(processor & this);
+void  ?{}(processor & this, cluster * cltr);
 void ^?{}(processor & this);
 
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/concurrency/kernel.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -106,5 +106,5 @@
 
 void ?{}( thread_desc & this, current_stack_info_t * info) {
-	(this.cor){ info };
+	(this.self_cor){ info };
 }
 
@@ -158,5 +158,5 @@
 		LIB_DEBUG_PRINT_SAFE("Kernel : core %p signaling termination\n", &this);
 		this.do_terminate = true;
-		P( &this.terminated );
+		P( this.terminated );
 		pthread_join( this.kernel_thread, NULL );
 	}
@@ -216,5 +216,5 @@
 	}
 
-	V( &this->terminated );
+	V( this->terminated );
 
 	LIB_DEBUG_PRINT_SAFE("Kernel : core %p terminated\n", this);
@@ -328,5 +328,5 @@
 	// if( !thrd ) return;
 	verify( thrd );
-	verify( thrd->cor.state != Halted );
+	verify( thrd->self_cor.state != Halted );
 
 	verify( disable_preempt_count > 0 );
@@ -335,5 +335,5 @@
 
 	lock(   &this_processor->cltr->ready_queue_lock DEBUG_CTX2 );
-	append( &this_processor->cltr->ready_queue, thrd );
+	append( this_processor->cltr->ready_queue, thrd );
 	unlock( &this_processor->cltr->ready_queue_lock );
 
@@ -344,5 +344,5 @@
 	verify( disable_preempt_count > 0 );
 	lock( &this->ready_queue_lock DEBUG_CTX2 );
-	thread_desc * head = pop_head( &this->ready_queue );
+	thread_desc * head = pop_head( this->ready_queue );
 	unlock( &this->ready_queue_lock );
 	verify( disable_preempt_count > 0 );
@@ -373,5 +373,5 @@
 	assert(thrd);
 	disable_interrupts();
-	assert( thrd->cor.state != Halted );
+	assert( thrd->self_cor.state != Halted );
 	this_processor->finish.action_code = Schedule;
 	this_processor->finish.thrd = thrd;
@@ -398,5 +398,5 @@
 }
 
-void BlockInternal(spinlock ** locks, unsigned short count) {
+void BlockInternal(spinlock * locks [], unsigned short count) {
 	disable_interrupts();
 	this_processor->finish.action_code = Release_Multi;
@@ -411,5 +411,5 @@
 }
 
-void BlockInternal(spinlock ** locks, unsigned short lock_count, thread_desc ** thrds, unsigned short thrd_count) {
+void BlockInternal(spinlock * locks [], unsigned short lock_count, thread_desc * thrds [], unsigned short thrd_count) {
 	disable_interrupts();
 	this_processor->finish.action_code = Release_Multi_Schedule;
@@ -466,5 +466,5 @@
 	this_processor = mainProcessor;
 	this_thread = mainThread;
-	this_coroutine = &mainThread->cor;
+	this_coroutine = &mainThread->self_cor;
 
 	// Enable preemption
@@ -547,13 +547,13 @@
 	thread_desc * thrd = kernel_data;
 
-	int len = snprintf( abort_text, abort_text_size, "Error occurred while executing task %.256s (%p)", thrd->cor.name, thrd );
-	__lib_debug_write( STDERR_FILENO, abort_text, len );
+	int len = snprintf( abort_text, abort_text_size, "Error occurred while executing task %.256s (%p)", thrd->self_cor.name, thrd );
+	__lib_debug_write( abort_text, len );
 
 	if ( thrd != this_coroutine ) {
 		len = snprintf( abort_text, abort_text_size, " in coroutine %.256s (%p).\n", this_coroutine->name, this_coroutine );
-		__lib_debug_write( STDERR_FILENO, abort_text, len );
+		__lib_debug_write( abort_text, len );
 	}
 	else {
-		__lib_debug_write( STDERR_FILENO, ".\n", 2 );
+		__lib_debug_write( ".\n", 2 );
 	}
 }
@@ -618,29 +618,29 @@
 void ^?{}(semaphore & this) {}
 
-void P(semaphore * this) {
-	lock( &this->lock DEBUG_CTX2 );
-	this->count -= 1;
-	if ( this->count < 0 ) {
+void P(semaphore & this) {
+	lock( &this.lock DEBUG_CTX2 );
+	this.count -= 1;
+	if ( this.count < 0 ) {
 		// queue current task
-		append( &this->waiting, (thread_desc *)this_thread );
+		append( this.waiting, (thread_desc *)this_thread );
 
 		// atomically release spin lock and block
-		BlockInternal( &this->lock );
+		BlockInternal( &this.lock );
 	}
 	else {
-	    unlock( &this->lock );
-	}
-}
-
-void V(semaphore * this) {
+	    unlock( &this.lock );
+	}
+}
+
+void V(semaphore & this) {
 	thread_desc * thrd = NULL;
-	lock( &this->lock DEBUG_CTX2 );
-	this->count += 1;
-	if ( this->count <= 0 ) {
+	lock( &this.lock DEBUG_CTX2 );
+	this.count += 1;
+	if ( this.count <= 0 ) {
 		// remove task at head of waiting list
-		thrd = pop_head( &this->waiting );
-	}
-
-	unlock( &this->lock );
+		thrd = pop_head( this.waiting );
+	}
+
+	unlock( &this.lock );
 
 	// make new owner
@@ -655,16 +655,16 @@
 }
 
-void append( __thread_queue_t * this, thread_desc * t ) {
-	verify(this->tail != NULL);
-	*this->tail = t;
-	this->tail = &t->next;
-}
-
-thread_desc * pop_head( __thread_queue_t * this ) {
-	thread_desc * head = this->head;
+void append( __thread_queue_t & this, thread_desc * t ) {
+	verify(this.tail != NULL);
+	*this.tail = t;
+	this.tail = &t->next;
+}
+
+thread_desc * pop_head( __thread_queue_t & this ) {
+	thread_desc * head = this.head;
 	if( head ) {
-		this->head = head->next;
+		this.head = head->next;
 		if( !head->next ) {
-			this->tail = &this->head;
+			this.tail = &this.head;
 		}
 		head->next = NULL;
@@ -673,5 +673,5 @@
 }
 
-thread_desc * remove( __thread_queue_t * this, thread_desc ** it ) {
+thread_desc * remove( __thread_queue_t & this, thread_desc ** it ) {
 	thread_desc * thrd = *it;
 	verify( thrd );
@@ -679,12 +679,12 @@
 	(*it) = thrd->next;
 
-	if( this->tail == &thrd->next ) {
-		this->tail = it;
+	if( this.tail == &thrd->next ) {
+		this.tail = it;
 	}
 
 	thrd->next = NULL;
 
-	verify( (this->head == NULL) == (&this->head == this->tail) );
-	verify( *this->tail == NULL );
+	verify( (this.head == NULL) == (&this.head == this.tail) );
+	verify( *this.tail == NULL );
 	return thrd;
 }
@@ -694,14 +694,14 @@
 }
 
-void push( __condition_stack_t * this, __condition_criterion_t * t ) {
+void push( __condition_stack_t & this, __condition_criterion_t * t ) {
 	verify( !t->next );
-	t->next = this->top;
-	this->top = t;
-}
-
-__condition_criterion_t * pop( __condition_stack_t * this ) {
-	__condition_criterion_t * top = this->top;
+	t->next = this.top;
+	this.top = t;
+}
+
+__condition_criterion_t * pop( __condition_stack_t & this ) {
+	__condition_criterion_t * top = this.top;
 	if( top ) {
-		this->top = top->next;
+		this.top = top->next;
 		top->next = NULL;
 	}
Index: src/libcfa/concurrency/kernel_private.h
===================================================================
--- src/libcfa/concurrency/kernel_private.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/concurrency/kernel_private.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -48,6 +48,6 @@
 void BlockInternal(thread_desc * thrd);
 void BlockInternal(spinlock * lock, thread_desc * thrd);
-void BlockInternal(spinlock ** locks, unsigned short count);
-void BlockInternal(spinlock ** locks, unsigned short count, thread_desc ** thrds, unsigned short thrd_count);
+void BlockInternal(spinlock * locks [], unsigned short count);
+void BlockInternal(spinlock * locks [], unsigned short count, thread_desc * thrds [], unsigned short thrd_count);
 void LeaveThread(spinlock * lock, thread_desc * thrd);
 
Index: src/libcfa/concurrency/monitor
===================================================================
--- src/libcfa/concurrency/monitor	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/concurrency/monitor	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Thd Feb 23 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 09:59:01 2017
-// Update Count     : 3
+// Last Modified On : Sat Oct  7 18:06:45 2017
+// Update Count     : 10
 //
 
@@ -22,29 +22,47 @@
 #include "stdlib"
 
+trait is_monitor(dtype T) {
+	monitor_desc * get_monitor( T & );
+	void ^?{}( T & mutex );
+};
+
 static inline void ?{}(monitor_desc & this) {
 	(this.lock){};
-	this.owner = NULL;
 	(this.entry_queue){};
 	(this.signal_stack){};
-	this.recursion = 0;
-	this.acceptables = NULL;
-	this.acceptable_count = 0;
-	this.accepted_index = -1;
+	this.owner         = NULL;
+	this.recursion     = 0;
+	this.mask.accepted = NULL;
+	this.mask.clauses  = NULL;
+	this.mask.size     = 0;
+	this.dtor_node     = NULL;
 }
 
 struct monitor_guard_t {
 	monitor_desc ** m;
-	int count;
+	__lock_size_t   count;
 	monitor_desc ** prev_mntrs;
-	unsigned short  prev_count;
+	__lock_size_t   prev_count;
 	fptr_t          prev_func;
 };
 
-static inline int ?<?(monitor_desc* lhs, monitor_desc* rhs) {
-	return ((intptr_t)lhs) < ((intptr_t)rhs);
+void ?{}( monitor_guard_t & this, monitor_desc ** m, __lock_size_t count, void (*func)() );
+void ^?{}( monitor_guard_t & this );
+
+struct monitor_dtor_guard_t {
+	monitor_desc * m;
+	monitor_desc ** prev_mntrs;
+	__lock_size_t   prev_count;
+	fptr_t          prev_func;
+};
+
+void ?{}( monitor_dtor_guard_t & this, monitor_desc ** m, void (*func)() );
+void ^?{}( monitor_dtor_guard_t & this );
+
+static inline forall( dtype T | sized(T) | { void ^?{}( T & mutex ); } )
+void delete( T * th ) {
+	^(*th){};
+	free( th );
 }
-
-void ?{}( monitor_guard_t & this, monitor_desc ** m, int count, void (*func)() );
-void ^?{}( monitor_guard_t & this );
 
 //-----------------------------------------------------------------------------
@@ -52,16 +70,32 @@
 
 struct __condition_criterion_t {
-	bool ready;						//Whether or not the criterion is met (True if met)
-	monitor_desc * target;				//The monitor this criterion concerns
-	struct __condition_node_t * owner;		//The parent node to which this criterion belongs
-	__condition_criterion_t * next;		//Intrusive linked list Next field
+	// Whether or not the criterion is met (True if met)
+	bool ready;
+
+	// The monitor this criterion concerns
+	monitor_desc * target;
+
+	// The parent node to which this criterion belongs
+	struct __condition_node_t * owner;
+
+	// Intrusive linked list Next field
+	__condition_criterion_t * next;
 };
 
 struct __condition_node_t {
-	thread_desc * waiting_thread;			//Thread that needs to be woken when all criteria are met
-	__condition_criterion_t * criteria; 	//Array of criteria (Criterions are contiguous in memory)
-	unsigned short count;				//Number of criterions in the criteria
-	__condition_node_t * next;			//Intrusive linked list Next field
-	uintptr_t user_info;				//Custom user info accessible before signalling
+	// Thread that needs to be woken when all criteria are met
+	thread_desc * waiting_thread;
+
+	// Array of criteria (Criterions are contiguous in memory)
+	__condition_criterion_t * criteria;
+
+	// Number of criterions in the criteria
+	__lock_size_t count;
+
+	// Intrusive linked list Next field
+	__condition_node_t * next;
+
+	// Custom user info accessible before signalling
+	uintptr_t user_info;
 };
 
@@ -71,12 +105,21 @@
 };
 
+void ?{}(__condition_node_t & this, thread_desc * waiting_thread, __lock_size_t count, uintptr_t user_info );
+void ?{}(__condition_criterion_t & this );
+void ?{}(__condition_criterion_t & this, monitor_desc * target, __condition_node_t * owner );
+
 void ?{}( __condition_blocked_queue_t & );
-void append( __condition_blocked_queue_t *, __condition_node_t * );
-__condition_node_t * pop_head( __condition_blocked_queue_t * );
+void append( __condition_blocked_queue_t &, __condition_node_t * );
+__condition_node_t * pop_head( __condition_blocked_queue_t & );
 
 struct condition {
-	__condition_blocked_queue_t blocked;	//Link list which contains the blocked threads as-well as the information needed to unblock them
-	monitor_desc ** monitors;			//Array of monitor pointers (Monitors are NOT contiguous in memory)
-	unsigned short monitor_count;			//Number of monitors in the array
+	// Link list which contains the blocked threads as-well as the information needed to unblock them
+	__condition_blocked_queue_t blocked;
+
+	// Array of monitor pointers (Monitors are NOT contiguous in memory)
+	monitor_desc ** monitors;
+
+	// Number of monitors in the array
+	__lock_size_t monitor_count;
 };
 
@@ -90,9 +133,9 @@
 }
 
-void wait( condition * this, uintptr_t user_info = 0 );
-bool signal( condition * this );
-bool signal_block( condition * this );
-static inline bool is_empty( condition * this ) { return !this->blocked.head; }
-uintptr_t front( condition * this );
+              void wait        ( condition & this, uintptr_t user_info = 0 );
+              bool signal      ( condition & this );
+              bool signal_block( condition & this );
+static inline bool is_empty    ( condition & this ) { return !this.blocked.head; }
+         uintptr_t front       ( condition & this );
 
 //-----------------------------------------------------------------------------
@@ -100,11 +143,9 @@
 
 struct __acceptable_t {
-	fptr_t func;
-	unsigned short count;
-	monitor_desc ** monitors;
+	__monitor_group_t;
 	bool is_dtor;
 };
 
-int __accept_internal( unsigned short count, __acceptable_t * acceptables );
+void __waitfor_internal( const __waitfor_mask_t & mask, int duration );
 
 // Local Variables: //
Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/concurrency/monitor.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -17,48 +17,63 @@
 
 #include <stdlib>
+#include <inttypes.h>
 
 #include "libhdr.h"
 #include "kernel_private.h"
 
+#include "bits/algorithms.h"
+
 //-----------------------------------------------------------------------------
 // Forward declarations
-static inline void set_owner( monitor_desc * this, thread_desc * owner );
+static inline void set_owner ( monitor_desc * this, thread_desc * owner );
+static inline void set_owner ( monitor_desc * storage [], __lock_size_t count, thread_desc * owner );
+static inline void set_mask  ( monitor_desc * storage [], __lock_size_t count, const __waitfor_mask_t & mask );
+static inline void reset_mask( monitor_desc * this );
+
 static inline thread_desc * next_thread( monitor_desc * this );
-static inline int is_accepted( thread_desc * owner, monitor_desc * this, monitor_desc ** group, int group_cnt, void (*func)() );
-
-static inline void lock_all( spinlock ** locks, unsigned short count );
-static inline void lock_all( monitor_desc ** source, spinlock ** /*out*/ locks, unsigned short count );
-static inline void unlock_all( spinlock ** locks, unsigned short count );
-static inline void unlock_all( monitor_desc ** locks, unsigned short count );
-
-static inline void save_recursion   ( monitor_desc ** ctx, unsigned int * /*out*/ recursions, unsigned short count );
-static inline void restore_recursion( monitor_desc ** ctx, unsigned int * /*in */ recursions, unsigned short count );
-
-static inline void init     ( int count, monitor_desc ** monitors, __condition_node_t * waiter, __condition_criterion_t * criteria );
-static inline void init_push( int count, monitor_desc ** monitors, __condition_node_t * waiter, __condition_criterion_t * criteria );
-
-static inline thread_desc * check_condition( __condition_criterion_t * );
-static inline void brand_condition( condition * );
-static inline unsigned short insert_unique( thread_desc ** thrds, unsigned short end, thread_desc * val );
-
-static inline thread_desc * search_entry_queue( __acceptable_t * acceptables, int acc_count, monitor_desc ** monitors, int count );
+static inline bool is_accepted( monitor_desc * this, const __monitor_group_t & monitors );
+
+static inline void lock_all  ( spinlock * locks [], __lock_size_t count );
+static inline void lock_all  ( monitor_desc * source [], spinlock * /*out*/ locks [], __lock_size_t count );
+static inline void unlock_all( spinlock * locks [], __lock_size_t count );
+static inline void unlock_all( monitor_desc * locks [], __lock_size_t count );
+
+static inline void save   ( monitor_desc * ctx [], __lock_size_t count, spinlock * locks [], unsigned int /*out*/ recursions [], __waitfor_mask_t /*out*/ masks [] );
+static inline void restore( monitor_desc * ctx [], __lock_size_t count, spinlock * locks [], unsigned int /*in */ recursions [], __waitfor_mask_t /*in */ masks [] );
+
+static inline void init     ( __lock_size_t count, monitor_desc * monitors [], __condition_node_t & waiter, __condition_criterion_t criteria [] );
+static inline void init_push( __lock_size_t count, monitor_desc * monitors [], __condition_node_t & waiter, __condition_criterion_t criteria [] );
+
+static inline thread_desc *        check_condition   ( __condition_criterion_t * );
+static inline void                 brand_condition   ( condition & );
+static inline [thread_desc *, int] search_entry_queue( const __waitfor_mask_t &, monitor_desc * monitors [], __lock_size_t count );
+
+forall(dtype T | sized( T ))
+static inline __lock_size_t insert_unique( T * array [], __lock_size_t & size, T * val );
+static inline __lock_size_t count_max    ( const __waitfor_mask_t & mask );
+static inline __lock_size_t aggregate    ( monitor_desc * storage [], const __waitfor_mask_t & mask );
 
 //-----------------------------------------------------------------------------
 // Useful defines
-#define wait_ctx(thrd, user_info)                               /* Create the necessary information to use the signaller stack       */ \
-	__condition_node_t waiter = { thrd, count, user_info };   /* Create the node specific to this wait operation                   */ \
-	__condition_criterion_t criteria[count];                  /* Create the creteria this wait operation needs to wake up          */ \
-	init( count, monitors, &waiter, criteria );               /* Link everything together                                          */ \
-
-#define wait_ctx_primed(thrd, user_info)                        /* Create the necessary information to use the signaller stack       */ \
-	__condition_node_t waiter = { thrd, count, user_info };   /* Create the node specific to this wait operation                   */ \
-	__condition_criterion_t criteria[count];                  /* Create the creteria this wait operation needs to wake up          */ \
-	init_push( count, monitors, &waiter, criteria );          /* Link everything together and push it to the AS-Stack              */ \
-
-#define monitor_ctx( mons, cnt )              /* Define that create the necessary struct for internal/external scheduling operations */ \
-	monitor_desc ** monitors = mons;        /* Save the targeted monitors                                                          */ \
-	unsigned short count = cnt;             /* Save the count to a local variable                                                  */ \
-	unsigned int recursions[ count ];       /* Save the current recursion levels to restore them later                             */ \
-	spinlock *   locks     [ count ];       /* We need to pass-in an array of locks to BlockInternal                               */ \
+#define wait_ctx(thrd, user_info)                               /* Create the necessary information to use the signaller stack                         */ \
+	__condition_node_t waiter = { thrd, count, user_info };   /* Create the node specific to this wait operation                                     */ \
+	__condition_criterion_t criteria[count];                  /* Create the creteria this wait operation needs to wake up                            */ \
+	init( count, monitors, waiter, criteria );                /* Link everything together                                                            */ \
+
+#define wait_ctx_primed(thrd, user_info)                        /* Create the necessary information to use the signaller stack                         */ \
+	__condition_node_t waiter = { thrd, count, user_info };   /* Create the node specific to this wait operation                                     */ \
+	__condition_criterion_t criteria[count];                  /* Create the creteria this wait operation needs to wake up                            */ \
+	init_push( count, monitors, waiter, criteria );           /* Link everything together and push it to the AS-Stack                                */ \
+
+#define monitor_ctx( mons, cnt )                                /* Define that create the necessary struct for internal/external scheduling operations */ \
+	monitor_desc ** monitors = mons;                          /* Save the targeted monitors                                                          */ \
+	__lock_size_t count = cnt;                                /* Save the count to a local variable                                                  */ \
+	unsigned int recursions[ count ];                         /* Save the current recursion levels to restore them later                             */ \
+	__waitfor_mask_t masks [ count ];                         /* Save the current waitfor masks to restore them later                                */ \
+	spinlock *   locks     [ count ];                         /* We need to pass-in an array of locks to BlockInternal                               */ \
+
+#define monitor_save    save   ( monitors, count, locks, recursions, masks )
+#define monitor_restore restore( monitors, count, locks, recursions, masks )
+
 
 //-----------------------------------------------------------------------------
@@ -68,5 +83,5 @@
 extern "C" {
 	// Enter single monitor
-	static void __enter_monitor_desc( monitor_desc * this, monitor_desc ** group, int group_cnt, void (*func)() ) {
+	static void __enter_monitor_desc( monitor_desc * this, const __monitor_group_t & group ) {
 		// Lock the monitor spinlock, lock_yield to reduce contention
 		lock_yield( &this->lock DEBUG_CTX2 );
@@ -75,5 +90,4 @@
 		LIB_DEBUG_PRINT_SAFE("Kernel : %10p Entering mon %p (%p)\n", thrd, this, this->owner);
 
-		this->accepted_index = -1;
 		if( !this->owner ) {
 			// No one has the monitor, just take it
@@ -83,14 +97,16 @@
 		}
 		else if( this->owner == thrd) {
-			// We already have the monitor, just not how many times we took it
-			verify( this->recursion > 0 );
+			// We already have the monitor, just note how many times we took it
 			this->recursion += 1;
 
 			LIB_DEBUG_PRINT_SAFE("Kernel :  mon already owned \n");
 		}
-		else if( (this->accepted_index = is_accepted( thrd, this, group, group_cnt, func)) >= 0 ) {
+		else if( is_accepted( this, group) ) {
 			// Some one was waiting for us, enter
 			set_owner( this, thrd );
 
+			// Reset mask
+			reset_mask( this );
+
 			LIB_DEBUG_PRINT_SAFE("Kernel :  mon accepts \n");
 		}
@@ -99,5 +115,5 @@
 
 			// Some one else has the monitor, wait in line for it
-			append( &this->entry_queue, thrd );
+			append( this->entry_queue, thrd );
 			BlockInternal( &this->lock );
 
@@ -113,4 +129,67 @@
 		unlock( &this->lock );
 		return;
+	}
+
+	static void __enter_monitor_dtor( monitor_desc * this, fptr_t func ) {
+		// Lock the monitor spinlock, lock_yield to reduce contention
+		lock_yield( &this->lock DEBUG_CTX2 );
+		thread_desc * thrd = this_thread;
+
+		LIB_DEBUG_PRINT_SAFE("Kernel : %10p Entering dtor for mon %p (%p)\n", thrd, this, this->owner);
+
+
+		if( !this->owner ) {
+			LIB_DEBUG_PRINT_SAFE("Kernel : Destroying free mon %p\n", this);
+
+			// No one has the monitor, just take it
+			set_owner( this, thrd );
+
+			unlock( &this->lock );
+			return;
+		}
+		else if( this->owner == thrd) {
+			// We already have the monitor... but where about to destroy it so the nesting will fail
+			// Abort!
+			abortf("Attempt to destroy monitor %p by thread \"%.256s\" (%p) in nested mutex.");
+		}
+
+		__lock_size_t count = 1;
+		monitor_desc ** monitors = &this;
+		__monitor_group_t group = { &this, 1, func };
+		if( is_accepted( this, group) ) {
+			LIB_DEBUG_PRINT_SAFE("Kernel :  mon accepts dtor, block and signal it \n");
+
+			// Wake the thread that is waiting for this
+			__condition_criterion_t * urgent = pop( this->signal_stack );
+			verify( urgent );
+
+			// Reset mask
+			reset_mask( this );
+
+			// Create the node specific to this wait operation
+			wait_ctx_primed( this_thread, 0 )
+
+			// Some one else has the monitor, wait for him to finish and then run
+			BlockInternal( &this->lock, urgent->owner->waiting_thread );
+
+			// Some one was waiting for us, enter
+			set_owner( this, thrd );
+		}
+		else {
+			LIB_DEBUG_PRINT_SAFE("Kernel :  blocking \n");
+
+			wait_ctx( this_thread, 0 )
+			this->dtor_node = &waiter;
+
+			// Some one else has the monitor, wait in line for it
+			append( this->entry_queue, thrd );
+			BlockInternal( &this->lock );
+
+			// BlockInternal will unlock spinlock, no need to unlock ourselves
+			return;
+		}
+
+		LIB_DEBUG_PRINT_SAFE("Kernel : Destroying %p\n", this);
+
 	}
 
@@ -120,5 +199,7 @@
 		lock_yield( &this->lock DEBUG_CTX2 );
 
-		verifyf( this_thread == this->owner, "Expected owner to be %p, got %p (r: %i)", this_thread, this->owner, this->recursion );
+		LIB_DEBUG_PRINT_SAFE("Kernel : %10p Leaving mon %p (%p)\n", this_thread, this, this->owner);
+
+		verifyf( this_thread == this->owner, "Expected owner to be %p, got %p (r: %i, m: %p)", this_thread, this->owner, this->recursion, this );
 
 		// Leaving a recursion level, decrement the counter
@@ -128,4 +209,5 @@
 		// it means we don't need to do anything
 		if( this->recursion != 0) {
+			LIB_DEBUG_PRINT_SAFE("Kernel :  recursion still %d\n", this->recursion);
 			unlock( &this->lock );
 			return;
@@ -140,4 +222,16 @@
 		//We need to wake-up the thread
 		WakeThread( new_owner );
+	}
+
+	// Leave single monitor for the last time
+	void __leave_dtor_monitor_desc( monitor_desc * this ) {
+		LIB_DEBUG_DO(
+			if( this_thread != this->owner ) {
+				abortf("Destroyed monitor %p has inconsistent owner, expected %p got %p.\n", this, this_thread, this->owner);
+			}
+			if( this->recursion != 1 ) {
+				abortf("Destroyed monitor %p has %d outstanding nested calls.\n", this, this->recursion - 1);
+			}
+		)
 	}
 
@@ -146,5 +240,5 @@
 	// Should never return
 	void __leave_thread_monitor( thread_desc * thrd ) {
-		monitor_desc * this = &thrd->mon;
+		monitor_desc * this = &thrd->self_mon;
 
 		// Lock the monitor now
@@ -153,7 +247,7 @@
 		disable_interrupts();
 
-		thrd->cor.state = Halted;
-
-		verifyf( thrd == this->owner, "Expected owner to be %p, got %p (r: %i)", thrd, this->owner, this->recursion );
+		thrd->self_cor.state = Halted;
+
+		verifyf( thrd == this->owner, "Expected owner to be %p, got %p (r: %i, m: %p)", thrd, this->owner, this->recursion, this );
 
 		// Leaving a recursion level, decrement the counter
@@ -178,7 +272,7 @@
 // Enter multiple monitor
 // relies on the monitor array being sorted
-static inline void enter(monitor_desc ** monitors, int count, void (*func)() ) {
-	for(int i = 0; i < count; i++) {
-		__enter_monitor_desc( monitors[i], monitors, count, func );
+static inline void enter( __monitor_group_t monitors ) {
+	for( __lock_size_t i = 0; i < monitors.size; i++) {
+		__enter_monitor_desc( monitors.list[i], monitors );
 	}
 }
@@ -186,6 +280,6 @@
 // Leave multiple monitor
 // relies on the monitor array being sorted
-static inline void leave(monitor_desc ** monitors, int count) {
-	for(int i = count - 1; i >= 0; i--) {
+static inline void leave(monitor_desc * monitors [], __lock_size_t count) {
+	for( __lock_size_t i = count - 1; i >= 0; i--) {
 		__leave_monitor_desc( monitors[i] );
 	}
@@ -194,5 +288,5 @@
 // Ctor for monitor guard
 // Sorts monitors before entering
-void ?{}( monitor_guard_t & this, monitor_desc ** m, int count, void (*func)() ) {
+void ?{}( monitor_guard_t & this, monitor_desc * m [], __lock_size_t count, fptr_t func ) {
 	// Store current array
 	this.m = m;
@@ -200,18 +294,19 @@
 
 	// Sort monitors based on address -> TODO use a sort specialized for small numbers
-	qsort(this.m, count);
+	__libcfa_small_sort(this.m, count);
 
 	// Save previous thread context
-	this.prev_mntrs = this_thread->current_monitors;
-	this.prev_count = this_thread->current_monitor_count;
-	this.prev_func  = this_thread->current_monitor_func;
+	this.[prev_mntrs, prev_count, prev_func] = this_thread->monitors.[list, size, func];
 
 	// Update thread context (needed for conditions)
-	this_thread->current_monitors      = m;
-	this_thread->current_monitor_count = count;
-	this_thread->current_monitor_func  = func;
+	this_thread->monitors.[list, size, func] = [m, count, func];
+
+	// LIB_DEBUG_PRINT_SAFE("MGUARD : enter %d\n", count);
 
 	// Enter the monitors in order
-	enter( this.m, this.count, func );
+	__monitor_group_t group = {this.m, this.count, func};
+	enter( group );
+
+	// LIB_DEBUG_PRINT_SAFE("MGUARD : entered\n");
 }
 
@@ -219,16 +314,42 @@
 // Dtor for monitor guard
 void ^?{}( monitor_guard_t & this ) {
+	// LIB_DEBUG_PRINT_SAFE("MGUARD : leaving %d\n", this.count);
+
 	// Leave the monitors in order
 	leave( this.m, this.count );
 
+	// LIB_DEBUG_PRINT_SAFE("MGUARD : left\n");
+
 	// Restore thread context
-	this_thread->current_monitors      = this.prev_mntrs;
-	this_thread->current_monitor_count = this.prev_count;
-	this_thread->current_monitor_func  = this.prev_func;
+	this_thread->monitors.[list, size, func] = this.[prev_mntrs, prev_count, prev_func];
+}
+
+// Ctor for monitor guard
+// Sorts monitors before entering
+void ?{}( monitor_dtor_guard_t & this, monitor_desc * m [], fptr_t func ) {
+	// Store current array
+	this.m = *m;
+
+	// Save previous thread context
+	this.[prev_mntrs, prev_count, prev_func] = this_thread->monitors.[list, size, func];
+
+	// Update thread context (needed for conditions)
+	this_thread->monitors.[list, size, func] = [m, 1, func];
+
+	__enter_monitor_dtor( this.m, func );
+}
+
+// Dtor for monitor guard
+void ^?{}( monitor_dtor_guard_t & this ) {
+	// Leave the monitors in order
+	__leave_dtor_monitor_desc( this.m );
+
+	// Restore thread context
+	this_thread->monitors.[list, size, func] = this.[prev_mntrs, prev_count, prev_func];
 }
 
 //-----------------------------------------------------------------------------
 // Internal scheduling types
-void ?{}(__condition_node_t & this, thread_desc * waiting_thread, unsigned short count, uintptr_t user_info ) {
+void ?{}(__condition_node_t & this, thread_desc * waiting_thread, __lock_size_t count, uintptr_t user_info ) {
 	this.waiting_thread = waiting_thread;
 	this.count = count;
@@ -244,8 +365,8 @@
 }
 
-void ?{}(__condition_criterion_t & this, monitor_desc * target, __condition_node_t * owner ) {
+void ?{}(__condition_criterion_t & this, monitor_desc * target, __condition_node_t & owner ) {
 	this.ready  = false;
 	this.target = target;
-	this.owner  = owner;
+	this.owner  = &owner;
 	this.next   = NULL;
 }
@@ -253,14 +374,14 @@
 //-----------------------------------------------------------------------------
 // Internal scheduling
-void wait( condition * this, uintptr_t user_info = 0 ) {
+void wait( condition & this, uintptr_t user_info = 0 ) {
 	brand_condition( this );
 
 	// Check that everything is as expected
-	assertf( this->monitors != NULL, "Waiting with no monitors (%p)", this->monitors );
-	verifyf( this->monitor_count != 0, "Waiting with 0 monitors (%i)", this->monitor_count );
-	verifyf( this->monitor_count < 32u, "Excessive monitor count (%i)", this->monitor_count );
+	assertf( this.monitors != NULL, "Waiting with no monitors (%p)", this.monitors );
+	verifyf( this.monitor_count != 0, "Waiting with 0 monitors (%"PRIiFAST16")", this.monitor_count );
+	verifyf( this.monitor_count < 32u, "Excessive monitor count (%"PRIiFAST16")", this.monitor_count );
 
 	// Create storage for monitor context
-	monitor_ctx( this->monitors, this->monitor_count );
+	monitor_ctx( this.monitors, this.monitor_count );
 
 	// Create the node specific to this wait operation
@@ -269,25 +390,21 @@
 	// Append the current wait operation to the ones already queued on the condition
 	// We don't need locks for that since conditions must always be waited on inside monitor mutual exclusion
-	append( &this->blocked, &waiter );
-
-	// Lock all monitors (aggregates the lock them as well)
+	append( this.blocked, &waiter );
+
+	// Lock all monitors (aggregates the locks as well)
 	lock_all( monitors, locks, count );
 
-	// DON'T unlock, ask the kernel to do it
-
-	// Save monitor state
-	save_recursion( monitors, recursions, count );
-
 	// Find the next thread(s) to run
-	unsigned short thread_count = 0;
+	__lock_size_t thread_count = 0;
 	thread_desc * threads[ count ];
-	for(int i = 0; i < count; i++) {
-		threads[i] = 0;
-	}
+	__builtin_memset( threads, 0, sizeof( threads ) );
+
+	// Save monitor states
+	monitor_save;
 
 	// Remove any duplicate threads
-	for( int i = 0; i < count; i++) {
+	for( __lock_size_t i = 0; i < count; i++) {
 		thread_desc * new_owner = next_thread( monitors[i] );
-		thread_count = insert_unique( threads, thread_count, new_owner );
+		insert_unique( threads, thread_count, new_owner );
 	}
 
@@ -295,42 +412,36 @@
 	BlockInternal( locks, count, threads, thread_count );
 
-
-	// WE WOKE UP
-
-
 	// We are back, restore the owners and recursions
-	lock_all( locks, count );
-	restore_recursion( monitors, recursions, count );
-	unlock_all( locks, count );
-}
-
-bool signal( condition * this ) {
+	monitor_restore;
+}
+
+bool signal( condition & this ) {
 	if( is_empty( this ) ) { return false; }
 
 	//Check that everything is as expected
-	verify( this->monitors );
-	verify( this->monitor_count != 0 );
+	verify( this.monitors );
+	verify( this.monitor_count != 0 );
 
 	//Some more checking in debug
 	LIB_DEBUG_DO(
 		thread_desc * this_thrd = this_thread;
-		if ( this->monitor_count != this_thrd->current_monitor_count ) {
-			abortf( "Signal on condition %p made with different number of monitor(s), expected %i got %i", this, this->monitor_count, this_thrd->current_monitor_count );
-		}
-
-		for(int i = 0; i < this->monitor_count; i++) {
-			if ( this->monitors[i] != this_thrd->current_monitors[i] ) {
-				abortf( "Signal on condition %p made with different monitor, expected %p got %i", this, this->monitors[i], this_thrd->current_monitors[i] );
+		if ( this.monitor_count != this_thrd->monitors.size ) {
+			abortf( "Signal on condition %p made with different number of monitor(s), expected %i got %i", &this, this.monitor_count, this_thrd->monitors.size );
+		}
+
+		for(int i = 0; i < this.monitor_count; i++) {
+			if ( this.monitors[i] != this_thrd->monitors.list[i] ) {
+				abortf( "Signal on condition %p made with different monitor, expected %p got %i", &this, this.monitors[i], this_thrd->monitors.list[i] );
 			}
 		}
 	);
 
-	unsigned short count = this->monitor_count;
+	__lock_size_t count = this.monitor_count;
 
 	// Lock all monitors
-	lock_all( this->monitors, NULL, count );
+	lock_all( this.monitors, NULL, count );
 
 	//Pop the head of the waiting queue
-	__condition_node_t * node = pop_head( &this->blocked );
+	__condition_node_t * node = pop_head( this.blocked );
 
 	//Add the thread to the proper AS stack
@@ -338,22 +449,22 @@
 		__condition_criterion_t * crit = &node->criteria[i];
 		assert( !crit->ready );
-		push( &crit->target->signal_stack, crit );
+		push( crit->target->signal_stack, crit );
 	}
 
 	//Release
-	unlock_all( this->monitors, count );
+	unlock_all( this.monitors, count );
 
 	return true;
 }
 
-bool signal_block( condition * this ) {
-	if( !this->blocked.head ) { return false; }
+bool signal_block( condition & this ) {
+	if( !this.blocked.head ) { return false; }
 
 	//Check that everything is as expected
-	verifyf( this->monitors != NULL, "Waiting with no monitors (%p)", this->monitors );
-	verifyf( this->monitor_count != 0, "Waiting with 0 monitors (%i)", this->monitor_count );
+	verifyf( this.monitors != NULL, "Waiting with no monitors (%p)", this.monitors );
+	verifyf( this.monitor_count != 0, "Waiting with 0 monitors (%"PRIiFAST16")", this.monitor_count );
 
 	// Create storage for monitor context
-	monitor_ctx( this->monitors, this->monitor_count );
+	monitor_ctx( this.monitors, this.monitor_count );
 
 	// Lock all monitors (aggregates the locks them as well)
@@ -364,11 +475,11 @@
 
 	//save contexts
-	save_recursion( monitors, recursions, count );
+	monitor_save;
 
 	//Find the thread to run
-	thread_desc * signallee = pop_head( &this->blocked )->waiting_thread;
-	for(int i = 0; i < count; i++) {
-		set_owner( monitors[i], signallee );
-	}
+	thread_desc * signallee = pop_head( this.blocked )->waiting_thread;
+	set_owner( monitors, count, signallee );
+
+	LIB_DEBUG_PRINT_BUFFER_DECL( "Kernel : signal_block condition %p (s: %p)\n", &this, signallee );
 
 	//Everything is ready to go to sleep
@@ -379,8 +490,8 @@
 
 
-	//We are back, restore the owners and recursions
-	lock_all( locks, count );
-	restore_recursion( monitors, recursions, count );
-	unlock_all( locks, count );
+	LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel :   signal_block returned\n" );
+
+	//We are back, restore the masks and recursions
+	monitor_restore;
 
 	return true;
@@ -388,68 +499,138 @@
 
 // Access the user_info of the thread waiting at the front of the queue
-uintptr_t front( condition * this ) {
+uintptr_t front( condition & this ) {
 	verifyf( !is_empty(this),
 		"Attempt to access user data on an empty condition.\n"
 		"Possible cause is not checking if the condition is empty before reading stored data."
 	);
-	return this->blocked.head->user_info;
+	return this.blocked.head->user_info;
 }
 
 //-----------------------------------------------------------------------------
-// Internal scheduling
-int __accept_internal( unsigned short acc_count, __acceptable_t * acceptables ) {
-	thread_desc * thrd = this_thread;
+// External scheduling
+// cases to handle :
+// 	- target already there :
+// 		block and wake
+// 	- dtor already there
+// 		put thread on signaller stack
+// 	- non-blocking
+// 		return else
+// 	- timeout
+// 		return timeout
+// 	- block
+// 		setup mask
+// 		block
+void __waitfor_internal( const __waitfor_mask_t & mask, int duration ) {
+	// This statment doesn't have a contiguous list of monitors...
+	// Create one!
+	__lock_size_t max = count_max( mask );
+	monitor_desc * mon_storage[max];
+	__builtin_memset( mon_storage, 0, sizeof( mon_storage ) );
+	__lock_size_t actual_count = aggregate( mon_storage, mask );
+
+	LIB_DEBUG_PRINT_BUFFER_DECL( "Kernel : waitfor %d (s: %d, m: %d)\n", actual_count, mask.size, (__lock_size_t)max);
+
+	if(actual_count == 0) return;
+
+	LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel : waitfor internal proceeding\n");
 
 	// Create storage for monitor context
-	monitor_ctx( acceptables->monitors, acceptables->count );
-
-	// Lock all monitors (aggregates the lock them as well)
+	monitor_ctx( mon_storage, actual_count );
+
+	// Lock all monitors (aggregates the locks as well)
 	lock_all( monitors, locks, count );
 
+	{
+		// Check if the entry queue
+		thread_desc * next; int index;
+		[next, index] = search_entry_queue( mask, monitors, count );
+
+		if( next ) {
+			*mask.accepted = index;
+			if( mask.clauses[index].is_dtor ) {
+				LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel : dtor already there\n");
+				verifyf( mask.clauses[index].size == 1        , "ERROR: Accepted dtor has more than 1 mutex parameter." );
+
+				monitor_desc * mon2dtor = mask.clauses[index].list[0];
+				verifyf( mon2dtor->dtor_node, "ERROR: Accepted monitor has no dtor_node." );
+
+				__condition_criterion_t * dtor_crit = mon2dtor->dtor_node->criteria;
+				push( mon2dtor->signal_stack, dtor_crit );
+
+				unlock_all( locks, count );
+			}
+			else {
+				LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel : thread present, baton-passing\n");
+
+				// Create the node specific to this wait operation
+				wait_ctx_primed( this_thread, 0 );
+
+				// Save monitor states
+				monitor_save;
+
+				LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel :  baton of %d monitors : ", count );
+				#ifdef __CFA_DEBUG_PRINT__
+					for( int i = 0; i < count; i++) {
+						LIB_DEBUG_PRINT_BUFFER_LOCAL( "%p %p ", monitors[i], monitors[i]->signal_stack.top );
+					}
+				#endif
+				LIB_DEBUG_PRINT_BUFFER_LOCAL( "\n");
+
+				// Set the owners to be the next thread
+				set_owner( monitors, count, next );
+
+				// Everything is ready to go to sleep
+				BlockInternal( locks, count, &next, 1 );
+
+				// We are back, restore the owners and recursions
+				monitor_restore;
+
+				LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel : thread present, returned\n");
+			}
+
+			LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel : accepted %d\n", *mask.accepted);
+
+			return;
+		}
+	}
+
+
+	if( duration == 0 ) {
+		LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel : non-blocking, exiting\n");
+
+		unlock_all( locks, count );
+
+		LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel : accepted %d\n", *mask.accepted);
+		return;
+	}
+
+
+	verifyf( duration < 0, "Timeout on waitfor statments not supported yet.");
+
+	LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel : blocking waitfor\n");
+
 	// Create the node specific to this wait operation
-	wait_ctx_primed( thrd, 0 );
-
-	// Check if the entry queue
-	thread_desc * next = search_entry_queue( acceptables, acc_count, monitors, count );
-
-	LIB_DEBUG_PRINT_SAFE("Owner(s) :");
-	for(int i = 0; i < count; i++) {
-		LIB_DEBUG_PRINT_SAFE(" %p", monitors[i]->owner );
-	}
-	LIB_DEBUG_PRINT_SAFE("\n");
-
-	LIB_DEBUG_PRINT_SAFE("Passing mon to %p\n", next);
-
-	if( !next ) {
-		// Update acceptables on the current monitors
-		for(int i = 0; i < count; i++) {
-			monitors[i]->acceptables = acceptables;
-			monitors[i]->acceptable_count = acc_count;
-		}
-	}
-	else {
-		for(int i = 0; i < count; i++) {
-			set_owner( monitors[i], next );
-		}
-	}
-
-
-	save_recursion( monitors, recursions, count );
-
-
-	// Everything is ready to go to sleep
-	BlockInternal( locks, count, &next, next ? 1 : 0 );
-
-
-	//WE WOKE UP
-
-
-	//We are back, restore the owners and recursions
-	lock_all( locks, count );
-	restore_recursion( monitors, recursions, count );
-	int acc_idx = monitors[0]->accepted_index;
-	unlock_all( locks, count );
-
-	return acc_idx;
+	wait_ctx_primed( this_thread, 0 );
+
+	monitor_save;
+	set_mask( monitors, count, mask );
+
+	for( __lock_size_t i = 0; i < count; i++) {
+		verify( monitors[i]->owner == this_thread );
+	}
+
+	//Everything is ready to go to sleep
+	BlockInternal( locks, count );
+
+
+	// WE WOKE UP
+
+
+	//We are back, restore the masks and recursions
+	monitor_restore;
+
+	LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel : exiting\n");
+
+	LIB_DEBUG_PRINT_BUFFER_LOCAL( "Kernel : accepted %d\n", *mask.accepted);
 }
 
@@ -458,4 +639,6 @@
 
 static inline void set_owner( monitor_desc * this, thread_desc * owner ) {
+	// LIB_DEBUG_PRINT_SAFE("Kernal :   Setting owner of %p to %p ( was %p)\n", this, owner, this->owner );
+
 	//Pass the monitor appropriately
 	this->owner = owner;
@@ -465,7 +648,29 @@
 }
 
+static inline void set_owner( monitor_desc * monitors [], __lock_size_t count, thread_desc * owner ) {
+	monitors[0]->owner     = owner;
+	monitors[0]->recursion = 1;
+	for( __lock_size_t i = 1; i < count; i++ ) {
+		monitors[i]->owner     = owner;
+		monitors[i]->recursion = 0;
+	}
+}
+
+static inline void set_mask( monitor_desc * storage [], __lock_size_t count, const __waitfor_mask_t & mask ) {
+	for( __lock_size_t i = 0; i < count; i++) {
+		storage[i]->mask = mask;
+	}
+}
+
+static inline void reset_mask( monitor_desc * this ) {
+	this->mask.accepted = NULL;
+	this->mask.clauses = NULL;
+	this->mask.size = 0;
+}
+
 static inline thread_desc * next_thread( monitor_desc * this ) {
 	//Check the signaller stack
-	__condition_criterion_t * urgent = pop( &this->signal_stack );
+	LIB_DEBUG_PRINT_SAFE("Kernel :  mon %p AS-stack top %p\n", this, this->signal_stack.top);
+	__condition_criterion_t * urgent = pop( this->signal_stack );
 	if( urgent ) {
 		//The signaller stack is not empty,
@@ -479,5 +684,5 @@
 	// No signaller thread
 	// Get the next thread in the entry_queue
-	thread_desc * new_owner = pop_head( &this->entry_queue );
+	thread_desc * new_owner = pop_head( this->entry_queue );
 	set_owner( this, new_owner );
 
@@ -485,65 +690,52 @@
 }
 
-static inline int is_accepted( thread_desc * owner, monitor_desc * this, monitor_desc ** group, int group_cnt, void (*func)() ) {
-	__acceptable_t* accs = this->acceptables; // Optim
-	int acc_cnt = this->acceptable_count;
+static inline bool is_accepted( monitor_desc * this, const __monitor_group_t & group ) {
+	__acceptable_t * it = this->mask.clauses; // Optim
+	__lock_size_t count = this->mask.size;
 
 	// Check if there are any acceptable functions
-	if( !accs ) return -1;
+	if( !it ) return false;
 
 	// If this isn't the first monitor to test this, there is no reason to repeat the test.
-	if( this != group[0] ) return group[0]->accepted_index;
+	if( this != group[0] ) return group[0]->mask.accepted >= 0;
 
 	// For all acceptable functions check if this is the current function.
-	OUT_LOOP:
-	for( int i = 0; i < acc_cnt; i++ ) {
-		__acceptable_t * acc = &accs[i];
-
-		// if function matches, check the monitors
-		if( acc->func == func ) {
-
-			// If the group count is different then it can't be a match
-			if( acc->count != group_cnt ) return -1;
-
-			// Check that all the monitors match
-			for( int j = 0; j < group_cnt; j++ ) {
-				// If not a match, check next function
-				if( acc->monitors[j] != group[j] ) continue OUT_LOOP;
-			}
-
-			// It's a complete match, accept the call
-			return i;
+	for( __lock_size_t i = 0; i < count; i++, it++ ) {
+		if( *it == group ) {
+			*this->mask.accepted = i;
+			return true;
 		}
 	}
 
 	// No function matched
-	return -1;
-}
-
-static inline void init( int count, monitor_desc ** monitors, __condition_node_t * waiter, __condition_criterion_t * criteria ) {
-	for(int i = 0; i < count; i++) {
+	return false;
+}
+
+static inline void init( __lock_size_t count, monitor_desc * monitors [], __condition_node_t & waiter, __condition_criterion_t criteria [] ) {
+	for( __lock_size_t i = 0; i < count; i++) {
 		(criteria[i]){ monitors[i], waiter };
 	}
 
-	waiter->criteria = criteria;
-}
-
-static inline void init_push( int count, monitor_desc ** monitors, __condition_node_t * waiter, __condition_criterion_t * criteria ) {
-	for(int i = 0; i < count; i++) {
+	waiter.criteria = criteria;
+}
+
+static inline void init_push( __lock_size_t count, monitor_desc * monitors [], __condition_node_t & waiter, __condition_criterion_t criteria [] ) {
+	for( __lock_size_t i = 0; i < count; i++) {
 		(criteria[i]){ monitors[i], waiter };
-		push( &criteria[i].target->signal_stack, &criteria[i] );
-	}
-
-	waiter->criteria = criteria;
-}
-
-static inline void lock_all( spinlock ** locks, unsigned short count ) {
-	for( int i = 0; i < count; i++ ) {
+		LIB_DEBUG_PRINT_SAFE( "Kernel :  target %p = %p\n", criteria[i].target, &criteria[i] );
+		push( criteria[i].target->signal_stack, &criteria[i] );
+	}
+
+	waiter.criteria = criteria;
+}
+
+static inline void lock_all( spinlock * locks [], __lock_size_t count ) {
+	for( __lock_size_t i = 0; i < count; i++ ) {
 		lock_yield( locks[i] DEBUG_CTX2 );
 	}
 }
 
-static inline void lock_all( monitor_desc ** source, spinlock ** /*out*/ locks, unsigned short count ) {
-	for( int i = 0; i < count; i++ ) {
+static inline void lock_all( monitor_desc * source [], spinlock * /*out*/ locks [], __lock_size_t count ) {
+	for( __lock_size_t i = 0; i < count; i++ ) {
 		spinlock * l = &source[i]->lock;
 		lock_yield( l DEBUG_CTX2 );
@@ -552,27 +744,42 @@
 }
 
-static inline void unlock_all( spinlock ** locks, unsigned short count ) {
-	for( int i = 0; i < count; i++ ) {
+static inline void unlock_all( spinlock * locks [], __lock_size_t count ) {
+	for( __lock_size_t i = 0; i < count; i++ ) {
 		unlock( locks[i] );
 	}
 }
 
-static inline void unlock_all( monitor_desc ** locks, unsigned short count ) {
-	for( int i = 0; i < count; i++ ) {
+static inline void unlock_all( monitor_desc * locks [], __lock_size_t count ) {
+	for( __lock_size_t i = 0; i < count; i++ ) {
 		unlock( &locks[i]->lock );
 	}
 }
 
-
-static inline void save_recursion   ( monitor_desc ** ctx, unsigned int * /*out*/ recursions, unsigned short count ) {
-	for( int i = 0; i < count; i++ ) {
+static inline void save(
+	monitor_desc * ctx [],
+	__lock_size_t count,
+	__attribute((unused)) spinlock * locks [],
+	unsigned int /*out*/ recursions [],
+	__waitfor_mask_t /*out*/ masks []
+) {
+	for( __lock_size_t i = 0; i < count; i++ ) {
 		recursions[i] = ctx[i]->recursion;
-	}
-}
-
-static inline void restore_recursion( monitor_desc ** ctx, unsigned int * /*in */ recursions, unsigned short count ) {
-	for( int i = 0; i < count; i++ ) {
+		masks[i]      = ctx[i]->mask;
+	}
+}
+
+static inline void restore(
+	monitor_desc * ctx [],
+	__lock_size_t count,
+	spinlock * locks [],
+	unsigned int /*out*/ recursions [],
+	__waitfor_mask_t /*out*/ masks []
+) {
+	lock_all( locks, count );
+	for( __lock_size_t i = 0; i < count; i++ ) {
 		ctx[i]->recursion = recursions[i];
-	}
+		ctx[i]->mask      = masks[i];
+	}
+	unlock_all( locks, count );
 }
 
@@ -599,66 +806,82 @@
 	}
 
-	// LIB_DEBUG_PRINT_SAFE( "Runing %i\n", ready2run );
+	LIB_DEBUG_PRINT_SAFE( "Kernel :  Runing %i (%p)\n", ready2run, ready2run ? node->waiting_thread : NULL );
 	return ready2run ? node->waiting_thread : NULL;
 }
 
-static inline void brand_condition( condition * this ) {
+static inline void brand_condition( condition & this ) {
 	thread_desc * thrd = this_thread;
-	if( !this->monitors ) {
+	if( !this.monitors ) {
 		// LIB_DEBUG_PRINT_SAFE("Branding\n");
-		assertf( thrd->current_monitors != NULL, "No current monitor to brand condition %p", thrd->current_monitors );
-		this->monitor_count = thrd->current_monitor_count;
-
-		this->monitors = malloc( this->monitor_count * sizeof( *this->monitors ) );
-		for( int i = 0; i < this->monitor_count; i++ ) {
-			this->monitors[i] = thrd->current_monitors[i];
-		}
-	}
-}
-
-static inline unsigned short insert_unique( thread_desc ** thrds, unsigned short end, thread_desc * val ) {
-	if( !val ) return end;
-
-	for(int i = 0; i <= end; i++) {
-		if( thrds[i] == val ) return end;
-	}
-
-	thrds[end] = val;
-	return end + 1;
-}
-
-
-static inline bool match( __acceptable_t * acc, thread_desc * thrd ) {
-	verify( thrd );
-	verify( acc );
-	if( acc->func != thrd->current_monitor_func ) return false;
-
-	return true;
-}
-
-static inline thread_desc * search_entry_queue( __acceptable_t * acceptables, int acc_count, monitor_desc ** monitors, int count ) {
-
-	__thread_queue_t * entry_queue = &monitors[0]->entry_queue;
+		assertf( thrd->monitors.list != NULL, "No current monitor to brand condition %p", thrd->monitors.list );
+		this.monitor_count = thrd->monitors.size;
+
+		this.monitors = malloc( this.monitor_count * sizeof( *this.monitors ) );
+		for( int i = 0; i < this.monitor_count; i++ ) {
+			this.monitors[i] = thrd->monitors.list[i];
+		}
+	}
+}
+
+static inline [thread_desc *, int] search_entry_queue( const __waitfor_mask_t & mask, monitor_desc * monitors [], __lock_size_t count ) {
+
+	__thread_queue_t & entry_queue = monitors[0]->entry_queue;
 
 	// For each thread in the entry-queue
-	for(	thread_desc ** thrd_it = &entry_queue->head;
+	for(	thread_desc ** thrd_it = &entry_queue.head;
 		*thrd_it;
-		thrd_it = &(*thrd_it)->next)
-	{
+		thrd_it = &(*thrd_it)->next
+	) {
 		// For each acceptable check if it matches
-		__acceptable_t * acc_end = acceptables + acc_count;
-		for( __acceptable_t * acc_it = acceptables; acc_it != acc_end; acc_it++ ) {
+		int i = 0;
+		__acceptable_t * end = mask.clauses + mask.size;
+		for( __acceptable_t * it = mask.clauses; it != end; it++, i++ ) {
 			// Check if we have a match
-			if( match( acc_it, *thrd_it ) ) {
+			if( *it == (*thrd_it)->monitors ) {
 
 				// If we have a match return it
 				// after removeing it from the entry queue
-				return remove( entry_queue, thrd_it );
+				return [remove( entry_queue, thrd_it ), i];
 			}
 		}
 	}
 
-	return NULL;
-}
+	return [0, -1];
+}
+
+forall(dtype T | sized( T ))
+static inline __lock_size_t insert_unique( T * array [], __lock_size_t & size, T * val ) {
+	if( !val ) return size;
+
+	for( __lock_size_t i = 0; i <= size; i++) {
+		if( array[i] == val ) return size;
+	}
+
+	array[size] = val;
+	size = size + 1;
+	return size;
+}
+
+static inline __lock_size_t count_max( const __waitfor_mask_t & mask ) {
+	__lock_size_t max = 0;
+	for( __lock_size_t i = 0; i < mask.size; i++ ) {
+		max += mask.clauses[i].size;
+	}
+	return max;
+}
+
+static inline __lock_size_t aggregate( monitor_desc * storage [], const __waitfor_mask_t & mask ) {
+	__lock_size_t size = 0;
+	for( __lock_size_t i = 0; i < mask.size; i++ ) {
+		__libcfa_small_sort( mask.clauses[i].list, mask.clauses[i].size );
+		for( __lock_size_t j = 0; j < mask.clauses[i].size; j++) {
+			insert_unique( storage, size, mask.clauses[i].list[j] );
+		}
+	}
+	// TODO insertion sort instead of this
+	__libcfa_small_sort( storage, size );
+	return size;
+}
+
 void ?{}( __condition_blocked_queue_t & this ) {
 	this.head = NULL;
@@ -666,16 +889,16 @@
 }
 
-void append( __condition_blocked_queue_t * this, __condition_node_t * c ) {
-	verify(this->tail != NULL);
-	*this->tail = c;
-	this->tail = &c->next;
-}
-
-__condition_node_t * pop_head( __condition_blocked_queue_t * this ) {
-	__condition_node_t * head = this->head;
+void append( __condition_blocked_queue_t & this, __condition_node_t * c ) {
+	verify(this.tail != NULL);
+	*this.tail = c;
+	this.tail = &c->next;
+}
+
+__condition_node_t * pop_head( __condition_blocked_queue_t & this ) {
+	__condition_node_t * head = this.head;
 	if( head ) {
-		this->head = head->next;
+		this.head = head->next;
 		if( !head->next ) {
-			this->tail = &this->head;
+			this.tail = &this.head;
 		}
 		head->next = NULL;
Index: src/libcfa/concurrency/preemption.c
===================================================================
--- src/libcfa/concurrency/preemption.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/concurrency/preemption.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -328,4 +328,18 @@
 		siginfo_t info;
 		int sig = sigwaitinfo( &mask, &info );
+
+		if( sig < 0 ) {
+			//Error!
+			int err = errno;
+			switch( err ) {
+				case EAGAIN :
+				case EINTR :
+					continue;
+       			case EINVAL :
+				 	abortf("Timeout was invalid.");
+				default:
+				 	abortf("Unhandled error %d", err);
+			}
+		}
 
 		// If another signal arrived something went wrong
@@ -366,5 +380,5 @@
 
 	if ( sigaction( sig, &act, NULL ) == -1 ) {
-		LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO,
+		LIB_DEBUG_PRINT_BUFFER_DECL(
 			" __kernel_sigaction( sig:%d, handler:%p, flags:%d ), problem installing signal handler, error(%d) %s.\n",
 			sig, handler, flags, errno, strerror( errno )
@@ -383,5 +397,5 @@
 
 	if ( sigaction( sig, &act, NULL ) == -1 ) {
-		LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO,
+		LIB_DEBUG_PRINT_BUFFER_DECL(
 			" __kernel_sigdefault( sig:%d ), problem reseting signal handler, error(%d) %s.\n",
 			sig, errno, strerror( errno )
Index: src/libcfa/concurrency/thread
===================================================================
--- src/libcfa/concurrency/thread	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/concurrency/thread	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -36,18 +36,18 @@
 forall( dtype T | is_thread(T) )
 static inline coroutine_desc* get_coroutine(T & this) {
-	return &get_thread(this)->cor;
+	return &get_thread(this)->self_cor;
 }
 
 forall( dtype T | is_thread(T) )
 static inline monitor_desc* get_monitor(T & this) {
-	return &get_thread(this)->mon;
+	return &get_thread(this)->self_mon;
 }
 
 static inline coroutine_desc* get_coroutine(thread_desc * this) {
-	return &this->cor;
+	return &this->self_cor;
 }
 
 static inline monitor_desc* get_monitor(thread_desc * this) {
-	return &this->mon;
+	return &this->self_mon;
 }
 
Index: src/libcfa/concurrency/thread.c
===================================================================
--- src/libcfa/concurrency/thread.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/concurrency/thread.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -33,16 +33,16 @@
 
 void ?{}(thread_desc& this) {
-	(this.cor){};
-	this.cor.name = "Anonymous Coroutine";
-	this.mon.owner = &this;
-	this.mon.recursion = 1;
+	(this.self_cor){};
+	this.self_cor.name = "Anonymous Coroutine";
+	this.self_mon.owner = &this;
+	this.self_mon.recursion = 1;
+	this.self_mon_p = &this.self_mon;
 	this.next = NULL;
 
-	this.current_monitors      = &this.mon;
-	this.current_monitor_count = 1;
+	(this.monitors){ &this.self_mon_p, 1, (fptr_t)0 };
 }
 
 void ^?{}(thread_desc& this) {
-	^(this.cor){};
+	^(this.self_cor){};
 }
 
Index: src/libcfa/interpose.c
===================================================================
--- src/libcfa/interpose.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/interpose.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -127,10 +127,10 @@
 			va_end( args );
 
-			__lib_debug_write( STDERR_FILENO, abort_text, len );
-			__lib_debug_write( STDERR_FILENO, "\n", 1 );
+			__lib_debug_write( abort_text, len );
+			__lib_debug_write( "\n", 1 );
 		}
 
 		len = snprintf( abort_text, abort_text_size, "Cforall Runtime error (UNIX pid:%ld)\n", (long int)getpid() ); // use UNIX pid (versus getPid)
-		__lib_debug_write( STDERR_FILENO, abort_text, len );
+		__lib_debug_write( abort_text, len );
 
 
Index: src/libcfa/iostream
===================================================================
--- src/libcfa/iostream	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/iostream	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Sep 13 12:53:46 2017
-// Update Count     : 138
+// Last Modified On : Tue Oct 10 14:51:10 2017
+// Update Count     : 140
 //
 
@@ -79,5 +79,7 @@
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char16_t * );
+#if ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) // char32_t == wchar_t => ambiguous
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char32_t * );
+#endif // ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 )
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const wchar_t * );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * );
Index: src/libcfa/iostream.c
===================================================================
--- src/libcfa/iostream.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/iostream.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Sep 17 23:24:25 2017
-// Update Count     : 422
+// Last Modified On : Tue Oct 10 14:51:09 2017
+// Update Count     : 424
 //
 
@@ -191,4 +191,5 @@
 } // ?|?
 
+#if ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) // char32_t == wchar_t => ambiguous
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype * os, const char32_t * str ) {
@@ -197,4 +198,5 @@
 	return os;
 } // ?|?
+#endif // ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 )
 
 forall( dtype ostype | ostream( ostype ) )
Index: src/libcfa/libhdr/libdebug.c
===================================================================
--- src/libcfa/libhdr/libdebug.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/libhdr/libdebug.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -9,6 +9,6 @@
 // Author           : Thierry Delisle
 // Created On       : Thu Mar 30 12:30:01 2017
-// Last Modified By : 
-// Last Modified On : 
+// Last Modified By :
+// Last Modified On :
 // Update Count     : 0
 //
@@ -28,14 +28,14 @@
 extern "C" {
 
-	void __lib_debug_write( int fd, const char *in_buffer, int len ) {
+	void __lib_debug_write( const char *in_buffer, int len ) {
 		// ensure all data is written
-		for ( int count = 0, retcode; count < len; count += retcode ) { 
+		for ( int count = 0, retcode; count < len; count += retcode ) {
 			in_buffer += count;
 
 			for ( ;; ) {
-				retcode = write( fd, in_buffer, len - count );
+				retcode = write( STDERR_FILENO, in_buffer, len - count );
 
 				// not a timer interrupt ?
-				if ( retcode != -1 || errno != EINTR ) break; 
+				if ( retcode != -1 || errno != EINTR ) break;
 			}
 
@@ -52,7 +52,7 @@
 		va_start( args, fmt );
 		__lib_debug_acquire();
-		
+
 		int len = vsnprintf( buffer, buffer_size, fmt, args );
-		__lib_debug_write( STDERR_FILENO, buffer, len );
+		__lib_debug_write( buffer, len );
 
 		__lib_debug_release();
@@ -64,7 +64,7 @@
 
 		va_start( args, fmt );
-		
+
 		int len = vsnprintf( buffer, buffer_size, fmt, args );
-		__lib_debug_write( STDERR_FILENO, buffer, len );
+		__lib_debug_write( buffer, len );
 
 		va_end( args );
@@ -73,5 +73,5 @@
 	void __lib_debug_print_vararg( const char fmt[], va_list args ) {
 		int len = vsnprintf( buffer, buffer_size, fmt, args );
-		__lib_debug_write( STDERR_FILENO, buffer, len );
+		__lib_debug_write( buffer, len );
 	}
 
@@ -80,7 +80,7 @@
 
 		va_start( args, fmt );
-		
+
 		int len = vsnprintf( in_buffer, in_buffer_size, fmt, args );
-		__lib_debug_write( STDERR_FILENO, in_buffer, len );
+		__lib_debug_write( in_buffer, len );
 
 		va_end( args );
Index: src/libcfa/libhdr/libdebug.h
===================================================================
--- src/libcfa/libhdr/libdebug.h	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/libhdr/libdebug.h	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -44,7 +44,8 @@
 extern "C" {
 #endif
-      #include <stdarg.h>
+	#include <stdarg.h>
+	#include <stdio.h>
 
-      extern void __lib_debug_write( int fd, const char *buffer, int len );
+      extern void __lib_debug_write( const char *buffer, int len );
       extern void __lib_debug_acquire();
       extern void __lib_debug_release();
@@ -58,5 +59,5 @@
 
 #ifdef __CFA_DEBUG_PRINT__
-	#define LIB_DEBUG_WRITE( fd, buffer, len )     __lib_debug_write( fd, buffer, len )
+	#define LIB_DEBUG_WRITE( buffer, len )         __lib_debug_write( buffer, len )
 	#define LIB_DEBUG_ACQUIRE()                    __lib_debug_acquire()
 	#define LIB_DEBUG_RELEASE()                    __lib_debug_release()
@@ -64,6 +65,6 @@
 	#define LIB_DEBUG_PRINT_NOLOCK(...)            __lib_debug_print_nolock (__VA_ARGS__)
 	#define LIB_DEBUG_PRINT_BUFFER(...)            __lib_debug_print_buffer (__VA_ARGS__)
-	#define LIB_DEBUG_PRINT_BUFFER_DECL(fd, ...)   char text[256]; int len = snprintf( text, 256, __VA_ARGS__ ); __lib_debug_write( fd, text, len );
-	#define LIB_DEBUG_PRINT_BUFFER_LOCAL(fd, ...)  len = snprintf( text, 256, __VA_ARGS__ ); __lib_debug_write( fd, text, len );
+	#define LIB_DEBUG_PRINT_BUFFER_DECL(...)       char __dbg_text[256]; int __dbg_len = snprintf( __dbg_text, 256, __VA_ARGS__ ); __lib_debug_write( __dbg_text, __dbg_len );
+	#define LIB_DEBUG_PRINT_BUFFER_LOCAL(...)      __dbg_len = snprintf( __dbg_text, 256, __VA_ARGS__ ); __lib_debug_write( __dbg_text, __dbg_len );
 #else
 	#define LIB_DEBUG_WRITE(...)               ((void)0)
Index: src/libcfa/stdlib
===================================================================
--- src/libcfa/stdlib	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/stdlib	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 23 20:29:47 2017
-// Update Count     : 224
+// Last Modified On : Tue Oct 31 13:47:24 2017
+// Update Count     : 245
 //
 
@@ -27,7 +27,14 @@
 // allocation, non-array types
 static inline forall( dtype T | sized(T) ) T * malloc( void ) {
-	//printf( "X1\n" );
+	// printf( "* malloc\n" );
 	return (T *)(void *)malloc( (size_t)sizeof(T) );	// C malloc
 } // malloc
+
+// static inline forall( dtype T | sized(T) ) T & malloc( void ) {
+// 	int & p = *(T *)(void *)malloc( (size_t)sizeof(T) ); // C malloc
+// 	printf( "& malloc %p\n", &p );
+// 	return p;
+// //	return (T &)*(T *)(void *)malloc( (size_t)sizeof(T) ); // C malloc
+// } // malloc
 
 extern "C" { void * calloc( size_t dim, size_t size ); } // default C routine
@@ -206,15 +213,20 @@
 //---------------------------------------
 
-void rand48seed( long int s );
-char rand48( void );
-int rand48( void );
-unsigned int rand48( void );
-long int rand48( void );
-unsigned long int rand48( void );
-float rand48( void );
-double rand48( void );
-float _Complex rand48( void );
-double _Complex rand48( void );
-long double _Complex rand48( void );
+void random_seed( long int s );
+char random( void );
+char random( char l, char u );
+int random( void );
+unsigned int random( void );
+unsigned int random( unsigned int u );
+unsigned int random( unsigned int l, unsigned int u );
+//long int random( void );
+unsigned long int random( void );
+unsigned long int random( unsigned long int u );
+unsigned long int random( unsigned long int l, unsigned long int u );
+float random( void );
+double random( void );
+float _Complex random( void );
+double _Complex random( void );
+long double _Complex random( void );
 
 //---------------------------------------
Index: src/libcfa/stdlib.c
===================================================================
--- src/libcfa/stdlib.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/libcfa/stdlib.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:10:29 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 23 20:30:44 2017
-// Update Count     : 292
+// Last Modified On : Mon Oct 30 22:43:02 2017
+// Update Count     : 297
 //
 
@@ -275,15 +275,20 @@
 //---------------------------------------
 
-void rand48seed( long int s ) { srand48( s ); }
-char rand48( void ) { return mrand48(); }
-int rand48( void ) { return mrand48(); }
-unsigned int rand48( void ) { return lrand48(); }
-long int rand48( void ) { return mrand48(); }
-unsigned long int rand48( void ) { return lrand48(); }
-float rand48( void ) { return (float)drand48(); }		// otherwise float uses lrand48
-double rand48( void ) { return drand48(); }
-float _Complex rand48( void ) { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); }
-double _Complex rand48( void ) { return drand48() + (double _Complex)(drand48() * _Complex_I); }
-long double _Complex rand48( void) { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); }
+void random_seed( long int s ) { srand48( s ); }
+char random( void ) { return mrand48(); }
+char random( char l, char u ) { return lrand48() % (u - l) + l; }
+int random( void ) { return mrand48(); }
+unsigned int random( void ) { return lrand48(); }
+unsigned int random( unsigned int u ) { return lrand48() % u; }
+unsigned int random( unsigned int l, unsigned int u ) { return lrand48() % (u - l) + l; }
+//long int random( void ) { return mrand48(); }
+unsigned long int random( void ) { return lrand48(); }
+unsigned long int random( unsigned long int u ) { return lrand48() % u; }
+unsigned long int random( unsigned long int l, unsigned long int u ) { return lrand48() % (u - l) + l; }
+float random( void ) { return (float)drand48(); }		// otherwise float uses lrand48
+double random( void ) { return drand48(); }
+float _Complex random( void ) { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); }
+double _Complex random( void ) { return drand48() + (double _Complex)(drand48() * _Complex_I); }
+long double _Complex random( void) { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); }
 
 //---------------------------------------
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/main.cc	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,7 +10,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Fri May 15 23:12:02 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Wed Jul 26 14:38:00 2017
-// Update Count     : 443
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Oct 31 12:22:40 2017
+// Update Count     : 445
 //
 
@@ -44,5 +44,4 @@
 #include "ControlStruct/Mutate.h"           // for mutate
 #include "GenPoly/Box.h"                    // for box
-#include "GenPoly/CopyParams.h"             // for copyParams
 #include "GenPoly/InstantiateGeneric.h"     // for instantiateGeneric
 #include "GenPoly/Lvalue.h"                 // for convertLvalue
@@ -94,5 +93,5 @@
 	codegenp = false,
 	prettycodegenp = false,
-	nolinemarks = false;
+	linemarks = false;
 
 static void parse_cmdline( int argc, char *argv[], const char *& filename );
@@ -239,7 +238,4 @@
 		} // if
 
-		// OPTPRINT( "Concurrency" )
-		// Concurrency::applyKeywords( translationUnit );
-
 		// add the assignment statement after the initialization of a type parameter
 		OPTPRINT( "validate" )
@@ -324,6 +320,4 @@
 		OPTPRINT("instantiateGenerics")
 		GenPoly::instantiateGeneric( translationUnit );
-		OPTPRINT( "copyParams" );
-		GenPoly::copyParams( translationUnit );
 		OPTPRINT( "convertLvalue" )
 		GenPoly::convertLvalue( translationUnit );
@@ -346,5 +340,5 @@
 
 		CodeTools::fillLocations( translationUnit );
-		CodeGen::generate( translationUnit, *output, ! noprotop, prettycodegenp, true, ! nolinemarks );
+		CodeGen::generate( translationUnit, *output, ! noprotop, prettycodegenp, true, linemarks );
 
 		CodeGen::FixMain::fix( *output, treep ? "../prelude/bootloader.c" : CFA_LIBDIR "/bootloader.c" );
@@ -384,5 +378,5 @@
 
 void parse_cmdline( int argc, char * argv[], const char *& filename ) {
-	enum { Ast, Bbox, Bresolver, CtorInitFix, DeclStats, Expr, ExprAlt, Grammar, LibCFA, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, TupleExpansion, Validate, };
+	enum { Ast, Bbox, Bresolver, CtorInitFix, DeclStats, Expr, ExprAlt, Grammar, LibCFA, Linemarks, Nolinemarks, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, TupleExpansion, Validate, };
 
 	static struct option long_opts[] = {
@@ -396,4 +390,6 @@
 		{ "grammar", no_argument, 0, Grammar },
 		{ "libcfa", no_argument, 0, LibCFA },
+		{ "line-marks", no_argument, 0, Linemarks },
+		{ "no-line-marks", no_argument, 0, Nolinemarks },
 		{ "no-preamble", no_argument, 0, Nopreamble },
 		{ "parse", no_argument, 0, Parse },
@@ -411,5 +407,5 @@
 
 	int c;
-	while ( (c = getopt_long( argc, argv, "abBcCdefglLmnpqrstTvyzZD:F:", long_opts, &long_index )) != -1 ) {
+	while ( (c = getopt_long( argc, argv, "abBcCdefglLmnNpqrstTvyzZD:F:", long_opts, &long_index )) != -1 ) {
 		switch ( c ) {
 		  case Ast:
@@ -451,10 +447,15 @@
 			libcfap = true;
 			break;
-		  case 'L':										// surpress lines marks
-			nolinemarks = true;
+		  case Linemarks:
+		  case 'L':										// print lines marks
+			linemarks = true;
 			break;
 		  case Nopreamble:
 		  case 'n':										// do not read preamble
 			nopreludep = true;
+			break;
+		  case Nolinemarks:
+		  case 'N':										// suppress line marks
+			linemarks = false;
 			break;
 		  case Prototypes:
@@ -508,4 +509,8 @@
 				assertf( false, "Unknown option: %s\n", argv[optind - 1] );
 			} // if
+			#if __GNUC__ < 7
+			#else
+				__attribute__((fallthrough));
+			#endif
 		  default:
 			abort();
Index: src/prelude/Makefile.am
===================================================================
--- src/prelude/Makefile.am	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/prelude/Makefile.am	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -57,5 +57,5 @@
 
 bootloader.c : bootloader.cf prelude.cf extras.cf gcc-builtins.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
-	${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpmL bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
+	${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpm bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
 
 maintainer-clean-local :
Index: src/prelude/Makefile.in
===================================================================
--- src/prelude/Makefile.in	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/prelude/Makefile.in	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -526,5 +526,5 @@
 
 bootloader.c : bootloader.cf prelude.cf extras.cf gcc-builtins.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp
-	${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpmL bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
+	${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpm bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
 
 maintainer-clean-local :
Index: src/prelude/extras.c
===================================================================
--- src/prelude/extras.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/prelude/extras.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -1,3 +1,4 @@
 #include <stddef.h>					// size_t, ptrdiff_t
+#include <stdint.h>					// intX_t, uintX_t, where X is 8, 16, 32, 64
 #include <uchar.h>					// char16_t, char32_t
 #include <wchar.h>					// wchar_t
Index: src/prelude/extras.regx
===================================================================
--- src/prelude/extras.regx	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/prelude/extras.regx	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -1,4 +1,12 @@
 typedef.* size_t;
 typedef.* ptrdiff_t;
+typedef.* int8_t;
+typedef.* int16_t;
+typedef.* int32_t;
+typedef.* int64_t;
+typedef.* uint8_t;
+typedef.* uint16_t;
+typedef.* uint32_t;
+typedef.* uint64_t;
 typedef.* char16_t;
 typedef.* char32_t;
Index: src/prelude/prelude.cf
===================================================================
--- src/prelude/prelude.cf	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/prelude/prelude.cf	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -7,6 +7,6 @@
 // Created On       : Sat Nov 29 07:23:41 2014
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 30 07:56:07 2017
-// Update Count     : 93
+// Last Modified On : Sat Oct 28 16:33:09 2017
+// Update Count     : 102
 //
 
@@ -41,5 +41,8 @@
 _Bool			?++( _Bool & ),				?++( volatile _Bool & );
 _Bool			?--( _Bool & ),				?--( volatile _Bool & );
-unsigned char		?++( unsigned char & ),			?++( volatile unsigned char & );
+signed short		?++( signed short & ),			?++( volatile signed short & );
+signed short		?--( signed short & ),			?--( volatile signed short & );
+unsigned short		?++( unsigned short & ),		?++( volatile unsigned short & );
+unsigned short		?--( unsigned short & ),		?--( volatile unsigned short & );
 signed int		?++( signed int & ),			?++( volatile signed int & );
 signed int		?--( signed int & ),			?--( volatile signed int & );
@@ -92,6 +95,8 @@
 
 _Bool			++?( _Bool & ),				--?( _Bool & );
+signed short	++?( signed short & ),			--?( signed short & );
 signed int		++?( signed int & ),			--?( signed int & );
-unsigned int		++?( unsigned int & ),			--?( unsigned int & );
+unsigned short		++?( unsigned int & ),			--?( unsigned int & );
+unsigned int		++?( unsigned short & ),		--?( unsigned short & );
 signed long int		++?( signed long int & ),		--?( signed long int & );
 unsigned long int	++?( unsigned long int & ),		--?( unsigned long int & );
@@ -190,15 +195,15 @@
 long double _Complex	?+?( long double _Complex, long double _Complex ),	?-?( long double _Complex, long double _Complex );
 
-forall( dtype T | sized(T) ) T *			?+?(		    T *,	  ptrdiff_t );
-forall( dtype T | sized(T) ) T *			?+?(	      ptrdiff_t,		T * );
+forall( dtype T | sized(T) ) T *		?+?(		    T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) T *		?+?(	      ptrdiff_t,		T * );
 forall( dtype T | sized(T) ) const T *		?+?( const	    T *,	  ptrdiff_t );
 forall( dtype T | sized(T) ) const T *		?+?(	      ptrdiff_t, const		T * );
-forall( dtype T | sized(T) ) volatile T *		?+?(	   volatile T *,	  ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *		?+?(	      ptrdiff_t,       volatile T * );
+forall( dtype T | sized(T) ) volatile T *	?+?(	   volatile T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?+?(	      ptrdiff_t,       volatile T * );
 forall( dtype T | sized(T) ) const volatile T *	?+?( const volatile T *,	  ptrdiff_t );
 forall( dtype T | sized(T) ) const volatile T *	?+?(	      ptrdiff_t, const volatile T * );
-forall( dtype T | sized(T) ) T *			?-?(		    T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) T *		?-?(		    T *,	  ptrdiff_t );
 forall( dtype T | sized(T) ) const T *		?-?( const	    T *,	  ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *		?-?(	   volatile T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?-?(	   volatile T *,	  ptrdiff_t );
 forall( dtype T | sized(T) ) const volatile T *	?-?( const volatile T *,	  ptrdiff_t );
 forall( dtype T | sized(T) ) ptrdiff_t		?-?( const volatile T *, const volatile T * );
@@ -226,6 +231,6 @@
 signed int ?<?( _Bool, _Bool ),						?<=?( _Bool, _Bool ),
 	   ?>?( _Bool, _Bool ),						?>=?( _Bool, _Bool );
-signed int ?<?( char, char ),				?<=?( char, char ),
-	   ?>?( char, char ),				?>=?( char, char );
+signed int ?<?( char, char ),						?<=?( char, char ),
+	   ?>?( char, char ),						?>=?( char, char );
 signed int ?<?( signed char, signed char ),				?<=?( signed char, signed char ),
 	   ?>?( signed char, signed char ),				?>=?( signed char, signed char );
@@ -235,5 +240,5 @@
 	   ?>?( signed short, signed short ),				?>=?( signed short, signed short );
 signed int ?<?( unsigned short, unsigned short ),			?<=?( unsigned short, unsigned short ),
-	   ?>?( unsigned short, unsigned short ),				?>=?( unsigned short, unsigned short );
+	   ?>?( unsigned short, unsigned short ),			?>=?( unsigned short, unsigned short );
 signed int ?<?( signed int, signed int ),				?<=?( signed int, signed int ),
 	   ?>?( signed int, signed int ),				?>=?( signed int, signed int );
@@ -468,18 +473,18 @@
 forall( ftype FT ) FT *			?=?( FT * volatile &, zero_t );
 
-forall( dtype T | sized(T) ) T *			?+=?(		     T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) T *			?+=?(		     T * volatile &, ptrdiff_t );
+forall( dtype T | sized(T) ) T *		?+=?(		     T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) T *		?+=?(		     T * volatile &, ptrdiff_t );
 forall( dtype T | sized(T) ) const T *		?+=?( const	     T *	  &, ptrdiff_t );
 forall( dtype T | sized(T) ) const T *		?+=?( const	     T * volatile &, ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *		?+=?(	    volatile T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *		?+=?(	    volatile T * volatile &, ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?+=?(	    volatile T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?+=?(	    volatile T * volatile &, ptrdiff_t );
 forall( dtype T | sized(T) ) const volatile T *	?+=?( const volatile T *	  &, ptrdiff_t );
 forall( dtype T | sized(T) ) const volatile T *	?+=?( const volatile T * volatile &, ptrdiff_t );
-forall( dtype T | sized(T) ) T *			?-=?(		     T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) T *			?-=?(		     T * volatile &, ptrdiff_t );
+forall( dtype T | sized(T) ) T *		?-=?(		     T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) T *		?-=?(		     T * volatile &, ptrdiff_t );
 forall( dtype T | sized(T) ) const T *		?-=?( const	     T *	  &, ptrdiff_t );
 forall( dtype T | sized(T) ) const T *		?-=?( const	     T * volatile &, ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *		?-=?(	    volatile T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *		?-=?(	    volatile T * volatile &, ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?-=?(	    volatile T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?-=?(	    volatile T * volatile &, ptrdiff_t );
 forall( dtype T | sized(T) ) const volatile T *	?-=?( const volatile T *	  &, ptrdiff_t );
 forall( dtype T | sized(T) ) const volatile T *	?-=?( const volatile T * volatile &, ptrdiff_t );
@@ -497,5 +502,5 @@
 signed long long int	?=?( signed long long int &, signed long long int ),	?=?( volatile signed long long int &, signed long long int );
 unsigned long long int	?=?( unsigned long long int &, unsigned long long int ), ?=?( volatile unsigned long long int &, unsigned long long int );
-zero_t		?=?( zero_t &, zero_t );
+zero_t			?=?( zero_t &, zero_t );
 one_t			?=?( one_t &, one_t );
 
@@ -552,4 +557,6 @@
 signed long long int	?+=?( signed long long int &, signed long long int ),	?+=?( volatile signed long long int &, signed long long int );
 unsigned long long int	?+=?( unsigned long long int &, unsigned long long int ), ?+=?( volatile unsigned long long int &, unsigned long long int );
+//signed int128		?+=?( signed int128 &, signed int128 ),			?+=?( volatile signed int128 &, signed int128 );
+//unsigned int128		?+=?( unsigned int128 &, unsigned int128 ),		?+=?( volatile unsigned int128 &, unsigned int128 );
 
 _Bool			?-=?( _Bool &, _Bool ),					?-=?( volatile _Bool &, _Bool );
@@ -666,7 +673,4 @@
 			?+=?( long double _Complex &, long double _Complex ), ?+=?( volatile long double _Complex &, long double _Complex ),
 			?-=?( long double _Complex &, long double _Complex ), ?-=?( volatile long double _Complex &, long double _Complex );
-
-
-
 
 
@@ -838,8 +842,8 @@
 forall( dtype DT ) void ^?{}( const volatile  DT *	   &);
 
-void 	^?{}(		    void *	    &);
-void 	^?{}( const	    void *	    &);
-void 	^?{}(	   volatile void *	    &);
-void 	^?{}( const volatile void *	    &);
+void ^?{}(		    void *	    &);
+void ^?{}( const	    void *	    &);
+void ^?{}(	   volatile void *	    &);
+void ^?{}( const   volatile void *	    &);
 
 // Local Variables: //
Index: src/tests/.expect/32/KRfunctions.txt
===================================================================
--- src/tests/.expect/32/KRfunctions.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/32/KRfunctions.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -21,4 +21,5 @@
 static inline void ___destructor__F_R2sS_autogen___1(struct S *___dst__R2sS_1);
 static inline struct S ___operator_assign__F2sS_R2sS2sS_autogen___1(struct S *___dst__R2sS_1, struct S ___src__2sS_1);
+static inline void ___constructor__F_R2sSi_autogen___1(struct S *___dst__R2sS_1, signed int __i__i_1);
 static inline void ___constructor__F_R2sS_autogen___1(struct S *___dst__R2sS_1){
     ((void)((*___dst__R2sS_1).__i__i_1) /* ?{} */);
@@ -33,6 +34,6 @@
     struct S ___ret__2sS_1;
     ((void)((*___dst__R2sS_1).__i__i_1=___src__2sS_1.__i__i_1));
-    ((void)___constructor__F_R2sS2sS_autogen___1((&___ret__2sS_1), ___src__2sS_1));
-    return ((struct S )___ret__2sS_1);
+    ((void)___constructor__F_R2sS2sS_autogen___1((&___ret__2sS_1), (*___dst__R2sS_1)));
+    return ___ret__2sS_1;
 }
 static inline void ___constructor__F_R2sSi_autogen___1(struct S *___dst__R2sS_1, signed int __i__i_1){
@@ -65,5 +66,5 @@
     signed int *__x__FPi_ii__2(signed int __anonymous_object2, signed int __anonymous_object3);
     ((void)(___retval_f10__PFPi_ii__1=__x__FPi_ii__2) /* ?{} */);
-    return ((signed int *(*)(signed int __x__i_1, signed int __y__i_1))___retval_f10__PFPi_ii__1);
+    return ___retval_f10__PFPi_ii__1;
 }
 signed int (*__f11__FPA0i_iPiPi__1(signed int __a__i_1, signed int *__b__Pi_1, signed int *__c__Pi_1))[]{
Index: src/tests/.expect/32/attributes.txt
===================================================================
--- src/tests/.expect/32/attributes.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/32/attributes.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -23,6 +23,6 @@
 static inline struct __anonymous0 ___operator_assign__F13s__anonymous0_R13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
     struct __anonymous0 ___ret__13s__anonymous0_1;
-    ((void)___constructor__F_R13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), ___src__13s__anonymous0_1));
-    return ((struct __anonymous0 )___ret__13s__anonymous0_1);
+    ((void)___constructor__F_R13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), (*___dst__R13s__anonymous0_1)));
+    return ___ret__13s__anonymous0_1;
 }
 __attribute__ ((unused)) struct Agn1;
@@ -41,6 +41,6 @@
 static inline struct Agn2 ___operator_assign__F5sAgn2_R5sAgn25sAgn2_autogen___1(struct Agn2 *___dst__R5sAgn2_1, struct Agn2 ___src__5sAgn2_1){
     struct Agn2 ___ret__5sAgn2_1;
-    ((void)___constructor__F_R5sAgn25sAgn2_autogen___1((&___ret__5sAgn2_1), ___src__5sAgn2_1));
-    return ((struct Agn2 )___ret__5sAgn2_1);
+    ((void)___constructor__F_R5sAgn25sAgn2_autogen___1((&___ret__5sAgn2_1), (*___dst__R5sAgn2_1)));
+    return ___ret__5sAgn2_1;
 }
 enum __attribute__ ((unused)) __anonymous1 {
@@ -69,4 +69,14 @@
 static inline void ___destructor__F_R4sFdl_autogen___1(struct Fdl *___dst__R4sFdl_1);
 static inline struct Fdl ___operator_assign__F4sFdl_R4sFdl4sFdl_autogen___1(struct Fdl *___dst__R4sFdl_1, struct Fdl ___src__4sFdl_1);
+static inline void ___constructor__F_R4sFdli_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1);
+static inline void ___constructor__F_R4sFdlii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1);
+static inline void ___constructor__F_R4sFdliii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1);
+static inline void ___constructor__F_R4sFdliiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1);
+static inline void ___constructor__F_R4sFdliiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1);
+static inline void ___constructor__F_R4sFdliiiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1);
+static inline void ___constructor__F_R4sFdliiiiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1);
+static inline void ___constructor__F_R4sFdliiiiiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1);
+static inline void ___constructor__F_R4sFdliiiiiiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1, signed int __anonymous_object1);
+static inline void ___constructor__F_R4sFdliiiiiiiiiPi_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1, signed int __anonymous_object2, signed int *__f9__Pi_1);
 static inline void ___constructor__F_R4sFdl_autogen___1(struct Fdl *___dst__R4sFdl_1){
     ((void)((*___dst__R4sFdl_1).__f1__i_1) /* ?{} */);
@@ -78,4 +88,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -89,8 +100,10 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1=___src__4sFdl_1.__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1=___src__4sFdl_1.__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0=___src__4sFdl_1.__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1=___src__4sFdl_1.__f9__Pi_1) /* ?{} */);
 }
 static inline void ___destructor__F_R4sFdl_autogen___1(struct Fdl *___dst__R4sFdl_1){
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ^?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ^?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ^?{} */);
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ^?{} */);
@@ -112,7 +125,8 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1=___src__4sFdl_1.__f7__i_1));
     ((void)((*___dst__R4sFdl_1).__f8__i_1=___src__4sFdl_1.__f8__i_1));
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0=___src__4sFdl_1.__anonymous_object0));
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1=___src__4sFdl_1.__f9__Pi_1));
-    ((void)___constructor__F_R4sFdl4sFdl_autogen___1((&___ret__4sFdl_1), ___src__4sFdl_1));
-    return ((struct Fdl )___ret__4sFdl_1);
+    ((void)___constructor__F_R4sFdl4sFdl_autogen___1((&___ret__4sFdl_1), (*___dst__R4sFdl_1)));
+    return ___ret__4sFdl_1;
 }
 static inline void ___constructor__F_R4sFdli_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1){
@@ -125,4 +139,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -136,4 +151,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -147,4 +163,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -158,4 +175,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -169,4 +187,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -180,4 +199,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -191,4 +211,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1=__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -202,7 +223,8 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1=__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1=__f8__i_1) /* ?{} */);
-    ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
-}
-static inline void ___constructor__F_R4sFdliiiiiiiiPi_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1, signed int *__f9__Pi_1){
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
+}
+static inline void ___constructor__F_R4sFdliiiiiiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1, signed int __anonymous_object3){
     ((void)((*___dst__R4sFdl_1).__f1__i_1=__f1__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f2__i_1=__f2__i_1) /* ?{} */);
@@ -213,4 +235,17 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1=__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1=__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0=__anonymous_object3) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
+}
+static inline void ___constructor__F_R4sFdliiiiiiiiiPi_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1, signed int __anonymous_object4, signed int *__f9__Pi_1){
+    ((void)((*___dst__R4sFdl_1).__f1__i_1=__f1__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f2__i_1=__f2__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f3__i_1=__f3__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f4__i_1=__f4__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f5__i_1=__f5__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f6__i_1=__f6__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f7__i_1=__f7__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f8__i_1=__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0=__anonymous_object4) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1=__f9__Pi_1) /* ?{} */);
 }
@@ -232,11 +267,11 @@
     __attribute__ ((unused)) signed int **const ___retval_f2__CPPi_1;
 }
-__attribute__ ((unused,used,unused)) signed int (*__f3__FPA0i_i__1(signed int __anonymous_object1))[];
+__attribute__ ((unused,used,unused)) signed int (*__f3__FPA0i_i__1(signed int __anonymous_object5))[];
 __attribute__ ((unused,unused)) signed int (*__f3__FPA0i_i__1(signed int __p__i_1))[]{
     __attribute__ ((unused)) signed int (*___retval_f3__PA0i_1)[];
 }
-__attribute__ ((unused,used,unused)) signed int (*__f4__FPFi_i____1())(signed int __anonymous_object2);
-__attribute__ ((unused,unused)) signed int (*__f4__FPFi_i____1())(signed int __anonymous_object3){
-    __attribute__ ((unused)) signed int (*___retval_f4__PFi_i__1)(signed int __anonymous_object4);
+__attribute__ ((unused,used,unused)) signed int (*__f4__FPFi_i____1())(signed int __anonymous_object6);
+__attribute__ ((unused,unused)) signed int (*__f4__FPFi_i____1())(signed int __anonymous_object7){
+    __attribute__ ((unused)) signed int (*___retval_f4__PFi_i__1)(signed int __anonymous_object8);
 }
 signed int __vtr__Fi___1(){
@@ -268,8 +303,8 @@
 signed int __tpr2__Fi_PPi__1(__attribute__ ((unused,unused,unused,unused,unused,unused)) signed int **__Foo__PPi_1);
 signed int __tpr3__Fi_Pi__1(__attribute__ ((unused,unused,unused)) signed int *__Foo__Pi_1);
-signed int __tpr4__Fi_PFi_Pi___1(__attribute__ ((unused,unused)) signed int (*__anonymous_object5)(__attribute__ ((unused,unused)) signed int __anonymous_object6[((unsigned int )5)]));
+signed int __tpr4__Fi_PFi_Pi___1(__attribute__ ((unused,unused)) signed int (*__anonymous_object9)(__attribute__ ((unused,unused)) signed int __anonymous_object10[((unsigned int )5)]));
 signed int __tpr5__Fi_PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__Foo__PFi___1)());
 signed int __tpr6__Fi_PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__Foo__PFi___1)());
-signed int __tpr7__Fi_PFi_PFi_i____1(__attribute__ ((unused,unused)) signed int (*__anonymous_object7)(__attribute__ ((unused)) signed int (*__anonymous_object8)(__attribute__ ((unused,unused)) signed int __anonymous_object9)));
+signed int __tpr7__Fi_PFi_PFi_i____1(__attribute__ ((unused,unused)) signed int (*__anonymous_object11)(__attribute__ ((unused)) signed int (*__anonymous_object12)(__attribute__ ((unused,unused)) signed int __anonymous_object13)));
 signed int __ad__Fi___1(){
     __attribute__ ((unused)) signed int ___retval_ad__i_1;
@@ -300,6 +335,6 @@
         struct __anonymous4 ___ret__13s__anonymous4_2;
         ((void)((*___dst__R13s__anonymous4_2).__i__i_2=___src__13s__anonymous4_2.__i__i_2));
-        ((void)___constructor__F_R13s__anonymous413s__anonymous4_autogen___2((&___ret__13s__anonymous4_2), ___src__13s__anonymous4_2));
-        return ((struct __anonymous4 )___ret__13s__anonymous4_2);
+        ((void)___constructor__F_R13s__anonymous413s__anonymous4_autogen___2((&___ret__13s__anonymous4_2), (*___dst__R13s__anonymous4_2)));
+        return ___ret__13s__anonymous4_2;
     }
     inline void ___constructor__F_R13s__anonymous4i_autogen___2(struct __anonymous4 *___dst__R13s__anonymous4_2, signed int __i__i_2){
@@ -313,5 +348,5 @@
     }
     inline void ___constructor__F_R13e__anonymous513e__anonymous5_intrinsic___2(enum __anonymous5 *___dst__R13e__anonymous5_2, enum __anonymous5 ___src__13e__anonymous5_2){
-        ((void)((*___dst__R13e__anonymous5_2)=___src__13e__anonymous5_2));
+        ((void)((*___dst__R13e__anonymous5_2)=___src__13e__anonymous5_2) /* ?{} */);
     }
     inline void ___destructor__F_R13e__anonymous5_intrinsic___2(__attribute__ ((unused)) enum __anonymous5 *___dst__R13e__anonymous5_2){
@@ -319,21 +354,22 @@
     inline enum __anonymous5 ___operator_assign__F13e__anonymous5_R13e__anonymous513e__anonymous5_intrinsic___2(enum __anonymous5 *___dst__R13e__anonymous5_2, enum __anonymous5 ___src__13e__anonymous5_2){
         enum __anonymous5 ___ret__13e__anonymous5_2;
-        ((void)(___ret__13e__anonymous5_2=((*___dst__R13e__anonymous5_2)=___src__13e__anonymous5_2)) /* ?{} */);
-        return ((enum __anonymous5 )___ret__13e__anonymous5_2);
+        ((void)((*___dst__R13e__anonymous5_2)=___src__13e__anonymous5_2));
+        ((void)(___ret__13e__anonymous5_2=(*___dst__R13e__anonymous5_2)) /* ?{} */);
+        return ___ret__13e__anonymous5_2;
     }
     ((void)sizeof(enum __anonymous5 ));
 }
-signed int __apd1__Fi_PiPi__1(__attribute__ ((unused,unused,unused)) signed int *__anonymous_object10, __attribute__ ((unused,unused,unused)) signed int *__anonymous_object11);
-signed int __apd2__Fi_PPiPPi__1(__attribute__ ((unused,unused,unused,unused)) signed int **__anonymous_object12, __attribute__ ((unused,unused,unused,unused)) signed int **__anonymous_object13);
-signed int __apd3__Fi_PiPi__1(__attribute__ ((unused,unused,unused)) signed int *__anonymous_object14, __attribute__ ((unused,unused,unused)) signed int *__anonymous_object15);
-signed int __apd4__Fi_PFi__PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object16)(), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object17)());
-signed int __apd5__Fi_PFi_i_PFi_i___1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object18)(__attribute__ ((unused)) signed int __anonymous_object19), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object20)(__attribute__ ((unused)) signed int __anonymous_object21));
-signed int __apd6__Fi_PFi__PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object22)(), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object23)());
-signed int __apd7__Fi_PFi_i_PFi_i___1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object24)(__attribute__ ((unused)) signed int __anonymous_object25), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object26)(__attribute__ ((unused)) signed int __anonymous_object27));
+signed int __apd1__Fi_PiPi__1(__attribute__ ((unused,unused,unused)) signed int *__anonymous_object14, __attribute__ ((unused,unused,unused)) signed int *__anonymous_object15);
+signed int __apd2__Fi_PPiPPi__1(__attribute__ ((unused,unused,unused,unused)) signed int **__anonymous_object16, __attribute__ ((unused,unused,unused,unused)) signed int **__anonymous_object17);
+signed int __apd3__Fi_PiPi__1(__attribute__ ((unused,unused,unused)) signed int *__anonymous_object18, __attribute__ ((unused,unused,unused)) signed int *__anonymous_object19);
+signed int __apd4__Fi_PFi__PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object20)(), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object21)());
+signed int __apd5__Fi_PFi_i_PFi_i___1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object22)(__attribute__ ((unused)) signed int __anonymous_object23), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object24)(__attribute__ ((unused)) signed int __anonymous_object25));
+signed int __apd6__Fi_PFi__PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object26)(), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object27)());
+signed int __apd7__Fi_PFi_i_PFi_i___1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object28)(__attribute__ ((unused)) signed int __anonymous_object29), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object30)(__attribute__ ((unused)) signed int __anonymous_object31));
 struct Vad {
-    __attribute__ ((unused)) signed int __anonymous_object28;
-    __attribute__ ((unused,unused)) signed int *__anonymous_object29;
-    __attribute__ ((unused,unused)) signed int __anonymous_object30[((unsigned int )10)];
-    __attribute__ ((unused,unused)) signed int (*__anonymous_object31)();
+    __attribute__ ((unused)) signed int __anonymous_object32;
+    __attribute__ ((unused,unused)) signed int *__anonymous_object33;
+    __attribute__ ((unused,unused)) signed int __anonymous_object34[((unsigned int )10)];
+    __attribute__ ((unused,unused)) signed int (*__anonymous_object35)();
 };
 static inline void ___constructor__F_R4sVad_autogen___1(struct Vad *___dst__R4sVad_1);
@@ -341,13 +377,113 @@
 static inline void ___destructor__F_R4sVad_autogen___1(struct Vad *___dst__R4sVad_1);
 static inline struct Vad ___operator_assign__F4sVad_R4sVad4sVad_autogen___1(struct Vad *___dst__R4sVad_1, struct Vad ___src__4sVad_1);
+static inline void ___constructor__F_R4sVadi_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object36);
+static inline void ___constructor__F_R4sVadiPi_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object37, signed int *__anonymous_object38);
+static inline void ___constructor__F_R4sVadiPiA0i_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object39, signed int *__anonymous_object40, signed int __anonymous_object41[((unsigned int )10)]);
+static inline void ___constructor__F_R4sVadiPiA0iPFi___autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object42, signed int *__anonymous_object43, signed int __anonymous_object44[((unsigned int )10)], signed int (*__anonymous_object45)());
 static inline void ___constructor__F_R4sVad_autogen___1(struct Vad *___dst__R4sVad_1){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33) /* ?{} */);
+    {
+        signed int _index0 = 0;
+        for (;(_index0<10);((void)(++_index0))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[_index0])))) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35) /* ?{} */);
 }
 static inline void ___constructor__F_R4sVad4sVad_autogen___1(struct Vad *___dst__R4sVad_1, struct Vad ___src__4sVad_1){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=___src__4sVad_1.__anonymous_object32) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33=___src__4sVad_1.__anonymous_object33) /* ?{} */);
+    {
+        signed int _index1 = 0;
+        for (;(_index1<10);((void)(++_index1))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[_index1])))=___src__4sVad_1.__anonymous_object34[_index1]) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35=___src__4sVad_1.__anonymous_object35) /* ?{} */);
 }
 static inline void ___destructor__F_R4sVad_autogen___1(struct Vad *___dst__R4sVad_1){
+    ((void)((*___dst__R4sVad_1).__anonymous_object35) /* ^?{} */);
+    {
+        signed int _index2 = (10-1);
+        for (;(_index2>=0);((void)(--_index2))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[_index2])))) /* ^?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object33) /* ^?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object32) /* ^?{} */);
 }
 static inline struct Vad ___operator_assign__F4sVad_R4sVad4sVad_autogen___1(struct Vad *___dst__R4sVad_1, struct Vad ___src__4sVad_1){
     struct Vad ___ret__4sVad_1;
-    ((void)___constructor__F_R4sVad4sVad_autogen___1((&___ret__4sVad_1), ___src__4sVad_1));
-    return ((struct Vad )___ret__4sVad_1);
-}
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=___src__4sVad_1.__anonymous_object32));
+    ((void)((*___dst__R4sVad_1).__anonymous_object33=___src__4sVad_1.__anonymous_object33));
+    {
+        signed int _index3 = 0;
+        for (;(_index3<10);((void)(++_index3))) {
+            ((void)((*___dst__R4sVad_1).__anonymous_object34[_index3]=___src__4sVad_1.__anonymous_object34[_index3]));
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35=___src__4sVad_1.__anonymous_object35));
+    ((void)___constructor__F_R4sVad4sVad_autogen___1((&___ret__4sVad_1), (*___dst__R4sVad_1)));
+    return ___ret__4sVad_1;
+}
+static inline void ___constructor__F_R4sVadi_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object46){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=__anonymous_object46) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33) /* ?{} */);
+    {
+        signed int _index4 = 0;
+        for (;(_index4<10);((void)(++_index4))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[_index4])))) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35) /* ?{} */);
+}
+static inline void ___constructor__F_R4sVadiPi_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object47, signed int *__anonymous_object48){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=__anonymous_object47) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33=__anonymous_object48) /* ?{} */);
+    {
+        signed int _index5 = 0;
+        for (;(_index5<10);((void)(++_index5))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[_index5])))) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35) /* ?{} */);
+}
+static inline void ___constructor__F_R4sVadiPiA0i_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object49, signed int *__anonymous_object50, signed int __anonymous_object51[((unsigned int )10)]){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=__anonymous_object49) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33=__anonymous_object50) /* ?{} */);
+    {
+        signed int _index6 = 0;
+        for (;(_index6<10);((void)(++_index6))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[_index6])))=__anonymous_object51[_index6]) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35) /* ?{} */);
+}
+static inline void ___constructor__F_R4sVadiPiA0iPFi___autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object52, signed int *__anonymous_object53, signed int __anonymous_object54[((unsigned int )10)], signed int (*__anonymous_object55)()){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=__anonymous_object52) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33=__anonymous_object53) /* ?{} */);
+    {
+        signed int _index7 = 0;
+        for (;(_index7<10);((void)(++_index7))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[_index7])))=__anonymous_object54[_index7]) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35=__anonymous_object55) /* ?{} */);
+}
Index: src/tests/.expect/32/declarationSpecifier.txt
===================================================================
--- src/tests/.expect/32/declarationSpecifier.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/32/declarationSpecifier.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -20,4 +20,5 @@
 static inline void ___destructor__F_R13s__anonymous0_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1);
 static inline struct __anonymous0 ___operator_assign__F13s__anonymous0_R13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1);
+static inline void ___constructor__F_R13s__anonymous0i_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous0_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1){
     ((void)((*___dst__R13s__anonymous0_1).__i__i_1) /* ?{} */);
@@ -32,6 +33,6 @@
     struct __anonymous0 ___ret__13s__anonymous0_1;
     ((void)((*___dst__R13s__anonymous0_1).__i__i_1=___src__13s__anonymous0_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), ___src__13s__anonymous0_1));
-    return ((struct __anonymous0 )___ret__13s__anonymous0_1);
+    ((void)___constructor__F_R13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), (*___dst__R13s__anonymous0_1)));
+    return ___ret__13s__anonymous0_1;
 }
 static inline void ___constructor__F_R13s__anonymous0i_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1, signed int __i__i_1){
@@ -46,4 +47,5 @@
 static inline void ___destructor__F_R13s__anonymous1_autogen___1(struct __anonymous1 *___dst__R13s__anonymous1_1);
 static inline struct __anonymous1 ___operator_assign__F13s__anonymous1_R13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__R13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1);
+static inline void ___constructor__F_R13s__anonymous1i_autogen___1(struct __anonymous1 *___dst__R13s__anonymous1_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous1_autogen___1(struct __anonymous1 *___dst__R13s__anonymous1_1){
     ((void)((*___dst__R13s__anonymous1_1).__i__i_1) /* ?{} */);
@@ -58,6 +60,6 @@
     struct __anonymous1 ___ret__13s__anonymous1_1;
     ((void)((*___dst__R13s__anonymous1_1).__i__i_1=___src__13s__anonymous1_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous113s__anonymous1_autogen___1((&___ret__13s__anonymous1_1), ___src__13s__anonymous1_1));
-    return ((struct __anonymous1 )___ret__13s__anonymous1_1);
+    ((void)___constructor__F_R13s__anonymous113s__anonymous1_autogen___1((&___ret__13s__anonymous1_1), (*___dst__R13s__anonymous1_1)));
+    return ___ret__13s__anonymous1_1;
 }
 static inline void ___constructor__F_R13s__anonymous1i_autogen___1(struct __anonymous1 *___dst__R13s__anonymous1_1, signed int __i__i_1){
@@ -72,4 +74,5 @@
 static inline void ___destructor__F_R13s__anonymous2_autogen___1(struct __anonymous2 *___dst__R13s__anonymous2_1);
 static inline struct __anonymous2 ___operator_assign__F13s__anonymous2_R13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__R13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1);
+static inline void ___constructor__F_R13s__anonymous2i_autogen___1(struct __anonymous2 *___dst__R13s__anonymous2_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous2_autogen___1(struct __anonymous2 *___dst__R13s__anonymous2_1){
     ((void)((*___dst__R13s__anonymous2_1).__i__i_1) /* ?{} */);
@@ -84,6 +87,6 @@
     struct __anonymous2 ___ret__13s__anonymous2_1;
     ((void)((*___dst__R13s__anonymous2_1).__i__i_1=___src__13s__anonymous2_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous213s__anonymous2_autogen___1((&___ret__13s__anonymous2_1), ___src__13s__anonymous2_1));
-    return ((struct __anonymous2 )___ret__13s__anonymous2_1);
+    ((void)___constructor__F_R13s__anonymous213s__anonymous2_autogen___1((&___ret__13s__anonymous2_1), (*___dst__R13s__anonymous2_1)));
+    return ___ret__13s__anonymous2_1;
 }
 static inline void ___constructor__F_R13s__anonymous2i_autogen___1(struct __anonymous2 *___dst__R13s__anonymous2_1, signed int __i__i_1){
@@ -98,4 +101,5 @@
 static inline void ___destructor__F_R13s__anonymous3_autogen___1(struct __anonymous3 *___dst__R13s__anonymous3_1);
 static inline struct __anonymous3 ___operator_assign__F13s__anonymous3_R13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__R13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1);
+static inline void ___constructor__F_R13s__anonymous3i_autogen___1(struct __anonymous3 *___dst__R13s__anonymous3_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous3_autogen___1(struct __anonymous3 *___dst__R13s__anonymous3_1){
     ((void)((*___dst__R13s__anonymous3_1).__i__i_1) /* ?{} */);
@@ -110,6 +114,6 @@
     struct __anonymous3 ___ret__13s__anonymous3_1;
     ((void)((*___dst__R13s__anonymous3_1).__i__i_1=___src__13s__anonymous3_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous313s__anonymous3_autogen___1((&___ret__13s__anonymous3_1), ___src__13s__anonymous3_1));
-    return ((struct __anonymous3 )___ret__13s__anonymous3_1);
+    ((void)___constructor__F_R13s__anonymous313s__anonymous3_autogen___1((&___ret__13s__anonymous3_1), (*___dst__R13s__anonymous3_1)));
+    return ___ret__13s__anonymous3_1;
 }
 static inline void ___constructor__F_R13s__anonymous3i_autogen___1(struct __anonymous3 *___dst__R13s__anonymous3_1, signed int __i__i_1){
@@ -124,4 +128,5 @@
 static inline void ___destructor__F_R13s__anonymous4_autogen___1(struct __anonymous4 *___dst__R13s__anonymous4_1);
 static inline struct __anonymous4 ___operator_assign__F13s__anonymous4_R13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__R13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1);
+static inline void ___constructor__F_R13s__anonymous4i_autogen___1(struct __anonymous4 *___dst__R13s__anonymous4_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous4_autogen___1(struct __anonymous4 *___dst__R13s__anonymous4_1){
     ((void)((*___dst__R13s__anonymous4_1).__i__i_1) /* ?{} */);
@@ -136,6 +141,6 @@
     struct __anonymous4 ___ret__13s__anonymous4_1;
     ((void)((*___dst__R13s__anonymous4_1).__i__i_1=___src__13s__anonymous4_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous413s__anonymous4_autogen___1((&___ret__13s__anonymous4_1), ___src__13s__anonymous4_1));
-    return ((struct __anonymous4 )___ret__13s__anonymous4_1);
+    ((void)___constructor__F_R13s__anonymous413s__anonymous4_autogen___1((&___ret__13s__anonymous4_1), (*___dst__R13s__anonymous4_1)));
+    return ___ret__13s__anonymous4_1;
 }
 static inline void ___constructor__F_R13s__anonymous4i_autogen___1(struct __anonymous4 *___dst__R13s__anonymous4_1, signed int __i__i_1){
@@ -150,4 +155,5 @@
 static inline void ___destructor__F_R13s__anonymous5_autogen___1(struct __anonymous5 *___dst__R13s__anonymous5_1);
 static inline struct __anonymous5 ___operator_assign__F13s__anonymous5_R13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__R13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1);
+static inline void ___constructor__F_R13s__anonymous5i_autogen___1(struct __anonymous5 *___dst__R13s__anonymous5_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous5_autogen___1(struct __anonymous5 *___dst__R13s__anonymous5_1){
     ((void)((*___dst__R13s__anonymous5_1).__i__i_1) /* ?{} */);
@@ -162,6 +168,6 @@
     struct __anonymous5 ___ret__13s__anonymous5_1;
     ((void)((*___dst__R13s__anonymous5_1).__i__i_1=___src__13s__anonymous5_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous513s__anonymous5_autogen___1((&___ret__13s__anonymous5_1), ___src__13s__anonymous5_1));
-    return ((struct __anonymous5 )___ret__13s__anonymous5_1);
+    ((void)___constructor__F_R13s__anonymous513s__anonymous5_autogen___1((&___ret__13s__anonymous5_1), (*___dst__R13s__anonymous5_1)));
+    return ___ret__13s__anonymous5_1;
 }
 static inline void ___constructor__F_R13s__anonymous5i_autogen___1(struct __anonymous5 *___dst__R13s__anonymous5_1, signed int __i__i_1){
@@ -176,4 +182,5 @@
 static inline void ___destructor__F_R13s__anonymous6_autogen___1(struct __anonymous6 *___dst__R13s__anonymous6_1);
 static inline struct __anonymous6 ___operator_assign__F13s__anonymous6_R13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__R13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1);
+static inline void ___constructor__F_R13s__anonymous6i_autogen___1(struct __anonymous6 *___dst__R13s__anonymous6_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous6_autogen___1(struct __anonymous6 *___dst__R13s__anonymous6_1){
     ((void)((*___dst__R13s__anonymous6_1).__i__i_1) /* ?{} */);
@@ -188,6 +195,6 @@
     struct __anonymous6 ___ret__13s__anonymous6_1;
     ((void)((*___dst__R13s__anonymous6_1).__i__i_1=___src__13s__anonymous6_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous613s__anonymous6_autogen___1((&___ret__13s__anonymous6_1), ___src__13s__anonymous6_1));
-    return ((struct __anonymous6 )___ret__13s__anonymous6_1);
+    ((void)___constructor__F_R13s__anonymous613s__anonymous6_autogen___1((&___ret__13s__anonymous6_1), (*___dst__R13s__anonymous6_1)));
+    return ___ret__13s__anonymous6_1;
 }
 static inline void ___constructor__F_R13s__anonymous6i_autogen___1(struct __anonymous6 *___dst__R13s__anonymous6_1, signed int __i__i_1){
@@ -202,4 +209,5 @@
 static inline void ___destructor__F_R13s__anonymous7_autogen___1(struct __anonymous7 *___dst__R13s__anonymous7_1);
 static inline struct __anonymous7 ___operator_assign__F13s__anonymous7_R13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__R13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1);
+static inline void ___constructor__F_R13s__anonymous7i_autogen___1(struct __anonymous7 *___dst__R13s__anonymous7_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous7_autogen___1(struct __anonymous7 *___dst__R13s__anonymous7_1){
     ((void)((*___dst__R13s__anonymous7_1).__i__i_1) /* ?{} */);
@@ -214,6 +222,6 @@
     struct __anonymous7 ___ret__13s__anonymous7_1;
     ((void)((*___dst__R13s__anonymous7_1).__i__i_1=___src__13s__anonymous7_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous713s__anonymous7_autogen___1((&___ret__13s__anonymous7_1), ___src__13s__anonymous7_1));
-    return ((struct __anonymous7 )___ret__13s__anonymous7_1);
+    ((void)___constructor__F_R13s__anonymous713s__anonymous7_autogen___1((&___ret__13s__anonymous7_1), (*___dst__R13s__anonymous7_1)));
+    return ___ret__13s__anonymous7_1;
 }
 static inline void ___constructor__F_R13s__anonymous7i_autogen___1(struct __anonymous7 *___dst__R13s__anonymous7_1, signed int __i__i_1){
@@ -236,4 +244,5 @@
 static inline void ___destructor__F_R13s__anonymous8_autogen___1(struct __anonymous8 *___dst__R13s__anonymous8_1);
 static inline struct __anonymous8 ___operator_assign__F13s__anonymous8_R13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__R13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1);
+static inline void ___constructor__F_R13s__anonymous8s_autogen___1(struct __anonymous8 *___dst__R13s__anonymous8_1, signed short int __i__s_1);
 static inline void ___constructor__F_R13s__anonymous8_autogen___1(struct __anonymous8 *___dst__R13s__anonymous8_1){
     ((void)((*___dst__R13s__anonymous8_1).__i__s_1) /* ?{} */);
@@ -248,6 +257,6 @@
     struct __anonymous8 ___ret__13s__anonymous8_1;
     ((void)((*___dst__R13s__anonymous8_1).__i__s_1=___src__13s__anonymous8_1.__i__s_1));
-    ((void)___constructor__F_R13s__anonymous813s__anonymous8_autogen___1((&___ret__13s__anonymous8_1), ___src__13s__anonymous8_1));
-    return ((struct __anonymous8 )___ret__13s__anonymous8_1);
+    ((void)___constructor__F_R13s__anonymous813s__anonymous8_autogen___1((&___ret__13s__anonymous8_1), (*___dst__R13s__anonymous8_1)));
+    return ___ret__13s__anonymous8_1;
 }
 static inline void ___constructor__F_R13s__anonymous8s_autogen___1(struct __anonymous8 *___dst__R13s__anonymous8_1, signed short int __i__s_1){
@@ -262,4 +271,5 @@
 static inline void ___destructor__F_R13s__anonymous9_autogen___1(struct __anonymous9 *___dst__R13s__anonymous9_1);
 static inline struct __anonymous9 ___operator_assign__F13s__anonymous9_R13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__R13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1);
+static inline void ___constructor__F_R13s__anonymous9s_autogen___1(struct __anonymous9 *___dst__R13s__anonymous9_1, signed short int __i__s_1);
 static inline void ___constructor__F_R13s__anonymous9_autogen___1(struct __anonymous9 *___dst__R13s__anonymous9_1){
     ((void)((*___dst__R13s__anonymous9_1).__i__s_1) /* ?{} */);
@@ -274,6 +284,6 @@
     struct __anonymous9 ___ret__13s__anonymous9_1;
     ((void)((*___dst__R13s__anonymous9_1).__i__s_1=___src__13s__anonymous9_1.__i__s_1));
-    ((void)___constructor__F_R13s__anonymous913s__anonymous9_autogen___1((&___ret__13s__anonymous9_1), ___src__13s__anonymous9_1));
-    return ((struct __anonymous9 )___ret__13s__anonymous9_1);
+    ((void)___constructor__F_R13s__anonymous913s__anonymous9_autogen___1((&___ret__13s__anonymous9_1), (*___dst__R13s__anonymous9_1)));
+    return ___ret__13s__anonymous9_1;
 }
 static inline void ___constructor__F_R13s__anonymous9s_autogen___1(struct __anonymous9 *___dst__R13s__anonymous9_1, signed short int __i__s_1){
@@ -288,4 +298,5 @@
 static inline void ___destructor__F_R14s__anonymous10_autogen___1(struct __anonymous10 *___dst__R14s__anonymous10_1);
 static inline struct __anonymous10 ___operator_assign__F14s__anonymous10_R14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__R14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1);
+static inline void ___constructor__F_R14s__anonymous10s_autogen___1(struct __anonymous10 *___dst__R14s__anonymous10_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous10_autogen___1(struct __anonymous10 *___dst__R14s__anonymous10_1){
     ((void)((*___dst__R14s__anonymous10_1).__i__s_1) /* ?{} */);
@@ -300,6 +311,6 @@
     struct __anonymous10 ___ret__14s__anonymous10_1;
     ((void)((*___dst__R14s__anonymous10_1).__i__s_1=___src__14s__anonymous10_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1014s__anonymous10_autogen___1((&___ret__14s__anonymous10_1), ___src__14s__anonymous10_1));
-    return ((struct __anonymous10 )___ret__14s__anonymous10_1);
+    ((void)___constructor__F_R14s__anonymous1014s__anonymous10_autogen___1((&___ret__14s__anonymous10_1), (*___dst__R14s__anonymous10_1)));
+    return ___ret__14s__anonymous10_1;
 }
 static inline void ___constructor__F_R14s__anonymous10s_autogen___1(struct __anonymous10 *___dst__R14s__anonymous10_1, signed short int __i__s_1){
@@ -314,4 +325,5 @@
 static inline void ___destructor__F_R14s__anonymous11_autogen___1(struct __anonymous11 *___dst__R14s__anonymous11_1);
 static inline struct __anonymous11 ___operator_assign__F14s__anonymous11_R14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__R14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1);
+static inline void ___constructor__F_R14s__anonymous11s_autogen___1(struct __anonymous11 *___dst__R14s__anonymous11_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous11_autogen___1(struct __anonymous11 *___dst__R14s__anonymous11_1){
     ((void)((*___dst__R14s__anonymous11_1).__i__s_1) /* ?{} */);
@@ -326,6 +338,6 @@
     struct __anonymous11 ___ret__14s__anonymous11_1;
     ((void)((*___dst__R14s__anonymous11_1).__i__s_1=___src__14s__anonymous11_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1114s__anonymous11_autogen___1((&___ret__14s__anonymous11_1), ___src__14s__anonymous11_1));
-    return ((struct __anonymous11 )___ret__14s__anonymous11_1);
+    ((void)___constructor__F_R14s__anonymous1114s__anonymous11_autogen___1((&___ret__14s__anonymous11_1), (*___dst__R14s__anonymous11_1)));
+    return ___ret__14s__anonymous11_1;
 }
 static inline void ___constructor__F_R14s__anonymous11s_autogen___1(struct __anonymous11 *___dst__R14s__anonymous11_1, signed short int __i__s_1){
@@ -340,4 +352,5 @@
 static inline void ___destructor__F_R14s__anonymous12_autogen___1(struct __anonymous12 *___dst__R14s__anonymous12_1);
 static inline struct __anonymous12 ___operator_assign__F14s__anonymous12_R14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__R14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1);
+static inline void ___constructor__F_R14s__anonymous12s_autogen___1(struct __anonymous12 *___dst__R14s__anonymous12_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous12_autogen___1(struct __anonymous12 *___dst__R14s__anonymous12_1){
     ((void)((*___dst__R14s__anonymous12_1).__i__s_1) /* ?{} */);
@@ -352,6 +365,6 @@
     struct __anonymous12 ___ret__14s__anonymous12_1;
     ((void)((*___dst__R14s__anonymous12_1).__i__s_1=___src__14s__anonymous12_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1214s__anonymous12_autogen___1((&___ret__14s__anonymous12_1), ___src__14s__anonymous12_1));
-    return ((struct __anonymous12 )___ret__14s__anonymous12_1);
+    ((void)___constructor__F_R14s__anonymous1214s__anonymous12_autogen___1((&___ret__14s__anonymous12_1), (*___dst__R14s__anonymous12_1)));
+    return ___ret__14s__anonymous12_1;
 }
 static inline void ___constructor__F_R14s__anonymous12s_autogen___1(struct __anonymous12 *___dst__R14s__anonymous12_1, signed short int __i__s_1){
@@ -366,4 +379,5 @@
 static inline void ___destructor__F_R14s__anonymous13_autogen___1(struct __anonymous13 *___dst__R14s__anonymous13_1);
 static inline struct __anonymous13 ___operator_assign__F14s__anonymous13_R14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__R14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1);
+static inline void ___constructor__F_R14s__anonymous13s_autogen___1(struct __anonymous13 *___dst__R14s__anonymous13_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous13_autogen___1(struct __anonymous13 *___dst__R14s__anonymous13_1){
     ((void)((*___dst__R14s__anonymous13_1).__i__s_1) /* ?{} */);
@@ -378,6 +392,6 @@
     struct __anonymous13 ___ret__14s__anonymous13_1;
     ((void)((*___dst__R14s__anonymous13_1).__i__s_1=___src__14s__anonymous13_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1314s__anonymous13_autogen___1((&___ret__14s__anonymous13_1), ___src__14s__anonymous13_1));
-    return ((struct __anonymous13 )___ret__14s__anonymous13_1);
+    ((void)___constructor__F_R14s__anonymous1314s__anonymous13_autogen___1((&___ret__14s__anonymous13_1), (*___dst__R14s__anonymous13_1)));
+    return ___ret__14s__anonymous13_1;
 }
 static inline void ___constructor__F_R14s__anonymous13s_autogen___1(struct __anonymous13 *___dst__R14s__anonymous13_1, signed short int __i__s_1){
@@ -392,4 +406,5 @@
 static inline void ___destructor__F_R14s__anonymous14_autogen___1(struct __anonymous14 *___dst__R14s__anonymous14_1);
 static inline struct __anonymous14 ___operator_assign__F14s__anonymous14_R14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__R14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1);
+static inline void ___constructor__F_R14s__anonymous14s_autogen___1(struct __anonymous14 *___dst__R14s__anonymous14_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous14_autogen___1(struct __anonymous14 *___dst__R14s__anonymous14_1){
     ((void)((*___dst__R14s__anonymous14_1).__i__s_1) /* ?{} */);
@@ -404,6 +419,6 @@
     struct __anonymous14 ___ret__14s__anonymous14_1;
     ((void)((*___dst__R14s__anonymous14_1).__i__s_1=___src__14s__anonymous14_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1414s__anonymous14_autogen___1((&___ret__14s__anonymous14_1), ___src__14s__anonymous14_1));
-    return ((struct __anonymous14 )___ret__14s__anonymous14_1);
+    ((void)___constructor__F_R14s__anonymous1414s__anonymous14_autogen___1((&___ret__14s__anonymous14_1), (*___dst__R14s__anonymous14_1)));
+    return ___ret__14s__anonymous14_1;
 }
 static inline void ___constructor__F_R14s__anonymous14s_autogen___1(struct __anonymous14 *___dst__R14s__anonymous14_1, signed short int __i__s_1){
@@ -418,4 +433,5 @@
 static inline void ___destructor__F_R14s__anonymous15_autogen___1(struct __anonymous15 *___dst__R14s__anonymous15_1);
 static inline struct __anonymous15 ___operator_assign__F14s__anonymous15_R14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__R14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1);
+static inline void ___constructor__F_R14s__anonymous15s_autogen___1(struct __anonymous15 *___dst__R14s__anonymous15_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous15_autogen___1(struct __anonymous15 *___dst__R14s__anonymous15_1){
     ((void)((*___dst__R14s__anonymous15_1).__i__s_1) /* ?{} */);
@@ -430,6 +446,6 @@
     struct __anonymous15 ___ret__14s__anonymous15_1;
     ((void)((*___dst__R14s__anonymous15_1).__i__s_1=___src__14s__anonymous15_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1514s__anonymous15_autogen___1((&___ret__14s__anonymous15_1), ___src__14s__anonymous15_1));
-    return ((struct __anonymous15 )___ret__14s__anonymous15_1);
+    ((void)___constructor__F_R14s__anonymous1514s__anonymous15_autogen___1((&___ret__14s__anonymous15_1), (*___dst__R14s__anonymous15_1)));
+    return ___ret__14s__anonymous15_1;
 }
 static inline void ___constructor__F_R14s__anonymous15s_autogen___1(struct __anonymous15 *___dst__R14s__anonymous15_1, signed short int __i__s_1){
@@ -460,4 +476,5 @@
 static inline void ___destructor__F_R14s__anonymous16_autogen___1(struct __anonymous16 *___dst__R14s__anonymous16_1);
 static inline struct __anonymous16 ___operator_assign__F14s__anonymous16_R14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__R14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1);
+static inline void ___constructor__F_R14s__anonymous16i_autogen___1(struct __anonymous16 *___dst__R14s__anonymous16_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous16_autogen___1(struct __anonymous16 *___dst__R14s__anonymous16_1){
     ((void)((*___dst__R14s__anonymous16_1).__i__i_1) /* ?{} */);
@@ -472,6 +489,6 @@
     struct __anonymous16 ___ret__14s__anonymous16_1;
     ((void)((*___dst__R14s__anonymous16_1).__i__i_1=___src__14s__anonymous16_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous1614s__anonymous16_autogen___1((&___ret__14s__anonymous16_1), ___src__14s__anonymous16_1));
-    return ((struct __anonymous16 )___ret__14s__anonymous16_1);
+    ((void)___constructor__F_R14s__anonymous1614s__anonymous16_autogen___1((&___ret__14s__anonymous16_1), (*___dst__R14s__anonymous16_1)));
+    return ___ret__14s__anonymous16_1;
 }
 static inline void ___constructor__F_R14s__anonymous16i_autogen___1(struct __anonymous16 *___dst__R14s__anonymous16_1, signed int __i__i_1){
@@ -486,4 +503,5 @@
 static inline void ___destructor__F_R14s__anonymous17_autogen___1(struct __anonymous17 *___dst__R14s__anonymous17_1);
 static inline struct __anonymous17 ___operator_assign__F14s__anonymous17_R14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__R14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1);
+static inline void ___constructor__F_R14s__anonymous17i_autogen___1(struct __anonymous17 *___dst__R14s__anonymous17_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous17_autogen___1(struct __anonymous17 *___dst__R14s__anonymous17_1){
     ((void)((*___dst__R14s__anonymous17_1).__i__i_1) /* ?{} */);
@@ -498,6 +516,6 @@
     struct __anonymous17 ___ret__14s__anonymous17_1;
     ((void)((*___dst__R14s__anonymous17_1).__i__i_1=___src__14s__anonymous17_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous1714s__anonymous17_autogen___1((&___ret__14s__anonymous17_1), ___src__14s__anonymous17_1));
-    return ((struct __anonymous17 )___ret__14s__anonymous17_1);
+    ((void)___constructor__F_R14s__anonymous1714s__anonymous17_autogen___1((&___ret__14s__anonymous17_1), (*___dst__R14s__anonymous17_1)));
+    return ___ret__14s__anonymous17_1;
 }
 static inline void ___constructor__F_R14s__anonymous17i_autogen___1(struct __anonymous17 *___dst__R14s__anonymous17_1, signed int __i__i_1){
@@ -512,4 +530,5 @@
 static inline void ___destructor__F_R14s__anonymous18_autogen___1(struct __anonymous18 *___dst__R14s__anonymous18_1);
 static inline struct __anonymous18 ___operator_assign__F14s__anonymous18_R14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__R14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1);
+static inline void ___constructor__F_R14s__anonymous18i_autogen___1(struct __anonymous18 *___dst__R14s__anonymous18_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous18_autogen___1(struct __anonymous18 *___dst__R14s__anonymous18_1){
     ((void)((*___dst__R14s__anonymous18_1).__i__i_1) /* ?{} */);
@@ -524,6 +543,6 @@
     struct __anonymous18 ___ret__14s__anonymous18_1;
     ((void)((*___dst__R14s__anonymous18_1).__i__i_1=___src__14s__anonymous18_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous1814s__anonymous18_autogen___1((&___ret__14s__anonymous18_1), ___src__14s__anonymous18_1));
-    return ((struct __anonymous18 )___ret__14s__anonymous18_1);
+    ((void)___constructor__F_R14s__anonymous1814s__anonymous18_autogen___1((&___ret__14s__anonymous18_1), (*___dst__R14s__anonymous18_1)));
+    return ___ret__14s__anonymous18_1;
 }
 static inline void ___constructor__F_R14s__anonymous18i_autogen___1(struct __anonymous18 *___dst__R14s__anonymous18_1, signed int __i__i_1){
@@ -538,4 +557,5 @@
 static inline void ___destructor__F_R14s__anonymous19_autogen___1(struct __anonymous19 *___dst__R14s__anonymous19_1);
 static inline struct __anonymous19 ___operator_assign__F14s__anonymous19_R14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__R14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1);
+static inline void ___constructor__F_R14s__anonymous19i_autogen___1(struct __anonymous19 *___dst__R14s__anonymous19_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous19_autogen___1(struct __anonymous19 *___dst__R14s__anonymous19_1){
     ((void)((*___dst__R14s__anonymous19_1).__i__i_1) /* ?{} */);
@@ -550,6 +570,6 @@
     struct __anonymous19 ___ret__14s__anonymous19_1;
     ((void)((*___dst__R14s__anonymous19_1).__i__i_1=___src__14s__anonymous19_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous1914s__anonymous19_autogen___1((&___ret__14s__anonymous19_1), ___src__14s__anonymous19_1));
-    return ((struct __anonymous19 )___ret__14s__anonymous19_1);
+    ((void)___constructor__F_R14s__anonymous1914s__anonymous19_autogen___1((&___ret__14s__anonymous19_1), (*___dst__R14s__anonymous19_1)));
+    return ___ret__14s__anonymous19_1;
 }
 static inline void ___constructor__F_R14s__anonymous19i_autogen___1(struct __anonymous19 *___dst__R14s__anonymous19_1, signed int __i__i_1){
@@ -564,4 +584,5 @@
 static inline void ___destructor__F_R14s__anonymous20_autogen___1(struct __anonymous20 *___dst__R14s__anonymous20_1);
 static inline struct __anonymous20 ___operator_assign__F14s__anonymous20_R14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__R14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1);
+static inline void ___constructor__F_R14s__anonymous20i_autogen___1(struct __anonymous20 *___dst__R14s__anonymous20_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous20_autogen___1(struct __anonymous20 *___dst__R14s__anonymous20_1){
     ((void)((*___dst__R14s__anonymous20_1).__i__i_1) /* ?{} */);
@@ -576,6 +597,6 @@
     struct __anonymous20 ___ret__14s__anonymous20_1;
     ((void)((*___dst__R14s__anonymous20_1).__i__i_1=___src__14s__anonymous20_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous2014s__anonymous20_autogen___1((&___ret__14s__anonymous20_1), ___src__14s__anonymous20_1));
-    return ((struct __anonymous20 )___ret__14s__anonymous20_1);
+    ((void)___constructor__F_R14s__anonymous2014s__anonymous20_autogen___1((&___ret__14s__anonymous20_1), (*___dst__R14s__anonymous20_1)));
+    return ___ret__14s__anonymous20_1;
 }
 static inline void ___constructor__F_R14s__anonymous20i_autogen___1(struct __anonymous20 *___dst__R14s__anonymous20_1, signed int __i__i_1){
@@ -590,4 +611,5 @@
 static inline void ___destructor__F_R14s__anonymous21_autogen___1(struct __anonymous21 *___dst__R14s__anonymous21_1);
 static inline struct __anonymous21 ___operator_assign__F14s__anonymous21_R14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__R14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1);
+static inline void ___constructor__F_R14s__anonymous21i_autogen___1(struct __anonymous21 *___dst__R14s__anonymous21_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous21_autogen___1(struct __anonymous21 *___dst__R14s__anonymous21_1){
     ((void)((*___dst__R14s__anonymous21_1).__i__i_1) /* ?{} */);
@@ -602,6 +624,6 @@
     struct __anonymous21 ___ret__14s__anonymous21_1;
     ((void)((*___dst__R14s__anonymous21_1).__i__i_1=___src__14s__anonymous21_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous2114s__anonymous21_autogen___1((&___ret__14s__anonymous21_1), ___src__14s__anonymous21_1));
-    return ((struct __anonymous21 )___ret__14s__anonymous21_1);
+    ((void)___constructor__F_R14s__anonymous2114s__anonymous21_autogen___1((&___ret__14s__anonymous21_1), (*___dst__R14s__anonymous21_1)));
+    return ___ret__14s__anonymous21_1;
 }
 static inline void ___constructor__F_R14s__anonymous21i_autogen___1(struct __anonymous21 *___dst__R14s__anonymous21_1, signed int __i__i_1){
@@ -616,4 +638,5 @@
 static inline void ___destructor__F_R14s__anonymous22_autogen___1(struct __anonymous22 *___dst__R14s__anonymous22_1);
 static inline struct __anonymous22 ___operator_assign__F14s__anonymous22_R14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__R14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1);
+static inline void ___constructor__F_R14s__anonymous22i_autogen___1(struct __anonymous22 *___dst__R14s__anonymous22_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous22_autogen___1(struct __anonymous22 *___dst__R14s__anonymous22_1){
     ((void)((*___dst__R14s__anonymous22_1).__i__i_1) /* ?{} */);
@@ -628,6 +651,6 @@
     struct __anonymous22 ___ret__14s__anonymous22_1;
     ((void)((*___dst__R14s__anonymous22_1).__i__i_1=___src__14s__anonymous22_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous2214s__anonymous22_autogen___1((&___ret__14s__anonymous22_1), ___src__14s__anonymous22_1));
-    return ((struct __anonymous22 )___ret__14s__anonymous22_1);
+    ((void)___constructor__F_R14s__anonymous2214s__anonymous22_autogen___1((&___ret__14s__anonymous22_1), (*___dst__R14s__anonymous22_1)));
+    return ___ret__14s__anonymous22_1;
 }
 static inline void ___constructor__F_R14s__anonymous22i_autogen___1(struct __anonymous22 *___dst__R14s__anonymous22_1, signed int __i__i_1){
@@ -642,4 +665,5 @@
 static inline void ___destructor__F_R14s__anonymous23_autogen___1(struct __anonymous23 *___dst__R14s__anonymous23_1);
 static inline struct __anonymous23 ___operator_assign__F14s__anonymous23_R14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__R14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1);
+static inline void ___constructor__F_R14s__anonymous23i_autogen___1(struct __anonymous23 *___dst__R14s__anonymous23_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous23_autogen___1(struct __anonymous23 *___dst__R14s__anonymous23_1){
     ((void)((*___dst__R14s__anonymous23_1).__i__i_1) /* ?{} */);
@@ -654,6 +678,6 @@
     struct __anonymous23 ___ret__14s__anonymous23_1;
     ((void)((*___dst__R14s__anonymous23_1).__i__i_1=___src__14s__anonymous23_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous2314s__anonymous23_autogen___1((&___ret__14s__anonymous23_1), ___src__14s__anonymous23_1));
-    return ((struct __anonymous23 )___ret__14s__anonymous23_1);
+    ((void)___constructor__F_R14s__anonymous2314s__anonymous23_autogen___1((&___ret__14s__anonymous23_1), (*___dst__R14s__anonymous23_1)));
+    return ___ret__14s__anonymous23_1;
 }
 static inline void ___constructor__F_R14s__anonymous23i_autogen___1(struct __anonymous23 *___dst__R14s__anonymous23_1, signed int __i__i_1){
@@ -672,7 +696,7 @@
     __attribute__ ((unused)) signed int ___retval_main__i_1;
     ((void)(___retval_main__i_1=((signed int )0)) /* ?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
     ((void)(___retval_main__i_1=0) /* ?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi_iPPCc__1(argc, argv); }
@@ -689,4 +713,4 @@
     ((void)(___retval_main__i_1=(((void)(_tmp_cp_ret0=invoke_main(__argc__i_1, __argv__PPc_1, __envp__PPc_1))) , _tmp_cp_ret0)) /* ?{} */);
     ((void)(_tmp_cp_ret0) /* ^?{} */);
-    return ((signed int )___retval_main__i_1);
-}
+    return ___retval_main__i_1;
+}
Index: src/tests/.expect/32/extension.txt
===================================================================
--- src/tests/.expect/32/extension.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/32/extension.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -17,4 +17,7 @@
 static inline void ___destructor__F_R2sS_autogen___1(struct S *___dst__R2sS_1);
 static inline struct S ___operator_assign__F2sS_R2sS2sS_autogen___1(struct S *___dst__R2sS_1, struct S ___src__2sS_1);
+static inline void ___constructor__F_R2sSi_autogen___1(struct S *___dst__R2sS_1, signed int __a__i_1);
+static inline void ___constructor__F_R2sSii_autogen___1(struct S *___dst__R2sS_1, signed int __a__i_1, signed int __b__i_1);
+static inline void ___constructor__F_R2sSiii_autogen___1(struct S *___dst__R2sS_1, signed int __a__i_1, signed int __b__i_1, signed int __c__i_1);
 static inline void ___constructor__F_R2sS_autogen___1(struct S *___dst__R2sS_1){
     ((void)((*___dst__R2sS_1).__a__i_1) /* ?{} */);
@@ -37,6 +40,6 @@
     ((void)((*___dst__R2sS_1).__b__i_1=___src__2sS_1.__b__i_1));
     ((void)((*___dst__R2sS_1).__c__i_1=___src__2sS_1.__c__i_1));
-    ((void)___constructor__F_R2sS2sS_autogen___1((&___ret__2sS_1), ___src__2sS_1));
-    return ((struct S )___ret__2sS_1);
+    ((void)___constructor__F_R2sS2sS_autogen___1((&___ret__2sS_1), (*___dst__R2sS_1)));
+    return ___ret__2sS_1;
 }
 static inline void ___constructor__F_R2sSi_autogen___1(struct S *___dst__R2sS_1, signed int __a__i_1){
@@ -60,4 +63,9 @@
     __extension__ signed int __c__i_1;
 };
+static inline void ___constructor__F_R2uU_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1);
+static inline void ___constructor__F_R2uU2uU_autogen___1(union U *___dst__R2uU_1, union U ___src__2uU_1);
+static inline void ___destructor__F_R2uU_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1);
+static inline union U ___operator_assign__F2uU_R2uU2uU_autogen___1(union U *___dst__R2uU_1, union U ___src__2uU_1);
+static inline void ___constructor__F_R2uUi_autogen___1(union U *___dst__R2uU_1, signed int __a__i_1);
 static inline void ___constructor__F_R2uU_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1){
 }
@@ -70,9 +78,9 @@
     union U ___ret__2uU_1;
     ((void)__builtin_memcpy(((void *)___dst__R2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U )));
-    ((void)___constructor__F_R2uU2uU_autogen___1((&___ret__2uU_1), ___src__2uU_1));
-    return ((union U )___ret__2uU_1);
-}
-static inline void ___constructor__F_R2uUi_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1, signed int __src__i_1){
-    ((void)__builtin_memcpy(((void *)___dst__R2uU_1), ((const void *)(&__src__i_1)), sizeof(signed int )));
+    ((void)___constructor__F_R2uU2uU_autogen___1((&___ret__2uU_1), (*___dst__R2uU_1)));
+    return ___ret__2uU_1;
+}
+static inline void ___constructor__F_R2uUi_autogen___1(union U *___dst__R2uU_1, signed int __a__i_1){
+    ((void)__builtin_memcpy(((void *)___dst__R2uU_1), ((const void *)(&__a__i_1)), sizeof(signed int )));
 }
 __extension__ enum E {
@@ -94,5 +102,88 @@
         __extension__ signed int *__z__Pi_2;
     };
-    signed int __i__i_2 = ((signed int )(__extension__ __a__i_1+__extension__ 3));
+    inline void ___constructor__F_R2sS_autogen___2(struct S *___dst__R2sS_2){
+        ((void)((*___dst__R2sS_2).__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sS2sS_autogen___2(struct S *___dst__R2sS_2, struct S ___src__2sS_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=___src__2sS_2.__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=___src__2sS_2.__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=___src__2sS_2.__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=___src__2sS_2.__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2=___src__2sS_2.__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2=___src__2sS_2.__z__Pi_2) /* ?{} */);
+    }
+    inline void ___destructor__F_R2sS_autogen___2(struct S *___dst__R2sS_2){
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__a__i_2) /* ^?{} */);
+    }
+    inline struct S ___operator_assign__F2sS_R2sS2sS_autogen___2(struct S *___dst__R2sS_2, struct S ___src__2sS_2){
+        struct S ___ret__2sS_2;
+        ((void)((*___dst__R2sS_2).__a__i_2=___src__2sS_2.__a__i_2));
+        ((void)((*___dst__R2sS_2).__b__i_2=___src__2sS_2.__b__i_2));
+        ((void)((*___dst__R2sS_2).__c__i_2=___src__2sS_2.__c__i_2));
+        ((void)((*___dst__R2sS_2).__x__Pi_2=___src__2sS_2.__x__Pi_2));
+        ((void)((*___dst__R2sS_2).__y__Pi_2=___src__2sS_2.__y__Pi_2));
+        ((void)((*___dst__R2sS_2).__z__Pi_2=___src__2sS_2.__z__Pi_2));
+        ((void)___constructor__F_R2sS2sS_autogen___2((&___ret__2sS_2), (*___dst__R2sS_2)));
+        return ___ret__2sS_2;
+    }
+    inline void ___constructor__F_R2sSi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSii_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiii_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiiiPi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2, signed int *__x__Pi_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiiiPiPi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2, signed int *__x__Pi_2, signed int *__y__Pi_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2=__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiiiPiPiPi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2, signed int *__x__Pi_2, signed int *__y__Pi_2, signed int *__z__Pi_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2=__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2=__z__Pi_2) /* ?{} */);
+    }
+    signed int __i__i_2 = (__extension__ __a__i_1+__extension__ 3);
     ((void)__extension__ 3);
     ((void)__extension__ __a__i_1);
Index: src/tests/.expect/32/gccExtensions.txt
===================================================================
--- src/tests/.expect/32/gccExtensions.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/32/gccExtensions.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -63,6 +63,6 @@
         ((void)((*___dst__R2sS_2).__b__i_2=___src__2sS_2.__b__i_2));
         ((void)((*___dst__R2sS_2).__c__i_2=___src__2sS_2.__c__i_2));
-        ((void)___constructor__F_R2sS2sS_autogen___2((&___ret__2sS_2), ___src__2sS_2));
-        return ((struct S )___ret__2sS_2);
+        ((void)___constructor__F_R2sS2sS_autogen___2((&___ret__2sS_2), (*___dst__R2sS_2)));
+        return ___ret__2sS_2;
     }
     inline void ___constructor__F_R2sSi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2){
@@ -81,5 +81,5 @@
         ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
     }
-    signed int __i__i_2 = ((signed int )__extension__ 3);
+    signed int __i__i_2 = __extension__ 3;
     __extension__ signed int __a__i_2;
     __extension__ signed int __b__i_2;
@@ -113,6 +113,6 @@
         struct s2 ___ret__3ss2_2;
         ((void)((*___dst__R3ss2_2).__i__i_2=___src__3ss2_2.__i__i_2));
-        ((void)___constructor__F_R3ss23ss2_autogen___2((&___ret__3ss2_2), ___src__3ss2_2));
-        return ((struct s2 )___ret__3ss2_2);
+        ((void)___constructor__F_R3ss23ss2_autogen___2((&___ret__3ss2_2), (*___dst__R3ss2_2)));
+        return ___ret__3ss2_2;
     }
     inline void ___constructor__F_R3ss2i_autogen___2(struct s2 *___dst__R3ss2_2, signed int __i__i_2){
@@ -134,6 +134,6 @@
         struct s3 ___ret__3ss3_2;
         ((void)((*___dst__R3ss3_2).__i__i_2=___src__3ss3_2.__i__i_2));
-        ((void)___constructor__F_R3ss33ss3_autogen___2((&___ret__3ss3_2), ___src__3ss3_2));
-        return ((struct s3 )___ret__3ss3_2);
+        ((void)___constructor__F_R3ss33ss3_autogen___2((&___ret__3ss3_2), (*___dst__R3ss3_2)));
+        return ___ret__3ss3_2;
     }
     inline void ___constructor__F_R3ss3i_autogen___2(struct s3 *___dst__R3ss3_2, signed int __i__i_2){
@@ -157,6 +157,6 @@
         struct s4 ___ret__3ss4_2;
         ((void)((*___dst__R3ss4_2).__i__i_2=___src__3ss4_2.__i__i_2));
-        ((void)___constructor__F_R3ss43ss4_autogen___2((&___ret__3ss4_2), ___src__3ss4_2));
-        return ((struct s4 )___ret__3ss4_2);
+        ((void)___constructor__F_R3ss43ss4_autogen___2((&___ret__3ss4_2), (*___dst__R3ss4_2)));
+        return ___ret__3ss4_2;
     }
     inline void ___constructor__F_R3ss4i_autogen___2(struct s4 *___dst__R3ss4_2, signed int __i__i_2){
@@ -169,7 +169,7 @@
     signed int __m3__A0A0i_2[((unsigned int )10)][((unsigned int )10)];
     ((void)(___retval_main__i_1=((signed int )0)) /* ?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
     ((void)(___retval_main__i_1=0) /* ?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi_iPPCc__1(argc, argv); }
@@ -186,4 +186,4 @@
     ((void)(___retval_main__i_1=(((void)(_tmp_cp_ret0=invoke_main(__argc__i_1, __argv__PPc_1, __envp__PPc_1))) , _tmp_cp_ret0)) /* ?{} */);
     ((void)(_tmp_cp_ret0) /* ^?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
 }
Index: src/tests/.expect/32/literals.txt
===================================================================
--- src/tests/.expect/32/literals.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/32/literals.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -5,6 +5,6 @@
 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
 extern signed int printf(const char *__restrict __format, ...);
-void __for_each__A2_0_0_0____operator_assign__PFt0_Rt0t0____constructor__PF_Rt0____constructor__PF_Rt0t0____destructor__PF_Rt0____operator_assign__PFt1_Rt1t1____constructor__PF_Rt1____constructor__PF_Rt1t1____destructor__PF_Rt1____operator_preincr__PFt0_Rt0____operator_predecr__PFt0_Rt0____operator_equal__PFi_t0t0____operator_notequal__PFi_t0t0____operator_deref__PFRt1_t0__F_t0t0PF_t1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object0)(), void *__anonymous_object1), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object2)(), void *__anonymous_object3), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object4)(), void *__anonymous_object5, void *__anonymous_object6), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object7)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object8), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object9)(), void *__anonymous_object10, void *__anonymous_object11), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object12)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object13, void *__anonymous_object14), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object15)(), void *__anonymous_object16, void *__anonymous_object17), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object18)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object19, void *__anonymous_object20), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object21, void *__anonymous_object22), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object23), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object24, void *__anonymous_object25), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object26), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object27, void *__anonymous_object28), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object29), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object30, void *__anonymous_object31), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object32), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object33), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object34), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object35, void *__anonymous_object36), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object37, void *__anonymous_object38), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object39), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object40));
-void __for_each_reverse__A2_0_0_0____operator_assign__PFt0_Rt0t0____constructor__PF_Rt0____constructor__PF_Rt0t0____destructor__PF_Rt0____operator_assign__PFt1_Rt1t1____constructor__PF_Rt1____constructor__PF_Rt1t1____destructor__PF_Rt1____operator_preincr__PFt0_Rt0____operator_predecr__PFt0_Rt0____operator_equal__PFi_t0t0____operator_notequal__PFi_t0t0____operator_deref__PFRt1_t0__F_t0t0PF_t1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object41)(), void *__anonymous_object42), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object43)(), void *__anonymous_object44), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object45)(), void *__anonymous_object46, void *__anonymous_object47), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object48)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object49), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object50)(), void *__anonymous_object51, void *__anonymous_object52), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object53)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object54, void *__anonymous_object55), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object56)(), void *__anonymous_object57, void *__anonymous_object58), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object59)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object60, void *__anonymous_object61), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object62, void *__anonymous_object63), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object64), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object65, void *__anonymous_object66), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object67), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object68, void *__anonymous_object69), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object70), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object71, void *__anonymous_object72), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object73), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object74), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object75), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object76, void *__anonymous_object77), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object78, void *__anonymous_object79), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object80), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object81));
+void __for_each__A0_2_0_0____operator_assign__PFd0_Rd0d0____constructor__PF_Rd0____constructor__PF_Rd0d0____destructor__PF_Rd0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_preincr__PFd0_Rd0____operator_predecr__PFd0_Rd0____operator_equal__PFi_d0d0____operator_notequal__PFi_d0d0____operator_deref__PFRd1_d0__F_d0d0PF_d1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object0)(), void *__anonymous_object1), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object2)(), void *__anonymous_object3), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object4)(), void *__anonymous_object5, void *__anonymous_object6), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object7)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object8), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object9)(), void *__anonymous_object10, void *__anonymous_object11), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object12)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object13, void *__anonymous_object14), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object15)(), void *__anonymous_object16, void *__anonymous_object17), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object18)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object19, void *__anonymous_object20), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object21, void *__anonymous_object22), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object23), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object24, void *__anonymous_object25), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object26), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object27, void *__anonymous_object28), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object29), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object30, void *__anonymous_object31), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object32), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object33), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object34), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object35, void *__anonymous_object36), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object37, void *__anonymous_object38), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object39), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object40));
+void __for_each_reverse__A0_2_0_0____operator_assign__PFd0_Rd0d0____constructor__PF_Rd0____constructor__PF_Rd0d0____destructor__PF_Rd0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_preincr__PFd0_Rd0____operator_predecr__PFd0_Rd0____operator_equal__PFi_d0d0____operator_notequal__PFi_d0d0____operator_deref__PFRd1_d0__F_d0d0PF_d1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object41)(), void *__anonymous_object42), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object43)(), void *__anonymous_object44), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object45)(), void *__anonymous_object46, void *__anonymous_object47), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object48)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object49), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object50)(), void *__anonymous_object51, void *__anonymous_object52), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object53)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object54, void *__anonymous_object55), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object56)(), void *__anonymous_object57, void *__anonymous_object58), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object59)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object60, void *__anonymous_object61), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object62, void *__anonymous_object63), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object64), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object65, void *__anonymous_object66), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object67), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object68, void *__anonymous_object69), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object70), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object71, void *__anonymous_object72), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object73), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object74), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object75), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object76, void *__anonymous_object77), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object78, void *__anonymous_object79), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object80), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object81));
 void *___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0c__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object82), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object83), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object84, _Bool __anonymous_object85), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object86), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object87, const char *__anonymous_object88), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object89), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object90, _Bool __anonymous_object91), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object92), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object93), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object94), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object95), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object96), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object97, const char *__anonymous_object98), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object99), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object100, const char *__anonymous_object101), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object102), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object103), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object104, const char *__anonymous_object105, unsigned long int __anonymous_object106), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object107, const char *__fmt__PCc_1, ...), void *__anonymous_object108, char __anonymous_object109);
 void *___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Sc__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object110), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object111), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object112, _Bool __anonymous_object113), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object114), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object115, const char *__anonymous_object116), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object117), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object118, _Bool __anonymous_object119), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object120), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object121), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object122), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object123), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object124), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object125, const char *__anonymous_object126), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object127), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object128, const char *__anonymous_object129), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object130), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object131), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object132, const char *__anonymous_object133, unsigned long int __anonymous_object134), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object135, const char *__fmt__PCc_1, ...), void *__anonymous_object136, signed char __anonymous_object137);
@@ -29,5 +29,5 @@
 void *___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCl__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object642), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object643), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object644, _Bool __anonymous_object645), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object646), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object647, const char *__anonymous_object648), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object649), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object650, _Bool __anonymous_object651), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object652), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object653), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object654), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object655), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object656), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object657, const char *__anonymous_object658), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object659), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object660, const char *__anonymous_object661), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object662), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object663), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object664, const char *__anonymous_object665, unsigned long int __anonymous_object666), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object667, const char *__fmt__PCc_1, ...), void *__anonymous_object668, const signed long int *__anonymous_object669);
 void *___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCv__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object670), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object671), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object672, _Bool __anonymous_object673), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object674), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object675, const char *__anonymous_object676), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object677), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object678, _Bool __anonymous_object679), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object680), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object681), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object682), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object683), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object684), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object685, const char *__anonymous_object686), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object687), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object688, const char *__anonymous_object689), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object690), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object691), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object692, const char *__anonymous_object693, unsigned long int __anonymous_object694), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object695, const char *__fmt__PCc_1, ...), void *__anonymous_object696, const void *__anonymous_object697);
-void *___operator_bitor__A1_1_0_1____operator_assign__PFt1_Rt1t1____constructor__PF_Rt1____constructor__PF_Rt1t1____destructor__PF_Rt1____operator_bitor__PFPd0_Pd0t1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_bitor__PFPd0_Pd0tVARGS2__FPd0_Pd0t1tVARGS2__1(__attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype7tParams_M_MP)(void (*__anonymous_object698)(), void *__anonymous_object699, void *__anonymous_object700), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype2tT_M_MP)(void (*__anonymous_object701)(), void *__anonymous_object702, void *__anonymous_object703), __attribute__ ((unused)) void (*_adapterF_P2tT2tT__MP)(void (*__anonymous_object704)(), void *__anonymous_object705, void *__anonymous_object706), __attribute__ ((unused)) void (*_adapterF2tT_P2tT2tT_P_MP)(void (*__anonymous_object707)(), __attribute__ ((unused)) void *___retval__operator_assign__2tT_1, void *__anonymous_object708, void *__anonymous_object709), __attribute__ ((unused)) unsigned long int _sizeof_2tT, __attribute__ ((unused)) unsigned long int _alignof_2tT, __attribute__ ((unused)) unsigned long int _sizeof_7tParams, __attribute__ ((unused)) unsigned long int _alignof_7tParams, __attribute__ ((unused)) void *(*___operator_assign__PF2tT_R2tT2tT__1)(void *__anonymous_object710, void *__anonymous_object711), __attribute__ ((unused)) void (*___constructor__PF_R2tT__1)(void *__anonymous_object712), __attribute__ ((unused)) void (*___constructor__PF_R2tT2tT__1)(void *__anonymous_object713, void *__anonymous_object714), __attribute__ ((unused)) void (*___destructor__PF_R2tT__1)(void *__anonymous_object715), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype2tT__1)(void *__anonymous_object716, void *__anonymous_object717), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object718), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object719), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object720, _Bool __anonymous_object721), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object722), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object723, const char *__anonymous_object724), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object725), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object726, _Bool __anonymous_object727), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object728), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object729), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object730), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object731), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object732), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object733, const char *__anonymous_object734), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object735), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object736, const char *__anonymous_object737), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object738), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object739), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object740, const char *__anonymous_object741, unsigned long int __anonymous_object742), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object743, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype7tParams__1)(void *__anonymous_object744, void *__anonymous_object745), void *__os__P7tostype_1, void *__arg__2tT_1, void *__rest__7tParams_1);
+void *___operator_bitor__A0_2_0_1____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_bitor__PFPd0_Pd0d1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_bitor__PFPd0_Pd0tVARGS2__FPd0_Pd0d1tVARGS2__1(__attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype7tParams_M_MP)(void (*__anonymous_object698)(), void *__anonymous_object699, void *__anonymous_object700), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype2tT_M_MP)(void (*__anonymous_object701)(), void *__anonymous_object702, void *__anonymous_object703), __attribute__ ((unused)) void (*_adapterF_P2tT2tT__MP)(void (*__anonymous_object704)(), void *__anonymous_object705, void *__anonymous_object706), __attribute__ ((unused)) void (*_adapterF2tT_P2tT2tT_P_MP)(void (*__anonymous_object707)(), __attribute__ ((unused)) void *___retval__operator_assign__2tT_1, void *__anonymous_object708, void *__anonymous_object709), __attribute__ ((unused)) unsigned long int _sizeof_2tT, __attribute__ ((unused)) unsigned long int _alignof_2tT, __attribute__ ((unused)) unsigned long int _sizeof_7tParams, __attribute__ ((unused)) unsigned long int _alignof_7tParams, __attribute__ ((unused)) void *(*___operator_assign__PF2tT_R2tT2tT__1)(void *__anonymous_object710, void *__anonymous_object711), __attribute__ ((unused)) void (*___constructor__PF_R2tT__1)(void *__anonymous_object712), __attribute__ ((unused)) void (*___constructor__PF_R2tT2tT__1)(void *__anonymous_object713, void *__anonymous_object714), __attribute__ ((unused)) void (*___destructor__PF_R2tT__1)(void *__anonymous_object715), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype2tT__1)(void *__anonymous_object716, void *__anonymous_object717), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object718), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object719), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object720, _Bool __anonymous_object721), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object722), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object723, const char *__anonymous_object724), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object725), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object726, _Bool __anonymous_object727), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object728), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object729), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object730), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object731), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object732), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object733, const char *__anonymous_object734), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object735), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object736, const char *__anonymous_object737), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object738), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object739), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object740, const char *__anonymous_object741, unsigned long int __anonymous_object742), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object743, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype7tParams__1)(void *__anonymous_object744, void *__anonymous_object745), void *__os__P7tostype_1, void *__arg__2tT_1, void *__rest__7tParams_1);
 void *___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object746), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object747), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object748, _Bool __anonymous_object749), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object750), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object751, const char *__anonymous_object752), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object753), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object754, _Bool __anonymous_object755), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object756), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object757), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object758), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object759), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object760), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object761, const char *__anonymous_object762), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object763), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object764, const char *__anonymous_object765), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object766), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object767), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object768, const char *__anonymous_object769, unsigned long int __anonymous_object770), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object771, const char *__fmt__PCc_1, ...), void *__anonymous_object772, void *(*__anonymous_object773)(void *__anonymous_object774));
 void *__endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object775), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object776), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object777, _Bool __anonymous_object778), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object779), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object780, const char *__anonymous_object781), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object782), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object783, _Bool __anonymous_object784), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object785), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object786), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object787), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object788), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object789), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object790, const char *__anonymous_object791), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object792), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object793, const char *__anonymous_object794), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object795), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object796), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object797, const char *__anonymous_object798, unsigned long int __anonymous_object799), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object800, const char *__fmt__PCc_1, ...), void *__anonymous_object801);
@@ -38,6 +38,6 @@
 void *__sepDisable__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object910), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object911), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object912, _Bool __anonymous_object913), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object914), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object915, const char *__anonymous_object916), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object917), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object918, _Bool __anonymous_object919), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object920), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object921), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object922), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object923), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object924), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object925, const char *__anonymous_object926), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object927), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object928, const char *__anonymous_object929), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object930), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object931), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object932, const char *__anonymous_object933, unsigned long int __anonymous_object934), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object935, const char *__fmt__PCc_1, ...), void *__anonymous_object936);
 void *__sepEnable__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object937), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object938), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object939, _Bool __anonymous_object940), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object941), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object942, const char *__anonymous_object943), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object944), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object945, _Bool __anonymous_object946), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object947), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object948), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object949), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object950), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object951), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object952, const char *__anonymous_object953), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object954), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object955, const char *__anonymous_object956), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object957), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object958), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object959, const char *__anonymous_object960, unsigned long int __anonymous_object961), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object962, const char *__fmt__PCc_1, ...), void *__anonymous_object963);
-void __write__A2_1_0_0____operator_assign__PFt1_Rt1t1____constructor__PF_Rt1____constructor__PF_Rt1t1____destructor__PF_Rt1____operator_bitor__PFPd0_Pd0t1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_assign__PFt2_Rt2t2____constructor__PF_Rt2____constructor__PF_Rt2t2____destructor__PF_Rt2____operator_preincr__PFt2_Rt2____operator_predecr__PFt2_Rt2____operator_equal__PFi_t2t2____operator_notequal__PFi_t2t2____operator_deref__PFRt1_t2__F_t2t2Pd0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object964)(), void *__anonymous_object965), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object966)(), void *__anonymous_object967, void *__anonymous_object968), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object969)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object970), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object971)(), void *__anonymous_object972, void *__anonymous_object973), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object974)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object975, void *__anonymous_object976), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object977)(), void *__anonymous_object978, void *__anonymous_object979), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object980)(), void *__anonymous_object981, void *__anonymous_object982), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object983)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object984, void *__anonymous_object985), __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object986, void *__anonymous_object987), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object988), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object989, void *__anonymous_object990), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object991), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype9telt_type__1)(void *__anonymous_object992, void *__anonymous_object993), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object994), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object995), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object996, _Bool __anonymous_object997), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object998), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object999, const char *__anonymous_object1000), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object1001), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object1002, _Bool __anonymous_object1003), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object1004), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object1005), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object1006), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object1007), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object1008), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object1009, const char *__anonymous_object1010), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object1011), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object1012, const char *__anonymous_object1013), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object1014), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object1015), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object1016, const char *__anonymous_object1017, unsigned long int __anonymous_object1018), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object1019, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object1020, void *__anonymous_object1021), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object1022), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object1023, void *__anonymous_object1024), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object1025), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1026), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1027), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1028, void *__anonymous_object1029), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1030, void *__anonymous_object1031), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object1032), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__P7tostype_1);
-void __write_reverse__A2_1_0_0____operator_assign__PFt1_Rt1t1____constructor__PF_Rt1____constructor__PF_Rt1t1____destructor__PF_Rt1____operator_bitor__PFPd0_Pd0t1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_assign__PFt2_Rt2t2____constructor__PF_Rt2____constructor__PF_Rt2t2____destructor__PF_Rt2____operator_preincr__PFt2_Rt2____operator_predecr__PFt2_Rt2____operator_equal__PFi_t2t2____operator_notequal__PFi_t2t2____operator_deref__PFRt1_t2__F_t2t2Pd0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object1033)(), void *__anonymous_object1034), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object1035)(), void *__anonymous_object1036, void *__anonymous_object1037), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object1038)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object1039), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object1040)(), void *__anonymous_object1041, void *__anonymous_object1042), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object1043)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object1044, void *__anonymous_object1045), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object1046)(), void *__anonymous_object1047, void *__anonymous_object1048), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object1049)(), void *__anonymous_object1050, void *__anonymous_object1051), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object1052)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object1053, void *__anonymous_object1054), __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object1055, void *__anonymous_object1056), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object1057), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object1058, void *__anonymous_object1059), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object1060), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype9telt_type__1)(void *__anonymous_object1061, void *__anonymous_object1062), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object1063), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object1064), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object1065, _Bool __anonymous_object1066), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object1067), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object1068, const char *__anonymous_object1069), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object1070), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object1071, _Bool __anonymous_object1072), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object1073), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object1074), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object1075), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object1076), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object1077), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object1078, const char *__anonymous_object1079), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object1080), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object1081, const char *__anonymous_object1082), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object1083), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object1084), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object1085, const char *__anonymous_object1086, unsigned long int __anonymous_object1087), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object1088, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object1089, void *__anonymous_object1090), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object1091), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object1092, void *__anonymous_object1093), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object1094), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1095), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1096), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1097, void *__anonymous_object1098), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1099, void *__anonymous_object1100), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object1101), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__P7tostype_1);
+void __write__A0_3_0_0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_bitor__PFPd0_Pd0d1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_assign__PFd2_Rd2d2____constructor__PF_Rd2____constructor__PF_Rd2d2____destructor__PF_Rd2____operator_preincr__PFd2_Rd2____operator_predecr__PFd2_Rd2____operator_equal__PFi_d2d2____operator_notequal__PFi_d2d2____operator_deref__PFRd1_d2__F_d2d2Pd0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object964)(), void *__anonymous_object965), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object966)(), void *__anonymous_object967, void *__anonymous_object968), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object969)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object970), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object971)(), void *__anonymous_object972, void *__anonymous_object973), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object974)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object975, void *__anonymous_object976), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object977)(), void *__anonymous_object978, void *__anonymous_object979), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object980)(), void *__anonymous_object981, void *__anonymous_object982), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object983)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object984, void *__anonymous_object985), __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object986, void *__anonymous_object987), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object988), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object989, void *__anonymous_object990), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object991), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype9telt_type__1)(void *__anonymous_object992, void *__anonymous_object993), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object994), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object995), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object996, _Bool __anonymous_object997), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object998), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object999, const char *__anonymous_object1000), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object1001), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object1002, _Bool __anonymous_object1003), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object1004), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object1005), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object1006), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object1007), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object1008), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object1009, const char *__anonymous_object1010), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object1011), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object1012, const char *__anonymous_object1013), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object1014), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object1015), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object1016, const char *__anonymous_object1017, unsigned long int __anonymous_object1018), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object1019, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object1020, void *__anonymous_object1021), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object1022), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object1023, void *__anonymous_object1024), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object1025), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1026), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1027), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1028, void *__anonymous_object1029), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1030, void *__anonymous_object1031), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object1032), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__P7tostype_1);
+void __write_reverse__A0_3_0_0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_bitor__PFPd0_Pd0d1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_assign__PFd2_Rd2d2____constructor__PF_Rd2____constructor__PF_Rd2d2____destructor__PF_Rd2____operator_preincr__PFd2_Rd2____operator_predecr__PFd2_Rd2____operator_equal__PFi_d2d2____operator_notequal__PFi_d2d2____operator_deref__PFRd1_d2__F_d2d2Pd0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object1033)(), void *__anonymous_object1034), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object1035)(), void *__anonymous_object1036, void *__anonymous_object1037), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object1038)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object1039), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object1040)(), void *__anonymous_object1041, void *__anonymous_object1042), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object1043)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object1044, void *__anonymous_object1045), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object1046)(), void *__anonymous_object1047, void *__anonymous_object1048), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object1049)(), void *__anonymous_object1050, void *__anonymous_object1051), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object1052)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object1053, void *__anonymous_object1054), __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object1055, void *__anonymous_object1056), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object1057), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object1058, void *__anonymous_object1059), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object1060), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype9telt_type__1)(void *__anonymous_object1061, void *__anonymous_object1062), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object1063), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object1064), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object1065, _Bool __anonymous_object1066), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object1067), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object1068, const char *__anonymous_object1069), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object1070), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object1071, _Bool __anonymous_object1072), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object1073), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object1074), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object1075), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object1076), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object1077), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object1078, const char *__anonymous_object1079), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object1080), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object1081, const char *__anonymous_object1082), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object1083), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object1084), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object1085, const char *__anonymous_object1086, unsigned long int __anonymous_object1087), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object1088, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object1089, void *__anonymous_object1090), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object1091), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object1092, void *__anonymous_object1093), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object1094), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1095), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1096), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1097, void *__anonymous_object1098), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1099, void *__anonymous_object1100), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object1101), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__P7tostype_1);
 void *___operator_bitor__A0_1_0_0___fail__PFi_Pd0___eof__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___read__PFPd0_Pd0PcUl___ungetc__PFPd0_Pd0c___fmt__PFi_Pd0PCc__FPd0_Pd0Rc__1(__attribute__ ((unused)) signed int (*__fail__PFi_P7tistype__1)(void *__anonymous_object1102), __attribute__ ((unused)) signed int (*__eof__PFi_P7tistype__1)(void *__anonymous_object1103), __attribute__ ((unused)) void (*__open__PF_P7tistypePCcPCc__1)(void *__is__P7tistype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tistype__1)(void *__is__P7tistype_1), __attribute__ ((unused)) void *(*__read__PFP7tistype_P7tistypePcUl__1)(void *__anonymous_object1104, char *__anonymous_object1105, unsigned long int __anonymous_object1106), __attribute__ ((unused)) void *(*__ungetc__PFP7tistype_P7tistypec__1)(void *__anonymous_object1107, char __anonymous_object1108), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tistypePCc__1)(void *__anonymous_object1109, const char *__fmt__PCc_1, ...), void *__anonymous_object1110, char *__anonymous_object1111);
 void *___operator_bitor__A0_1_0_0___fail__PFi_Pd0___eof__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___read__PFPd0_Pd0PcUl___ungetc__PFPd0_Pd0c___fmt__PFi_Pd0PCc__FPd0_Pd0RSc__1(__attribute__ ((unused)) signed int (*__fail__PFi_P7tistype__1)(void *__anonymous_object1112), __attribute__ ((unused)) signed int (*__eof__PFi_P7tistype__1)(void *__anonymous_object1113), __attribute__ ((unused)) void (*__open__PF_P7tistypePCcPCc__1)(void *__is__P7tistype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tistype__1)(void *__is__P7tistype_1), __attribute__ ((unused)) void *(*__read__PFP7tistype_P7tistypePcUl__1)(void *__anonymous_object1114, char *__anonymous_object1115, unsigned long int __anonymous_object1116), __attribute__ ((unused)) void *(*__ungetc__PFP7tistype_P7tistypec__1)(void *__anonymous_object1117, char __anonymous_object1118), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tistypePCc__1)(void *__anonymous_object1119, const char *__fmt__PCc_1, ...), void *__anonymous_object1120, signed char *__anonymous_object1121);
@@ -64,4 +64,5 @@
 static inline void ___destructor__F_R16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__R16s_Istream_cstrUC_1);
 static inline struct _Istream_cstrUC ___operator_assign__F16s_Istream_cstrUC_R16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__R16s_Istream_cstrUC_1, struct _Istream_cstrUC ___src__16s_Istream_cstrUC_1);
+static inline void ___constructor__F_R16s_Istream_cstrUCPc_autogen___1(struct _Istream_cstrUC *___dst__R16s_Istream_cstrUC_1, char *__s__Pc_1);
 static inline void ___constructor__F_R16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__R16s_Istream_cstrUC_1){
     ((void)((*___dst__R16s_Istream_cstrUC_1).__s__Pc_1) /* ?{} */);
@@ -76,6 +77,6 @@
     struct _Istream_cstrUC ___ret__16s_Istream_cstrUC_1;
     ((void)((*___dst__R16s_Istream_cstrUC_1).__s__Pc_1=___src__16s_Istream_cstrUC_1.__s__Pc_1));
-    ((void)___constructor__F_R16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1((&___ret__16s_Istream_cstrUC_1), ___src__16s_Istream_cstrUC_1));
-    return ((struct _Istream_cstrUC )___ret__16s_Istream_cstrUC_1);
+    ((void)___constructor__F_R16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1((&___ret__16s_Istream_cstrUC_1), (*___dst__R16s_Istream_cstrUC_1)));
+    return ___ret__16s_Istream_cstrUC_1;
 }
 static inline void ___constructor__F_R16s_Istream_cstrUCPc_autogen___1(struct _Istream_cstrUC *___dst__R16s_Istream_cstrUC_1, char *__s__Pc_1){
@@ -92,4 +93,6 @@
 static inline void ___destructor__F_R15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1);
 static inline struct _Istream_cstrC ___operator_assign__F15s_Istream_cstrC_R15s_Istream_cstrC15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1, struct _Istream_cstrC ___src__15s_Istream_cstrC_1);
+static inline void ___constructor__F_R15s_Istream_cstrCPc_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1, char *__s__Pc_1);
+static inline void ___constructor__F_R15s_Istream_cstrCPci_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1, char *__s__Pc_1, signed int __size__i_1);
 static inline void ___constructor__F_R15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1){
     ((void)((*___dst__R15s_Istream_cstrC_1).__s__Pc_1) /* ?{} */);
@@ -108,6 +111,6 @@
     ((void)((*___dst__R15s_Istream_cstrC_1).__s__Pc_1=___src__15s_Istream_cstrC_1.__s__Pc_1));
     ((void)((*___dst__R15s_Istream_cstrC_1).__size__i_1=___src__15s_Istream_cstrC_1.__size__i_1));
-    ((void)___constructor__F_R15s_Istream_cstrC15s_Istream_cstrC_autogen___1((&___ret__15s_Istream_cstrC_1), ___src__15s_Istream_cstrC_1));
-    return ((struct _Istream_cstrC )___ret__15s_Istream_cstrC_1);
+    ((void)___constructor__F_R15s_Istream_cstrC15s_Istream_cstrC_autogen___1((&___ret__15s_Istream_cstrC_1), (*___dst__R15s_Istream_cstrC_1)));
+    return ___ret__15s_Istream_cstrC_1;
 }
 static inline void ___constructor__F_R15s_Istream_cstrCPc_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1, char *__s__Pc_1){
@@ -122,5 +125,5 @@
 void *___operator_bitor__A0_1_0_0___fail__PFi_Pd0___eof__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___read__PFPd0_Pd0PcUl___ungetc__PFPd0_Pd0c___fmt__PFi_Pd0PCc__FPd0_Pd015s_Istream_cstrC__1(__attribute__ ((unused)) signed int (*__fail__PFi_P7tistype__1)(void *__anonymous_object1284), __attribute__ ((unused)) signed int (*__eof__PFi_P7tistype__1)(void *__anonymous_object1285), __attribute__ ((unused)) void (*__open__PF_P7tistypePCcPCc__1)(void *__is__P7tistype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tistype__1)(void *__is__P7tistype_1), __attribute__ ((unused)) void *(*__read__PFP7tistype_P7tistypePcUl__1)(void *__anonymous_object1286, char *__anonymous_object1287, unsigned long int __anonymous_object1288), __attribute__ ((unused)) void *(*__ungetc__PFP7tistype_P7tistypec__1)(void *__anonymous_object1289, char __anonymous_object1290), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tistypePCc__1)(void *__anonymous_object1291, const char *__fmt__PCc_1, ...), void *__anonymous_object1292, struct _Istream_cstrC __anonymous_object1293);
 enum __anonymous0 {
-    __sepSize__C13e__anonymous0_1 = ((signed int )16),
+    __sepSize__C13e__anonymous0_1 = 16,
 };
 struct ofstream {
@@ -137,4 +140,11 @@
 static inline void ___destructor__F_R9sofstream_autogen___1(struct ofstream *___dst__R9sofstream_1);
 static inline struct ofstream ___operator_assign__F9sofstream_R9sofstream9sofstream_autogen___1(struct ofstream *___dst__R9sofstream_1, struct ofstream ___src__9sofstream_1);
+static inline void ___constructor__F_R9sofstreamPv_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1);
+static inline void ___constructor__F_R9sofstreamPvb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1);
+static inline void ___constructor__F_R9sofstreamPvbb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1);
+static inline void ___constructor__F_R9sofstreamPvbbb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1);
+static inline void ___constructor__F_R9sofstreamPvbbbPCc_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1);
+static inline void ___constructor__F_R9sofstreamPvbbbPCcA0c_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1, char __separator__A0c_1[((unsigned int )__sepSize__C13e__anonymous0_1)]);
+static inline void ___constructor__F_R9sofstreamPvbbbPCcA0cA0c_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1, char __separator__A0c_1[((unsigned int )__sepSize__C13e__anonymous0_1)], char __tupleSeparator__A0c_1[((unsigned int )__sepSize__C13e__anonymous0_1)]);
 static inline void ___constructor__F_R9sofstream_autogen___1(struct ofstream *___dst__R9sofstream_1){
     ((void)((*___dst__R9sofstream_1).__file__Pv_1) /* ?{} */);
@@ -144,5 +154,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index0 = ((signed int )0);
+        signed int _index0 = 0;
         for (;(_index0<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index0))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[_index0])))) /* ?{} */);
@@ -150,6 +160,7 @@
 
     }
-    {
-        signed int _index1 = ((signed int )0);
+
+    {
+        signed int _index1 = 0;
         for (;(_index1<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index1))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[_index1])))) /* ?{} */);
@@ -157,4 +168,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstream9sofstream_autogen___1(struct ofstream *___dst__R9sofstream_1, struct ofstream ___src__9sofstream_1){
@@ -165,5 +177,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1=___src__9sofstream_1.__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index2 = ((signed int )0);
+        signed int _index2 = 0;
         for (;(_index2<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index2))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[_index2])))=___src__9sofstream_1.__separator__A0c_1[_index2]) /* ?{} */);
@@ -171,6 +183,7 @@
 
     }
-    {
-        signed int _index3 = ((signed int )0);
+
+    {
+        signed int _index3 = 0;
         for (;(_index3<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index3))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[_index3])))=___src__9sofstream_1.__tupleSeparator__A0c_1[_index3]) /* ?{} */);
@@ -178,8 +191,9 @@
 
     }
+
 }
 static inline void ___destructor__F_R9sofstream_autogen___1(struct ofstream *___dst__R9sofstream_1){
     {
-        signed int _index4 = ((signed int )(((signed int )__sepSize__C13e__anonymous0_1)-1));
+        signed int _index4 = (((signed int )__sepSize__C13e__anonymous0_1)-1);
         for (;(_index4>=0);((void)(--_index4))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[_index4])))) /* ^?{} */);
@@ -187,6 +201,7 @@
 
     }
-    {
-        signed int _index5 = ((signed int )(((signed int )__sepSize__C13e__anonymous0_1)-1));
+
+    {
+        signed int _index5 = (((signed int )__sepSize__C13e__anonymous0_1)-1);
         for (;(_index5>=0);((void)(--_index5))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[_index5])))) /* ^?{} */);
@@ -194,4 +209,5 @@
 
     }
+
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ^?{} */);
     ((void)((*___dst__R9sofstream_1).__sawNL__b_1) /* ^?{} */);
@@ -208,5 +224,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1=___src__9sofstream_1.__sepCur__PCc_1));
     {
-        signed int _index6 = ((signed int )0);
+        signed int _index6 = 0;
         for (;(_index6<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index6))) {
             ((void)((*___dst__R9sofstream_1).__separator__A0c_1[_index6]=___src__9sofstream_1.__separator__A0c_1[_index6]));
@@ -216,5 +232,5 @@
 
     {
-        signed int _index7 = ((signed int )0);
+        signed int _index7 = 0;
         for (;(_index7<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index7))) {
             ((void)((*___dst__R9sofstream_1).__tupleSeparator__A0c_1[_index7]=___src__9sofstream_1.__tupleSeparator__A0c_1[_index7]));
@@ -223,6 +239,6 @@
     }
 
-    ((void)___constructor__F_R9sofstream9sofstream_autogen___1((&___ret__9sofstream_1), ___src__9sofstream_1));
-    return ((struct ofstream )___ret__9sofstream_1);
+    ((void)___constructor__F_R9sofstream9sofstream_autogen___1((&___ret__9sofstream_1), (*___dst__R9sofstream_1)));
+    return ___ret__9sofstream_1;
 }
 static inline void ___constructor__F_R9sofstreamPv_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1){
@@ -233,5 +249,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index8 = ((signed int )0);
+        signed int _index8 = 0;
         for (;(_index8<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index8))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[_index8])))) /* ?{} */);
@@ -239,6 +255,7 @@
 
     }
-    {
-        signed int _index9 = ((signed int )0);
+
+    {
+        signed int _index9 = 0;
         for (;(_index9<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index9))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[_index9])))) /* ?{} */);
@@ -246,4 +263,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1){
@@ -254,5 +272,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index10 = ((signed int )0);
+        signed int _index10 = 0;
         for (;(_index10<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index10))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[_index10])))) /* ?{} */);
@@ -260,6 +278,7 @@
 
     }
-    {
-        signed int _index11 = ((signed int )0);
+
+    {
+        signed int _index11 = 0;
         for (;(_index11<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index11))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[_index11])))) /* ?{} */);
@@ -267,4 +286,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvbb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1){
@@ -275,5 +295,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index12 = ((signed int )0);
+        signed int _index12 = 0;
         for (;(_index12<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index12))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[_index12])))) /* ?{} */);
@@ -281,6 +301,7 @@
 
     }
-    {
-        signed int _index13 = ((signed int )0);
+
+    {
+        signed int _index13 = 0;
         for (;(_index13<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index13))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[_index13])))) /* ?{} */);
@@ -288,4 +309,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvbbb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1){
@@ -296,5 +318,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index14 = ((signed int )0);
+        signed int _index14 = 0;
         for (;(_index14<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index14))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[_index14])))) /* ?{} */);
@@ -302,6 +324,7 @@
 
     }
-    {
-        signed int _index15 = ((signed int )0);
+
+    {
+        signed int _index15 = 0;
         for (;(_index15<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index15))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[_index15])))) /* ?{} */);
@@ -309,4 +332,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvbbbPCc_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1){
@@ -317,5 +341,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index16 = ((signed int )0);
+        signed int _index16 = 0;
         for (;(_index16<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index16))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[_index16])))) /* ?{} */);
@@ -323,6 +347,7 @@
 
     }
-    {
-        signed int _index17 = ((signed int )0);
+
+    {
+        signed int _index17 = 0;
         for (;(_index17<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index17))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[_index17])))) /* ?{} */);
@@ -330,4 +355,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvbbbPCcA0c_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1, char __separator__A0c_1[((unsigned int )__sepSize__C13e__anonymous0_1)]){
@@ -338,5 +364,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index18 = ((signed int )0);
+        signed int _index18 = 0;
         for (;(_index18<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index18))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[_index18])))=__separator__A0c_1[_index18]) /* ?{} */);
@@ -344,6 +370,7 @@
 
     }
-    {
-        signed int _index19 = ((signed int )0);
+
+    {
+        signed int _index19 = 0;
         for (;(_index19<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index19))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[_index19])))) /* ?{} */);
@@ -351,4 +378,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvbbbPCcA0cA0c_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1, char __separator__A0c_1[((unsigned int )__sepSize__C13e__anonymous0_1)], char __tupleSeparator__A0c_1[((unsigned int )__sepSize__C13e__anonymous0_1)]){
@@ -359,5 +387,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index20 = ((signed int )0);
+        signed int _index20 = 0;
         for (;(_index20<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index20))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[_index20])))=__separator__A0c_1[_index20]) /* ?{} */);
@@ -365,6 +393,7 @@
 
     }
-    {
-        signed int _index21 = ((signed int )0);
+
+    {
+        signed int _index21 = 0;
         for (;(_index21<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index21))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[_index21])))=__tupleSeparator__A0c_1[_index21]) /* ?{} */);
@@ -372,4 +401,5 @@
 
     }
+
 }
 _Bool __sepPrt__Fb_P9sofstream__1(struct ofstream *__anonymous_object1294);
@@ -404,4 +434,5 @@
 static inline void ___destructor__F_R9sifstream_autogen___1(struct ifstream *___dst__R9sifstream_1);
 static inline struct ifstream ___operator_assign__F9sifstream_R9sifstream9sifstream_autogen___1(struct ifstream *___dst__R9sifstream_1, struct ifstream ___src__9sifstream_1);
+static inline void ___constructor__F_R9sifstreamPv_autogen___1(struct ifstream *___dst__R9sifstream_1, void *__file__Pv_1);
 static inline void ___constructor__F_R9sifstream_autogen___1(struct ifstream *___dst__R9sifstream_1){
     ((void)((*___dst__R9sifstream_1).__file__Pv_1) /* ?{} */);
@@ -416,6 +447,6 @@
     struct ifstream ___ret__9sifstream_1;
     ((void)((*___dst__R9sifstream_1).__file__Pv_1=___src__9sifstream_1.__file__Pv_1));
-    ((void)___constructor__F_R9sifstream9sifstream_autogen___1((&___ret__9sifstream_1), ___src__9sifstream_1));
-    return ((struct ifstream )___ret__9sifstream_1);
+    ((void)___constructor__F_R9sifstream9sifstream_autogen___1((&___ret__9sifstream_1), (*___dst__R9sifstream_1)));
+    return ___ret__9sifstream_1;
 }
 static inline void ___constructor__F_R9sifstreamPv_autogen___1(struct ifstream *___dst__R9sifstream_1, void *__file__Pv_1){
@@ -435,7 +466,7 @@
     struct ofstream *_tmp_cp_ret2;
     __attribute__ ((unused)) struct ofstream *_thunk0(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1322))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1323))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1324, _Bool __anonymous_object1325))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1326))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1327, const char *__anonymous_object1328))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1329))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1330, _Bool __anonymous_object1331))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1332))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1333))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1334))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1335))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1336))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1337, const char *__anonymous_object1338))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1339))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1340, const char *__anonymous_object1341))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1342))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1343))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1344, const char *__anonymous_object1345, unsigned long int __anonymous_object1346))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1347, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret2=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1348))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1349))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1350, _Bool __anonymous_object1351))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1352))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1353, const char *__anonymous_object1354))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1355))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1356, _Bool __anonymous_object1357))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1358))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1359))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1360))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1361))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1362))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1363, const char *__anonymous_object1364))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1365))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1366, const char *__anonymous_object1367))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1368))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1369))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1370, const char *__anonymous_object1371, unsigned long int __anonymous_object1372))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1373, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret1=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0c__1(((_Bool (*)(void *__anonymous_object1374))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1375))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1376, _Bool __anonymous_object1377))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1378))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1379, const char *__anonymous_object1380))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1381))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1382, _Bool __anonymous_object1383))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1384))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1385))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1386))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1387))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1388))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1389, const char *__anonymous_object1390))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1391))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1392, const char *__anonymous_object1393))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1394))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1395))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1396, const char *__anonymous_object1397, unsigned long int __anonymous_object1398))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1399, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret0=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1400))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1401))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1402, _Bool __anonymous_object1403))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1404))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1405, const char *__anonymous_object1406))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1407))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1408, _Bool __anonymous_object1409))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1410))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1411))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1412))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1413))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1414))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1415, const char *__anonymous_object1416))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1417))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1418, const char *__anonymous_object1419))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1420))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1421))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1422, const char *__anonymous_object1423, unsigned long int __anonymous_object1424))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1425, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "char "))) , _tmp_cp_ret0), __v__c_1))) , _tmp_cp_ret1), ((void *(*)(void *__anonymous_object1426))(&_thunk0))))) , _tmp_cp_ret2));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1322))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1323))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1324, _Bool __anonymous_object1325))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1326))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1327, const char *__anonymous_object1328))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1329))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1330, _Bool __anonymous_object1331))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1332))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1333))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1334))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1335))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1336))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1337, const char *__anonymous_object1338))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1339))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1340, const char *__anonymous_object1341))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1342))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1343))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1344, const char *__anonymous_object1345, unsigned long int __anonymous_object1346))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1347, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret2=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1348))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1349))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1350, _Bool __anonymous_object1351))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1352))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1353, const char *__anonymous_object1354))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1355))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1356, _Bool __anonymous_object1357))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1358))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1359))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1360))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1361))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1362))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1363, const char *__anonymous_object1364))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1365))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1366, const char *__anonymous_object1367))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1368))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1369))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1370, const char *__anonymous_object1371, unsigned long int __anonymous_object1372))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1373, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret1=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0c__1(((_Bool (*)(void *__anonymous_object1374))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1375))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1376, _Bool __anonymous_object1377))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1378))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1379, const char *__anonymous_object1380))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1381))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1382, _Bool __anonymous_object1383))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1384))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1385))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1386))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1387))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1388))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1389, const char *__anonymous_object1390))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1391))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1392, const char *__anonymous_object1393))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1394))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1395))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1396, const char *__anonymous_object1397, unsigned long int __anonymous_object1398))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1399, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret0=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1400))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1401))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1402, _Bool __anonymous_object1403))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1404))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1405, const char *__anonymous_object1406))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1407))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1408, _Bool __anonymous_object1409))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1410))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1411))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1412))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1413))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1414))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1415, const char *__anonymous_object1416))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1417))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1418, const char *__anonymous_object1419))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1420))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1421))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1422, const char *__anonymous_object1423, unsigned long int __anonymous_object1424))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1425, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "char "))) , _tmp_cp_ret0)), __v__c_1))) , _tmp_cp_ret1)), ((void *(*)(void *__anonymous_object1426))(&_thunk0))))) , _tmp_cp_ret2));
     ((void)(_tmp_cp_ret0) /* ^?{} */);
     ((void)(_tmp_cp_ret1) /* ^?{} */);
@@ -447,7 +478,7 @@
     struct ofstream *_tmp_cp_ret5;
     __attribute__ ((unused)) struct ofstream *_thunk1(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1427))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1428))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1429, _Bool __anonymous_object1430))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1431))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1432, const char *__anonymous_object1433))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1434))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1435, _Bool __anonymous_object1436))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1437))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1438))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1439))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1440))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1441))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1442, const char *__anonymous_object1443))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1444))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1445, const char *__anonymous_object1446))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1447))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1448))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1449, const char *__anonymous_object1450, unsigned long int __anonymous_object1451))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1452, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret5=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1453))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1454))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1455, _Bool __anonymous_object1456))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1457))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1458, const char *__anonymous_object1459))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1460))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1461, _Bool __anonymous_object1462))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1463))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1464))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1465))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1466))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1467))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1468, const char *__anonymous_object1469))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1470))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1471, const char *__anonymous_object1472))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1473))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1474))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1475, const char *__anonymous_object1476, unsigned long int __anonymous_object1477))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1478, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret4=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Sc__1(((_Bool (*)(void *__anonymous_object1479))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1480))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1481, _Bool __anonymous_object1482))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1483))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1484, const char *__anonymous_object1485))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1486))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1487, _Bool __anonymous_object1488))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1489))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1490))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1491))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1492))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1493))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1494, const char *__anonymous_object1495))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1496))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1497, const char *__anonymous_object1498))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1499))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1500))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1501, const char *__anonymous_object1502, unsigned long int __anonymous_object1503))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1504, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret3=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1505))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1506))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1507, _Bool __anonymous_object1508))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1509))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1510, const char *__anonymous_object1511))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1512))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1513, _Bool __anonymous_object1514))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1515))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1516))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1517))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1518))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1519))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1520, const char *__anonymous_object1521))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1522))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1523, const char *__anonymous_object1524))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1525))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1526))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1527, const char *__anonymous_object1528, unsigned long int __anonymous_object1529))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1530, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "signed char "))) , _tmp_cp_ret3), __v__Sc_1))) , _tmp_cp_ret4), ((void *(*)(void *__anonymous_object1531))(&_thunk1))))) , _tmp_cp_ret5));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1427))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1428))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1429, _Bool __anonymous_object1430))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1431))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1432, const char *__anonymous_object1433))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1434))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1435, _Bool __anonymous_object1436))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1437))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1438))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1439))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1440))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1441))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1442, const char *__anonymous_object1443))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1444))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1445, const char *__anonymous_object1446))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1447))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1448))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1449, const char *__anonymous_object1450, unsigned long int __anonymous_object1451))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1452, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret5=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1453))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1454))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1455, _Bool __anonymous_object1456))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1457))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1458, const char *__anonymous_object1459))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1460))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1461, _Bool __anonymous_object1462))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1463))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1464))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1465))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1466))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1467))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1468, const char *__anonymous_object1469))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1470))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1471, const char *__anonymous_object1472))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1473))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1474))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1475, const char *__anonymous_object1476, unsigned long int __anonymous_object1477))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1478, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret4=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Sc__1(((_Bool (*)(void *__anonymous_object1479))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1480))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1481, _Bool __anonymous_object1482))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1483))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1484, const char *__anonymous_object1485))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1486))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1487, _Bool __anonymous_object1488))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1489))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1490))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1491))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1492))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1493))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1494, const char *__anonymous_object1495))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1496))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1497, const char *__anonymous_object1498))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1499))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1500))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1501, const char *__anonymous_object1502, unsigned long int __anonymous_object1503))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1504, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret3=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1505))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1506))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1507, _Bool __anonymous_object1508))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1509))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1510, const char *__anonymous_object1511))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1512))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1513, _Bool __anonymous_object1514))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1515))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1516))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1517))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1518))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1519))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1520, const char *__anonymous_object1521))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1522))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1523, const char *__anonymous_object1524))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1525))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1526))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1527, const char *__anonymous_object1528, unsigned long int __anonymous_object1529))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1530, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "signed char "))) , _tmp_cp_ret3)), __v__Sc_1))) , _tmp_cp_ret4)), ((void *(*)(void *__anonymous_object1531))(&_thunk1))))) , _tmp_cp_ret5));
     ((void)(_tmp_cp_ret3) /* ^?{} */);
     ((void)(_tmp_cp_ret4) /* ^?{} */);
@@ -459,7 +490,7 @@
     struct ofstream *_tmp_cp_ret8;
     __attribute__ ((unused)) struct ofstream *_thunk2(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1532))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1533))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1534, _Bool __anonymous_object1535))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1536))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1537, const char *__anonymous_object1538))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1539))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1540, _Bool __anonymous_object1541))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1542))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1543))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1544))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1545))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1546))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1547, const char *__anonymous_object1548))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1549))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1550, const char *__anonymous_object1551))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1552))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1553))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1554, const char *__anonymous_object1555, unsigned long int __anonymous_object1556))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1557, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret8=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1558))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1559))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1560, _Bool __anonymous_object1561))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1562))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1563, const char *__anonymous_object1564))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1565))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1566, _Bool __anonymous_object1567))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1568))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1569))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1570))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1571))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1572))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1573, const char *__anonymous_object1574))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1575))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1576, const char *__anonymous_object1577))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1578))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1579))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1580, const char *__anonymous_object1581, unsigned long int __anonymous_object1582))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1583, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret7=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Uc__1(((_Bool (*)(void *__anonymous_object1584))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1585))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1586, _Bool __anonymous_object1587))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1588))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1589, const char *__anonymous_object1590))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1591))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1592, _Bool __anonymous_object1593))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1594))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1595))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1596))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1597))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1598))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1599, const char *__anonymous_object1600))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1601))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1602, const char *__anonymous_object1603))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1604))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1605))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1606, const char *__anonymous_object1607, unsigned long int __anonymous_object1608))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1609, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret6=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1610))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1611))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1612, _Bool __anonymous_object1613))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1614))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1615, const char *__anonymous_object1616))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1617))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1618, _Bool __anonymous_object1619))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1620))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1621))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1622))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1623))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1624))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1625, const char *__anonymous_object1626))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1627))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1628, const char *__anonymous_object1629))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1630))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1631))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1632, const char *__anonymous_object1633, unsigned long int __anonymous_object1634))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1635, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "unsigned char "))) , _tmp_cp_ret6), __v__Uc_1))) , _tmp_cp_ret7), ((void *(*)(void *__anonymous_object1636))(&_thunk2))))) , _tmp_cp_ret8));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1532))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1533))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1534, _Bool __anonymous_object1535))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1536))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1537, const char *__anonymous_object1538))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1539))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1540, _Bool __anonymous_object1541))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1542))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1543))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1544))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1545))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1546))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1547, const char *__anonymous_object1548))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1549))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1550, const char *__anonymous_object1551))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1552))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1553))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1554, const char *__anonymous_object1555, unsigned long int __anonymous_object1556))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1557, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret8=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1558))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1559))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1560, _Bool __anonymous_object1561))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1562))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1563, const char *__anonymous_object1564))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1565))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1566, _Bool __anonymous_object1567))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1568))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1569))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1570))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1571))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1572))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1573, const char *__anonymous_object1574))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1575))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1576, const char *__anonymous_object1577))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1578))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1579))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1580, const char *__anonymous_object1581, unsigned long int __anonymous_object1582))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1583, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret7=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Uc__1(((_Bool (*)(void *__anonymous_object1584))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1585))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1586, _Bool __anonymous_object1587))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1588))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1589, const char *__anonymous_object1590))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1591))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1592, _Bool __anonymous_object1593))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1594))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1595))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1596))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1597))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1598))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1599, const char *__anonymous_object1600))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1601))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1602, const char *__anonymous_object1603))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1604))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1605))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1606, const char *__anonymous_object1607, unsigned long int __anonymous_object1608))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1609, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret6=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1610))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1611))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1612, _Bool __anonymous_object1613))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1614))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1615, const char *__anonymous_object1616))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1617))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1618, _Bool __anonymous_object1619))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1620))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1621))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1622))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1623))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1624))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1625, const char *__anonymous_object1626))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1627))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1628, const char *__anonymous_object1629))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1630))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1631))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1632, const char *__anonymous_object1633, unsigned long int __anonymous_object1634))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1635, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "unsigned char "))) , _tmp_cp_ret6)), __v__Uc_1))) , _tmp_cp_ret7)), ((void *(*)(void *__anonymous_object1636))(&_thunk2))))) , _tmp_cp_ret8));
     ((void)(_tmp_cp_ret6) /* ^?{} */);
     ((void)(_tmp_cp_ret7) /* ^?{} */);
@@ -471,7 +502,7 @@
     struct ofstream *_tmp_cp_ret11;
     __attribute__ ((unused)) struct ofstream *_thunk3(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1637))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1638))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1639, _Bool __anonymous_object1640))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1641))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1642, const char *__anonymous_object1643))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1644))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1645, _Bool __anonymous_object1646))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1647))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1648))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1649))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1650))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1651))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1652, const char *__anonymous_object1653))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1654))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1655, const char *__anonymous_object1656))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1657))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1658))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1659, const char *__anonymous_object1660, unsigned long int __anonymous_object1661))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1662, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret11=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1663))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1664))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1665, _Bool __anonymous_object1666))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1667))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1668, const char *__anonymous_object1669))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1670))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1671, _Bool __anonymous_object1672))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1673))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1674))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1675))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1676))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1677))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1678, const char *__anonymous_object1679))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1680))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1681, const char *__anonymous_object1682))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1683))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1684))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1685, const char *__anonymous_object1686, unsigned long int __anonymous_object1687))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1688, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret10=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0s__1(((_Bool (*)(void *__anonymous_object1689))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1690))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1691, _Bool __anonymous_object1692))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1693))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1694, const char *__anonymous_object1695))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1696))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1697, _Bool __anonymous_object1698))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1699))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1700))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1701))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1702))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1703))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1704, const char *__anonymous_object1705))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1706))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1707, const char *__anonymous_object1708))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1709))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1710))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1711, const char *__anonymous_object1712, unsigned long int __anonymous_object1713))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1714, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret9=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1715))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1716))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1717, _Bool __anonymous_object1718))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1719))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1720, const char *__anonymous_object1721))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1722))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1723, _Bool __anonymous_object1724))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1725))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1726))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1727))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1728))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1729))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1730, const char *__anonymous_object1731))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1732))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1733, const char *__anonymous_object1734))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1735))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1736))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1737, const char *__anonymous_object1738, unsigned long int __anonymous_object1739))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1740, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "signed short int"))) , _tmp_cp_ret9), __v__s_1))) , _tmp_cp_ret10), ((void *(*)(void *__anonymous_object1741))(&_thunk3))))) , _tmp_cp_ret11));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1637))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1638))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1639, _Bool __anonymous_object1640))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1641))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1642, const char *__anonymous_object1643))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1644))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1645, _Bool __anonymous_object1646))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1647))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1648))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1649))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1650))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1651))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1652, const char *__anonymous_object1653))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1654))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1655, const char *__anonymous_object1656))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1657))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1658))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1659, const char *__anonymous_object1660, unsigned long int __anonymous_object1661))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1662, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret11=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1663))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1664))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1665, _Bool __anonymous_object1666))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1667))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1668, const char *__anonymous_object1669))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1670))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1671, _Bool __anonymous_object1672))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1673))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1674))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1675))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1676))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1677))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1678, const char *__anonymous_object1679))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1680))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1681, const char *__anonymous_object1682))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1683))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1684))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1685, const char *__anonymous_object1686, unsigned long int __anonymous_object1687))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1688, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret10=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0s__1(((_Bool (*)(void *__anonymous_object1689))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1690))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1691, _Bool __anonymous_object1692))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1693))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1694, const char *__anonymous_object1695))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1696))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1697, _Bool __anonymous_object1698))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1699))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1700))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1701))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1702))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1703))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1704, const char *__anonymous_object1705))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1706))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1707, const char *__anonymous_object1708))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1709))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1710))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1711, const char *__anonymous_object1712, unsigned long int __anonymous_object1713))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1714, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret9=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1715))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1716))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1717, _Bool __anonymous_object1718))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1719))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1720, const char *__anonymous_object1721))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1722))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1723, _Bool __anonymous_object1724))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1725))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1726))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1727))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1728))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1729))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1730, const char *__anonymous_object1731))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1732))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1733, const char *__anonymous_object1734))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1735))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1736))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1737, const char *__anonymous_object1738, unsigned long int __anonymous_object1739))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1740, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "signed short int"))) , _tmp_cp_ret9)), __v__s_1))) , _tmp_cp_ret10)), ((void *(*)(void *__anonymous_object1741))(&_thunk3))))) , _tmp_cp_ret11));
     ((void)(_tmp_cp_ret9) /* ^?{} */);
     ((void)(_tmp_cp_ret10) /* ^?{} */);
@@ -483,7 +514,7 @@
     struct ofstream *_tmp_cp_ret14;
     __attribute__ ((unused)) struct ofstream *_thunk4(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1742))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1743))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1744, _Bool __anonymous_object1745))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1746))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1747, const char *__anonymous_object1748))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1749))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1750, _Bool __anonymous_object1751))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1752))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1753))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1754))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1755))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1756))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1757, const char *__anonymous_object1758))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1759))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1760, const char *__anonymous_object1761))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1762))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1763))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1764, const char *__anonymous_object1765, unsigned long int __anonymous_object1766))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1767, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret14=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1768))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1769))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1770, _Bool __anonymous_object1771))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1772))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1773, const char *__anonymous_object1774))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1775))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1776, _Bool __anonymous_object1777))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1778))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1779))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1780))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1781))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1782))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1783, const char *__anonymous_object1784))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1785))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1786, const char *__anonymous_object1787))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1788))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1789))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1790, const char *__anonymous_object1791, unsigned long int __anonymous_object1792))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1793, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret13=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Us__1(((_Bool (*)(void *__anonymous_object1794))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1795))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1796, _Bool __anonymous_object1797))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1798))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1799, const char *__anonymous_object1800))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1801))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1802, _Bool __anonymous_object1803))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1804))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1805))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1806))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1807))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1808))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1809, const char *__anonymous_object1810))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1811))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1812, const char *__anonymous_object1813))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1814))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1815))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1816, const char *__anonymous_object1817, unsigned long int __anonymous_object1818))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1819, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret12=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1820))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1821))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1822, _Bool __anonymous_object1823))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1824))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1825, const char *__anonymous_object1826))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1827))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1828, _Bool __anonymous_object1829))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1830))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1831))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1832))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1833))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1834))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1835, const char *__anonymous_object1836))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1837))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1838, const char *__anonymous_object1839))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1840))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1841))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1842, const char *__anonymous_object1843, unsigned long int __anonymous_object1844))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1845, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "unsigned short int"))) , _tmp_cp_ret12), __v__Us_1))) , _tmp_cp_ret13), ((void *(*)(void *__anonymous_object1846))(&_thunk4))))) , _tmp_cp_ret14));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1742))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1743))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1744, _Bool __anonymous_object1745))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1746))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1747, const char *__anonymous_object1748))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1749))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1750, _Bool __anonymous_object1751))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1752))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1753))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1754))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1755))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1756))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1757, const char *__anonymous_object1758))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1759))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1760, const char *__anonymous_object1761))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1762))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1763))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1764, const char *__anonymous_object1765, unsigned long int __anonymous_object1766))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1767, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret14=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1768))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1769))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1770, _Bool __anonymous_object1771))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1772))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1773, const char *__anonymous_object1774))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1775))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1776, _Bool __anonymous_object1777))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1778))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1779))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1780))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1781))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1782))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1783, const char *__anonymous_object1784))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1785))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1786, const char *__anonymous_object1787))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1788))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1789))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1790, const char *__anonymous_object1791, unsigned long int __anonymous_object1792))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1793, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret13=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Us__1(((_Bool (*)(void *__anonymous_object1794))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1795))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1796, _Bool __anonymous_object1797))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1798))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1799, const char *__anonymous_object1800))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1801))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1802, _Bool __anonymous_object1803))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1804))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1805))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1806))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1807))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1808))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1809, const char *__anonymous_object1810))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1811))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1812, const char *__anonymous_object1813))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1814))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1815))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1816, const char *__anonymous_object1817, unsigned long int __anonymous_object1818))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1819, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret12=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1820))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1821))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1822, _Bool __anonymous_object1823))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1824))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1825, const char *__anonymous_object1826))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1827))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1828, _Bool __anonymous_object1829))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1830))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1831))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1832))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1833))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1834))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1835, const char *__anonymous_object1836))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1837))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1838, const char *__anonymous_object1839))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1840))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1841))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1842, const char *__anonymous_object1843, unsigned long int __anonymous_object1844))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1845, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "unsigned short int"))) , _tmp_cp_ret12)), __v__Us_1))) , _tmp_cp_ret13)), ((void *(*)(void *__anonymous_object1846))(&_thunk4))))) , _tmp_cp_ret14));
     ((void)(_tmp_cp_ret12) /* ^?{} */);
     ((void)(_tmp_cp_ret13) /* ^?{} */);
@@ -495,7 +526,7 @@
     struct ofstream *_tmp_cp_ret17;
     __attribute__ ((unused)) struct ofstream *_thunk5(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1847))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1848))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1849, _Bool __anonymous_object1850))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1851))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1852, const char *__anonymous_object1853))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1854))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1855, _Bool __anonymous_object1856))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1857))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1858))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1859))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1860))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1861))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1862, const char *__anonymous_object1863))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1864))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1865, const char *__anonymous_object1866))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1867))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1868))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1869, const char *__anonymous_object1870, unsigned long int __anonymous_object1871))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1872, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret17=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1873))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1874))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1875, _Bool __anonymous_object1876))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1877))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1878, const char *__anonymous_object1879))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1880))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1881, _Bool __anonymous_object1882))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1883))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1884))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1885))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1886))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1887))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1888, const char *__anonymous_object1889))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1890))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1891, const char *__anonymous_object1892))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1893))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1894))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1895, const char *__anonymous_object1896, unsigned long int __anonymous_object1897))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1898, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret16=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Ui__1(((_Bool (*)(void *__anonymous_object1899))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1900))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1901, _Bool __anonymous_object1902))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1903))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1904, const char *__anonymous_object1905))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1906))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1907, _Bool __anonymous_object1908))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1909))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1910))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1911))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1912))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1913))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1914, const char *__anonymous_object1915))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1916))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1917, const char *__anonymous_object1918))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1919))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1920))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1921, const char *__anonymous_object1922, unsigned long int __anonymous_object1923))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1924, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret15=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1925))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1926))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1927, _Bool __anonymous_object1928))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1929))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1930, const char *__anonymous_object1931))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1932))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1933, _Bool __anonymous_object1934))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1935))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1936))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1937))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1938))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1939))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1940, const char *__anonymous_object1941))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1942))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1943, const char *__anonymous_object1944))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1945))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1946))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1947, const char *__anonymous_object1948, unsigned long int __anonymous_object1949))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1950, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "size_t"))) , _tmp_cp_ret15), __v__Ui_1))) , _tmp_cp_ret16), ((void *(*)(void *__anonymous_object1951))(&_thunk5))))) , _tmp_cp_ret17));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1847))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1848))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1849, _Bool __anonymous_object1850))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1851))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1852, const char *__anonymous_object1853))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1854))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1855, _Bool __anonymous_object1856))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1857))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1858))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1859))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1860))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1861))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1862, const char *__anonymous_object1863))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1864))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1865, const char *__anonymous_object1866))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1867))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1868))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1869, const char *__anonymous_object1870, unsigned long int __anonymous_object1871))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1872, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret17=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1873))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1874))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1875, _Bool __anonymous_object1876))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1877))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1878, const char *__anonymous_object1879))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1880))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1881, _Bool __anonymous_object1882))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1883))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1884))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1885))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1886))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1887))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1888, const char *__anonymous_object1889))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1890))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1891, const char *__anonymous_object1892))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1893))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1894))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1895, const char *__anonymous_object1896, unsigned long int __anonymous_object1897))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1898, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret16=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Ui__1(((_Bool (*)(void *__anonymous_object1899))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1900))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1901, _Bool __anonymous_object1902))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1903))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1904, const char *__anonymous_object1905))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1906))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1907, _Bool __anonymous_object1908))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1909))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1910))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1911))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1912))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1913))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1914, const char *__anonymous_object1915))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1916))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1917, const char *__anonymous_object1918))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1919))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1920))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1921, const char *__anonymous_object1922, unsigned long int __anonymous_object1923))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1924, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret15=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1925))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1926))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1927, _Bool __anonymous_object1928))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1929))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1930, const char *__anonymous_object1931))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1932))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1933, _Bool __anonymous_object1934))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1935))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1936))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1937))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1938))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1939))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1940, const char *__anonymous_object1941))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1942))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1943, const char *__anonymous_object1944))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1945))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1946))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1947, const char *__anonymous_object1948, unsigned long int __anonymous_object1949))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1950, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "size_t"))) , _tmp_cp_ret15)), __v__Ui_1))) , _tmp_cp_ret16)), ((void *(*)(void *__anonymous_object1951))(&_thunk5))))) , _tmp_cp_ret17));
     ((void)(_tmp_cp_ret15) /* ^?{} */);
     ((void)(_tmp_cp_ret16) /* ^?{} */);
@@ -708,10 +739,10 @@
     ((void)0123456789.e-09L);
     ((void)0123456789.e-09DL);
-    ((void)(-0123456789.e-09));
-    ((void)(-0123456789.e-09f));
-    ((void)(-0123456789.e-09l));
-    ((void)(-0123456789.e-09F));
-    ((void)(-0123456789.e-09L));
-    ((void)(-0123456789.e-09DL));
+    ((void)(+0123456789.e-09));
+    ((void)(+0123456789.e-09f));
+    ((void)(+0123456789.e-09l));
+    ((void)(+0123456789.e-09F));
+    ((void)(+0123456789.e-09L));
+    ((void)(+0123456789.e-09DL));
     ((void)(-0123456789.e-09));
     ((void)(-0123456789.e-09f));
@@ -852,10 +883,10 @@
     ((void)0123456789.0123456789E-09L);
     ((void)0123456789.0123456789E-09DL);
-    ((void)(-0123456789.0123456789E-09));
-    ((void)(-0123456789.0123456789E-09f));
-    ((void)(-0123456789.0123456789E-09l));
-    ((void)(-0123456789.0123456789E-09F));
-    ((void)(-0123456789.0123456789E-09L));
-    ((void)(-0123456789.0123456789E-09DL));
+    ((void)(+0123456789.0123456789E-09));
+    ((void)(+0123456789.0123456789E-09f));
+    ((void)(+0123456789.0123456789E-09l));
+    ((void)(+0123456789.0123456789E-09F));
+    ((void)(+0123456789.0123456789E-09L));
+    ((void)(+0123456789.0123456789E-09DL));
     ((void)(-0123456789.0123456789E-09));
     ((void)(-0123456789.0123456789E-09f));
@@ -899,9 +930,9 @@
     ((void)0x0123456789.p-09F);
     ((void)0x0123456789.p-09L);
-    ((void)(-0x0123456789.p-09));
-    ((void)(-0x0123456789.p-09f));
-    ((void)(-0x0123456789.p-09l));
-    ((void)(-0x0123456789.p-09F));
-    ((void)(-0x0123456789.p-09L));
+    ((void)(+0x0123456789.p-09));
+    ((void)(+0x0123456789.p-09f));
+    ((void)(+0x0123456789.p-09l));
+    ((void)(+0x0123456789.p-09F));
+    ((void)(+0x0123456789.p-09L));
     ((void)(-0x0123456789.p-09));
     ((void)(-0x0123456789.p-09f));
@@ -944,9 +975,9 @@
     ((void)0x.0123456789P-09F);
     ((void)0x.0123456789P-09L);
-    ((void)(-0x.0123456789P-09));
-    ((void)(-0x.0123456789P-09f));
-    ((void)(-0x.0123456789P-09l));
-    ((void)(-0x.0123456789P-09F));
-    ((void)(-0x.0123456789P-09L));
+    ((void)(+0x.0123456789P-09));
+    ((void)(+0x.0123456789P-09f));
+    ((void)(+0x.0123456789P-09l));
+    ((void)(+0x.0123456789P-09F));
+    ((void)(+0x.0123456789P-09L));
     ((void)(-0x.0123456789P-09));
     ((void)(-0x.0123456789P-09f));
@@ -989,4 +1020,9 @@
     ((void)0X0123456789.0123456789P-09F);
     ((void)0X0123456789.0123456789P-09L);
+    ((void)(+0X0123456789.0123456789P-09));
+    ((void)(+0X0123456789.0123456789P-09f));
+    ((void)(+0X0123456789.0123456789P-09l));
+    ((void)(+0X0123456789.0123456789P-09F));
+    ((void)(+0X0123456789.0123456789P-09L));
     ((void)(-0X0123456789.0123456789P-09));
     ((void)(-0X0123456789.0123456789P-09f));
@@ -994,9 +1030,236 @@
     ((void)(-0X0123456789.0123456789P-09F));
     ((void)(-0X0123456789.0123456789P-09L));
-    ((void)(-0X0123456789.0123456789P-09));
-    ((void)(-0X0123456789.0123456789P-09f));
-    ((void)(-0X0123456789.0123456789P-09l));
-    ((void)(-0X0123456789.0123456789P-09F));
-    ((void)(-0X0123456789.0123456789P-09L));
+    ((void)((signed char )01234567));
+    ((void)((signed short int )01234567));
+    ((void)((signed int )01234567));
+    ((void)((signed long long int )01234567));
+    ((void)((__int128 )01234567));
+    ((void)((unsigned char )01234567u));
+    ((void)((signed short int )01234567u));
+    ((void)((unsigned int )01234567u));
+    ((void)((signed long long int )01234567u));
+    ((void)((__int128 )01234567u));
+    ((void)(+((signed int )((signed char )01234567))));
+    ((void)(+((signed int )((signed short int )01234567))));
+    ((void)(+((signed int )01234567)));
+    ((void)(+((signed long long int )01234567)));
+    ((void)(+((float )((__int128 )01234567))));
+    ((void)(+((signed int )((unsigned char )01234567u))));
+    ((void)(+((signed int )((signed short int )01234567u))));
+    ((void)(+((unsigned int )01234567u)));
+    ((void)(+((signed long long int )01234567u)));
+    ((void)(+((float )((__int128 )01234567u))));
+    ((void)(-((signed int )((signed char )01234567))));
+    ((void)(-((signed int )((signed short int )01234567))));
+    ((void)(-((signed int )01234567)));
+    ((void)(-((signed long long int )01234567)));
+    ((void)(-((float )((__int128 )01234567))));
+    ((void)(-((signed int )((unsigned char )01234567u))));
+    ((void)(-((signed int )((signed short int )01234567u))));
+    ((void)(-((unsigned int )01234567u)));
+    ((void)(-((signed long long int )01234567u)));
+    ((void)(-((float )((__int128 )01234567u))));
+    ((void)((signed char )1234567890));
+    ((void)((signed short int )1234567890));
+    ((void)((signed int )1234567890));
+    ((void)((signed long long int )1234567890));
+    ((void)((__int128 )1234567890));
+    ((void)((signed char )1234567890U));
+    ((void)((unsigned short int )1234567890U));
+    ((void)((signed int )1234567890U));
+    ((void)((unsigned long long int )1234567890u));
+    ((void)((unsigned __int128 )1234567890u));
+    ((void)(+((signed int )((signed char )1234567890))));
+    ((void)(+((signed int )((signed short int )1234567890))));
+    ((void)(+((signed int )1234567890)));
+    ((void)(+((signed long long int )1234567890)));
+    ((void)(+((float )((__int128 )1234567890))));
+    ((void)(+((signed int )((signed char )1234567890U))));
+    ((void)(+((signed int )((unsigned short int )1234567890U))));
+    ((void)(+((signed int )1234567890U)));
+    ((void)(+((unsigned long long int )1234567890u)));
+    ((void)(+((float )((unsigned __int128 )1234567890u))));
+    ((void)(-((signed int )((signed char )1234567890))));
+    ((void)(-((signed int )((signed short int )1234567890))));
+    ((void)(-((signed int )1234567890)));
+    ((void)(-((signed long long int )1234567890)));
+    ((void)(-((float )((__int128 )1234567890))));
+    ((void)(-((signed int )((signed char )1234567890U))));
+    ((void)(-((signed int )((unsigned short int )1234567890U))));
+    ((void)(-((signed int )1234567890U)));
+    ((void)(-((unsigned long long int )1234567890u)));
+    ((void)(-((float )((unsigned __int128 )1234567890u))));
+    ((void)((signed char )0x0123456789abcdef));
+    ((void)((signed short int )0x0123456789abcdef));
+    ((void)((signed int )0x0123456789abcdef));
+    ((void)((signed long long int )0x0123456789abcdef));
+    ((void)((signed char )0x0123456789abcdefu));
+    ((void)((unsigned short int )0x0123456789abcdefu));
+    ((void)((signed int )0x0123456789abcdefu));
+    ((void)((unsigned long long int )0x0123456789abcdefu));
+    ((void)(+((signed int )((signed char )0x0123456789abcdef))));
+    ((void)(+((signed int )((signed short int )0x0123456789abcdef))));
+    ((void)(+((signed int )0x0123456789abcdef)));
+    ((void)(+((signed long long int )0x0123456789abcdef)));
+    ((void)(+((signed int )((signed char )0x0123456789abcdefu))));
+    ((void)(+((signed int )((unsigned short int )0x0123456789abcdefu))));
+    ((void)(+((signed int )0x0123456789abcdefu)));
+    ((void)(+((unsigned long long int )0x0123456789abcdefu)));
+    ((void)(-((signed int )((signed char )0x0123456789abcdef))));
+    ((void)(-((signed int )((signed short int )0x0123456789abcdef))));
+    ((void)(-((signed int )0x0123456789abcdef)));
+    ((void)(-((signed long long int )0x0123456789abcdef)));
+    ((void)(-((signed int )((signed char )0x0123456789abcdefu))));
+    ((void)(-((signed int )((unsigned short int )0x0123456789abcdefu))));
+    ((void)(-((signed int )0x0123456789abcdefu)));
+    ((void)(-((unsigned long long int )0x0123456789abcdefu)));
+    ((void)((signed char )0x0123456789ABCDEF));
+    ((void)((signed short int )0x0123456789ABCDEF));
+    ((void)((signed int )0x0123456789ABCDEF));
+    ((void)((signed long long int )0x0123456789ABCDEF));
+    ((void)((signed char )0x0123456789ABCDEFu));
+    ((void)((unsigned short int )0x0123456789ABCDEFu));
+    ((void)((signed int )0x0123456789ABCDEFu));
+    ((void)((unsigned long long int )0x0123456789ABCDEFu));
+    ((void)(+((signed int )((signed char )0x0123456789ABCDEF))));
+    ((void)(+((signed int )((signed short int )0x0123456789ABCDEF))));
+    ((void)(+((signed int )0x0123456789ABCDEF)));
+    ((void)(+((signed long long int )0x0123456789ABCDEF)));
+    ((void)(+((signed int )((signed char )0x0123456789ABCDEFu))));
+    ((void)(+((signed int )((unsigned short int )0x0123456789ABCDEFu))));
+    ((void)(+((signed int )0x0123456789ABCDEFu)));
+    ((void)(+((unsigned long long int )0x0123456789ABCDEFu)));
+    ((void)(-((signed int )((signed char )0x0123456789ABCDEF))));
+    ((void)(-((signed int )((signed short int )0x0123456789ABCDEF))));
+    ((void)(-((signed int )0x0123456789ABCDEF)));
+    ((void)(-((signed long long int )0x0123456789ABCDEF)));
+    ((void)(-((signed int )((signed char )0x0123456789ABCDEFu))));
+    ((void)(-((signed int )((unsigned short int )0x0123456789ABCDEFu))));
+    ((void)(-((signed int )0x0123456789ABCDEFu)));
+    ((void)(-((unsigned long long int )0x0123456789ABCDEFu)));
+    ((void)((signed char )0X0123456789abcdef));
+    ((void)((signed short int )0X0123456789abcdef));
+    ((void)((signed int )0X0123456789abcdef));
+    ((void)((signed long long int )0X0123456789abcdef));
+    ((void)((signed char )0X0123456789abcdefu));
+    ((void)((unsigned short int )0X0123456789abcdefu));
+    ((void)((signed int )0X0123456789abcdefu));
+    ((void)((unsigned long long int )0X0123456789abcdefu));
+    ((void)(+((signed int )((signed char )0X0123456789abcdef))));
+    ((void)(+((signed int )((signed short int )0X0123456789abcdef))));
+    ((void)(+((signed int )0X0123456789abcdef)));
+    ((void)(+((signed long long int )0X0123456789abcdef)));
+    ((void)(+((signed int )((signed char )0X0123456789abcdefu))));
+    ((void)(+((signed int )((unsigned short int )0X0123456789abcdefu))));
+    ((void)(+((signed int )0X0123456789abcdefu)));
+    ((void)(+((unsigned long long int )0X0123456789abcdefu)));
+    ((void)(-((signed int )((signed char )0X0123456789abcdef))));
+    ((void)(-((signed int )((signed short int )0X0123456789abcdef))));
+    ((void)(-((signed int )0X0123456789abcdef)));
+    ((void)(-((signed long long int )0X0123456789abcdef)));
+    ((void)(-((signed int )((signed char )0X0123456789abcdefu))));
+    ((void)(-((signed int )((unsigned short int )0X0123456789abcdefu))));
+    ((void)(-((signed int )0X0123456789abcdefu)));
+    ((void)(-((unsigned long long int )0X0123456789abcdefu)));
+    ((void)((signed char )0X0123456789ABCDEF));
+    ((void)((signed short int )0X0123456789ABCDEF));
+    ((void)((signed int )0X0123456789ABCDEF));
+    ((void)((signed long long int )0X0123456789ABCDEF));
+    ((void)((signed char )0X0123456789ABCDEFu));
+    ((void)((unsigned short int )0X0123456789ABCDEFu));
+    ((void)((signed int )0X0123456789ABCDEFu));
+    ((void)((unsigned long long int )0X0123456789ABCDEFu));
+    ((void)(+((signed int )((signed char )0X0123456789ABCDEF))));
+    ((void)(+((signed int )((signed short int )0X0123456789ABCDEF))));
+    ((void)(+((signed int )0X0123456789ABCDEF)));
+    ((void)(+((signed long long int )0X0123456789ABCDEF)));
+    ((void)(+((signed int )((signed char )0X0123456789ABCDEFu))));
+    ((void)(+((signed int )((unsigned short int )0X0123456789ABCDEFu))));
+    ((void)(+((signed int )0X0123456789ABCDEFu)));
+    ((void)(+((unsigned long long int )0X0123456789ABCDEFu)));
+    ((void)(-((signed int )((signed char )0X0123456789ABCDEF))));
+    ((void)(-((signed int )((signed short int )0X0123456789ABCDEF))));
+    ((void)(-((signed int )0X0123456789ABCDEF)));
+    ((void)(-((signed long long int )0X0123456789ABCDEF)));
+    ((void)(-((signed int )((signed char )0X0123456789ABCDEFu))));
+    ((void)(-((signed int )((unsigned short int )0X0123456789ABCDEFu))));
+    ((void)(-((signed int )0X0123456789ABCDEFu)));
+    ((void)(-((unsigned long long int )0X0123456789ABCDEFu)));
+    ((void)((float )0123456789.));
+    ((void)((double )0123456789.));
+    ((void)((long double )0123456789.));
+    ((void)((long double )0123456789.));
+    ((void)(+((float )0123456789.)));
+    ((void)(+((double )0123456789.)));
+    ((void)(+((long double )0123456789.)));
+    ((void)(+((long double )0123456789.)));
+    ((void)(-((float )0123456789.)));
+    ((void)(-((double )0123456789.)));
+    ((void)(-((long double )0123456789.)));
+    ((void)(-((long double )0123456789.)));
+    ((void)((float )0123456789.e09));
+    ((void)((double )0123456789.e09));
+    ((void)((long double )0123456789.e09));
+    ((void)((long double )0123456789.e09));
+    ((void)(+((float )0123456789.e+09)));
+    ((void)(+((double )0123456789.e+09)));
+    ((void)(+((long double )0123456789.e+09)));
+    ((void)(+((long double )0123456789.e+09)));
+    ((void)(-((float )0123456789.e-09)));
+    ((void)(-((double )0123456789.e-09)));
+    ((void)(-((long double )0123456789.e-09)));
+    ((void)(-((long double )0123456789.e-09)));
+    ((void)((float ).0123456789e09));
+    ((void)((double ).0123456789e09));
+    ((void)((long double ).0123456789e09));
+    ((void)((long double ).0123456789e09));
+    ((void)(+((float ).0123456789E+09)));
+    ((void)(+((double ).0123456789E+09)));
+    ((void)(+((long double ).0123456789E+09)));
+    ((void)(+((long double ).0123456789E+09)));
+    ((void)(-((float ).0123456789E-09)));
+    ((void)(-((double ).0123456789E-09)));
+    ((void)(-((long double ).0123456789E-09)));
+    ((void)(-((long double ).0123456789E-09)));
+    ((void)((float )0123456789.0123456789));
+    ((void)((double )0123456789.0123456789));
+    ((void)((long double )0123456789.0123456789));
+    ((void)((long double )0123456789.0123456789));
+    ((void)(+((float )0123456789.0123456789E09)));
+    ((void)(+((double )0123456789.0123456789E09)));
+    ((void)(+((long double )0123456789.0123456789E09)));
+    ((void)(+((long double )0123456789.0123456789E09)));
+    ((void)(-((float )0123456789.0123456789E+09)));
+    ((void)(-((double )0123456789.0123456789E+09)));
+    ((void)(-((long double )0123456789.0123456789E+09)));
+    ((void)(-((long double )0123456789.0123456789E+09)));
+    ((void)((float )0123456789.0123456789E-09));
+    ((void)((double )0123456789.0123456789E-09));
+    ((void)((long double )0123456789.0123456789E-09));
+    ((void)((long double )0123456789.0123456789E-09));
+    ((void)((float )0x0123456789.p09));
+    ((void)((double )0x0123456789.p09));
+    ((void)((long double )0x0123456789.p09));
+    ((void)((long double )0x0123456789.p09));
+    ((void)(+((float )0x0123456789.p09)));
+    ((void)(+((double )0x0123456789.p09)));
+    ((void)(+((long double )0x0123456789.p09)));
+    ((void)(+((long double )0x0123456789.p09)));
+    ((void)(-((float )0x0123456789.p09)));
+    ((void)(-((double )0x0123456789.p09)));
+    ((void)(-((long double )0x0123456789.p09)));
+    ((void)(-((long double )0x0123456789.p09)));
+    ((void)((float )0x0123456789.p+09));
+    ((void)((double )0x0123456789.p+09));
+    ((void)((long double )0x0123456789.p+09));
+    ((void)((long double )0x0123456789.p+09));
+    ((void)(+((float )0x0123456789.p-09)));
+    ((void)(+((double )0x0123456789.p-09)));
+    ((void)(+((long double )0x0123456789.p-09)));
+    ((void)(+((long double )0x0123456789.p-09)));
+    ((void)(-((float )0x.0123456789p09)));
+    ((void)(-((double )0x.0123456789p09)));
+    ((void)(-((long double )0x.0123456789p09)));
+    ((void)(-((long double )0x.0123456789p09)));
     ((void)__f__F_c__1('a'));
     ((void)__f__F_Sc__1(20));
@@ -1111,5 +1374,5 @@
     ((void)L"a" "b" "c");
     ((void)(___retval_main__i_1=0) /* ?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi___1(); }
@@ -1126,4 +1389,4 @@
     ((void)(___retval_main__i_1=(((void)(_tmp_cp_ret0=invoke_main(__argc__i_1, __argv__PPc_1, __envp__PPc_1))) , _tmp_cp_ret0)) /* ?{} */);
     ((void)(_tmp_cp_ret0) /* ^?{} */);
-    return ((signed int )___retval_main__i_1);
-}
+    return ___retval_main__i_1;
+}
Index: src/tests/.expect/64/KRfunctions.txt
===================================================================
--- src/tests/.expect/64/KRfunctions.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/64/KRfunctions.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -21,4 +21,5 @@
 static inline void ___destructor__F_R2sS_autogen___1(struct S *___dst__R2sS_1);
 static inline struct S ___operator_assign__F2sS_R2sS2sS_autogen___1(struct S *___dst__R2sS_1, struct S ___src__2sS_1);
+static inline void ___constructor__F_R2sSi_autogen___1(struct S *___dst__R2sS_1, signed int __i__i_1);
 static inline void ___constructor__F_R2sS_autogen___1(struct S *___dst__R2sS_1){
     ((void)((*___dst__R2sS_1).__i__i_1) /* ?{} */);
@@ -33,6 +34,6 @@
     struct S ___ret__2sS_1;
     ((void)((*___dst__R2sS_1).__i__i_1=___src__2sS_1.__i__i_1));
-    ((void)___constructor__F_R2sS2sS_autogen___1((&___ret__2sS_1), ___src__2sS_1));
-    return ((struct S )___ret__2sS_1);
+    ((void)___constructor__F_R2sS2sS_autogen___1((&___ret__2sS_1), (*___dst__R2sS_1)));
+    return ___ret__2sS_1;
 }
 static inline void ___constructor__F_R2sSi_autogen___1(struct S *___dst__R2sS_1, signed int __i__i_1){
@@ -65,5 +66,5 @@
     signed int *__x__FPi_ii__2(signed int __anonymous_object2, signed int __anonymous_object3);
     ((void)(___retval_f10__PFPi_ii__1=__x__FPi_ii__2) /* ?{} */);
-    return ((signed int *(*)(signed int __x__i_1, signed int __y__i_1))___retval_f10__PFPi_ii__1);
+    return ___retval_f10__PFPi_ii__1;
 }
 signed int (*__f11__FPA0i_iPiPi__1(signed int __a__i_1, signed int *__b__Pi_1, signed int *__c__Pi_1))[]{
Index: src/tests/.expect/64/attributes.txt
===================================================================
--- src/tests/.expect/64/attributes.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/64/attributes.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -23,6 +23,6 @@
 static inline struct __anonymous0 ___operator_assign__F13s__anonymous0_R13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1){
     struct __anonymous0 ___ret__13s__anonymous0_1;
-    ((void)___constructor__F_R13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), ___src__13s__anonymous0_1));
-    return ((struct __anonymous0 )___ret__13s__anonymous0_1);
+    ((void)___constructor__F_R13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), (*___dst__R13s__anonymous0_1)));
+    return ___ret__13s__anonymous0_1;
 }
 __attribute__ ((unused)) struct Agn1;
@@ -41,6 +41,6 @@
 static inline struct Agn2 ___operator_assign__F5sAgn2_R5sAgn25sAgn2_autogen___1(struct Agn2 *___dst__R5sAgn2_1, struct Agn2 ___src__5sAgn2_1){
     struct Agn2 ___ret__5sAgn2_1;
-    ((void)___constructor__F_R5sAgn25sAgn2_autogen___1((&___ret__5sAgn2_1), ___src__5sAgn2_1));
-    return ((struct Agn2 )___ret__5sAgn2_1);
+    ((void)___constructor__F_R5sAgn25sAgn2_autogen___1((&___ret__5sAgn2_1), (*___dst__R5sAgn2_1)));
+    return ___ret__5sAgn2_1;
 }
 enum __attribute__ ((unused)) __anonymous1 {
@@ -69,4 +69,14 @@
 static inline void ___destructor__F_R4sFdl_autogen___1(struct Fdl *___dst__R4sFdl_1);
 static inline struct Fdl ___operator_assign__F4sFdl_R4sFdl4sFdl_autogen___1(struct Fdl *___dst__R4sFdl_1, struct Fdl ___src__4sFdl_1);
+static inline void ___constructor__F_R4sFdli_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1);
+static inline void ___constructor__F_R4sFdlii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1);
+static inline void ___constructor__F_R4sFdliii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1);
+static inline void ___constructor__F_R4sFdliiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1);
+static inline void ___constructor__F_R4sFdliiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1);
+static inline void ___constructor__F_R4sFdliiiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1);
+static inline void ___constructor__F_R4sFdliiiiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1);
+static inline void ___constructor__F_R4sFdliiiiiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1);
+static inline void ___constructor__F_R4sFdliiiiiiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1, signed int __anonymous_object1);
+static inline void ___constructor__F_R4sFdliiiiiiiiiPi_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1, signed int __anonymous_object2, signed int *__f9__Pi_1);
 static inline void ___constructor__F_R4sFdl_autogen___1(struct Fdl *___dst__R4sFdl_1){
     ((void)((*___dst__R4sFdl_1).__f1__i_1) /* ?{} */);
@@ -78,4 +88,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -89,8 +100,10 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1=___src__4sFdl_1.__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1=___src__4sFdl_1.__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0=___src__4sFdl_1.__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1=___src__4sFdl_1.__f9__Pi_1) /* ?{} */);
 }
 static inline void ___destructor__F_R4sFdl_autogen___1(struct Fdl *___dst__R4sFdl_1){
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ^?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ^?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ^?{} */);
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ^?{} */);
@@ -112,7 +125,8 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1=___src__4sFdl_1.__f7__i_1));
     ((void)((*___dst__R4sFdl_1).__f8__i_1=___src__4sFdl_1.__f8__i_1));
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0=___src__4sFdl_1.__anonymous_object0));
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1=___src__4sFdl_1.__f9__Pi_1));
-    ((void)___constructor__F_R4sFdl4sFdl_autogen___1((&___ret__4sFdl_1), ___src__4sFdl_1));
-    return ((struct Fdl )___ret__4sFdl_1);
+    ((void)___constructor__F_R4sFdl4sFdl_autogen___1((&___ret__4sFdl_1), (*___dst__R4sFdl_1)));
+    return ___ret__4sFdl_1;
 }
 static inline void ___constructor__F_R4sFdli_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1){
@@ -125,4 +139,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -136,4 +151,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -147,4 +163,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -158,4 +175,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -169,4 +187,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -180,4 +199,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -191,4 +211,5 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1=__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
 }
@@ -202,7 +223,8 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1=__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1=__f8__i_1) /* ?{} */);
-    ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
-}
-static inline void ___constructor__F_R4sFdliiiiiiiiPi_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1, signed int *__f9__Pi_1){
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
+}
+static inline void ___constructor__F_R4sFdliiiiiiiii_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1, signed int __anonymous_object3){
     ((void)((*___dst__R4sFdl_1).__f1__i_1=__f1__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f2__i_1=__f2__i_1) /* ?{} */);
@@ -213,4 +235,17 @@
     ((void)((*___dst__R4sFdl_1).__f7__i_1=__f7__i_1) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f8__i_1=__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0=__anonymous_object3) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f9__Pi_1) /* ?{} */);
+}
+static inline void ___constructor__F_R4sFdliiiiiiiiiPi_autogen___1(struct Fdl *___dst__R4sFdl_1, signed int __f1__i_1, signed int __f2__i_1, signed int __f3__i_1, signed int __f4__i_1, signed int __f5__i_1, signed int __f6__i_1, signed int __f7__i_1, signed int __f8__i_1, signed int __anonymous_object4, signed int *__f9__Pi_1){
+    ((void)((*___dst__R4sFdl_1).__f1__i_1=__f1__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f2__i_1=__f2__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f3__i_1=__f3__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f4__i_1=__f4__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f5__i_1=__f5__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f6__i_1=__f6__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f7__i_1=__f7__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__f8__i_1=__f8__i_1) /* ?{} */);
+    ((void)((*___dst__R4sFdl_1).__anonymous_object0=__anonymous_object4) /* ?{} */);
     ((void)((*___dst__R4sFdl_1).__f9__Pi_1=__f9__Pi_1) /* ?{} */);
 }
@@ -232,11 +267,11 @@
     __attribute__ ((unused)) signed int **const ___retval_f2__CPPi_1;
 }
-__attribute__ ((unused,used,unused)) signed int (*__f3__FPA0i_i__1(signed int __anonymous_object1))[];
+__attribute__ ((unused,used,unused)) signed int (*__f3__FPA0i_i__1(signed int __anonymous_object5))[];
 __attribute__ ((unused,unused)) signed int (*__f3__FPA0i_i__1(signed int __p__i_1))[]{
     __attribute__ ((unused)) signed int (*___retval_f3__PA0i_1)[];
 }
-__attribute__ ((unused,used,unused)) signed int (*__f4__FPFi_i____1())(signed int __anonymous_object2);
-__attribute__ ((unused,unused)) signed int (*__f4__FPFi_i____1())(signed int __anonymous_object3){
-    __attribute__ ((unused)) signed int (*___retval_f4__PFi_i__1)(signed int __anonymous_object4);
+__attribute__ ((unused,used,unused)) signed int (*__f4__FPFi_i____1())(signed int __anonymous_object6);
+__attribute__ ((unused,unused)) signed int (*__f4__FPFi_i____1())(signed int __anonymous_object7){
+    __attribute__ ((unused)) signed int (*___retval_f4__PFi_i__1)(signed int __anonymous_object8);
 }
 signed int __vtr__Fi___1(){
@@ -268,8 +303,8 @@
 signed int __tpr2__Fi_PPi__1(__attribute__ ((unused,unused,unused,unused,unused,unused)) signed int **__Foo__PPi_1);
 signed int __tpr3__Fi_Pi__1(__attribute__ ((unused,unused,unused)) signed int *__Foo__Pi_1);
-signed int __tpr4__Fi_PFi_Pi___1(__attribute__ ((unused,unused)) signed int (*__anonymous_object5)(__attribute__ ((unused,unused)) signed int __anonymous_object6[((unsigned long int )5)]));
+signed int __tpr4__Fi_PFi_Pi___1(__attribute__ ((unused,unused)) signed int (*__anonymous_object9)(__attribute__ ((unused,unused)) signed int __anonymous_object10[((unsigned long int )5)]));
 signed int __tpr5__Fi_PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__Foo__PFi___1)());
 signed int __tpr6__Fi_PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__Foo__PFi___1)());
-signed int __tpr7__Fi_PFi_PFi_i____1(__attribute__ ((unused,unused)) signed int (*__anonymous_object7)(__attribute__ ((unused)) signed int (*__anonymous_object8)(__attribute__ ((unused,unused)) signed int __anonymous_object9)));
+signed int __tpr7__Fi_PFi_PFi_i____1(__attribute__ ((unused,unused)) signed int (*__anonymous_object11)(__attribute__ ((unused)) signed int (*__anonymous_object12)(__attribute__ ((unused,unused)) signed int __anonymous_object13)));
 signed int __ad__Fi___1(){
     __attribute__ ((unused)) signed int ___retval_ad__i_1;
@@ -300,6 +335,6 @@
         struct __anonymous4 ___ret__13s__anonymous4_2;
         ((void)((*___dst__R13s__anonymous4_2).__i__i_2=___src__13s__anonymous4_2.__i__i_2));
-        ((void)___constructor__F_R13s__anonymous413s__anonymous4_autogen___2((&___ret__13s__anonymous4_2), ___src__13s__anonymous4_2));
-        return ((struct __anonymous4 )___ret__13s__anonymous4_2);
+        ((void)___constructor__F_R13s__anonymous413s__anonymous4_autogen___2((&___ret__13s__anonymous4_2), (*___dst__R13s__anonymous4_2)));
+        return ___ret__13s__anonymous4_2;
     }
     inline void ___constructor__F_R13s__anonymous4i_autogen___2(struct __anonymous4 *___dst__R13s__anonymous4_2, signed int __i__i_2){
@@ -313,5 +348,5 @@
     }
     inline void ___constructor__F_R13e__anonymous513e__anonymous5_intrinsic___2(enum __anonymous5 *___dst__R13e__anonymous5_2, enum __anonymous5 ___src__13e__anonymous5_2){
-        ((void)((*___dst__R13e__anonymous5_2)=___src__13e__anonymous5_2));
+        ((void)((*___dst__R13e__anonymous5_2)=___src__13e__anonymous5_2) /* ?{} */);
     }
     inline void ___destructor__F_R13e__anonymous5_intrinsic___2(__attribute__ ((unused)) enum __anonymous5 *___dst__R13e__anonymous5_2){
@@ -319,21 +354,22 @@
     inline enum __anonymous5 ___operator_assign__F13e__anonymous5_R13e__anonymous513e__anonymous5_intrinsic___2(enum __anonymous5 *___dst__R13e__anonymous5_2, enum __anonymous5 ___src__13e__anonymous5_2){
         enum __anonymous5 ___ret__13e__anonymous5_2;
-        ((void)(___ret__13e__anonymous5_2=((*___dst__R13e__anonymous5_2)=___src__13e__anonymous5_2)) /* ?{} */);
-        return ((enum __anonymous5 )___ret__13e__anonymous5_2);
+        ((void)((*___dst__R13e__anonymous5_2)=___src__13e__anonymous5_2));
+        ((void)(___ret__13e__anonymous5_2=(*___dst__R13e__anonymous5_2)) /* ?{} */);
+        return ___ret__13e__anonymous5_2;
     }
     ((void)sizeof(enum __anonymous5 ));
 }
-signed int __apd1__Fi_PiPi__1(__attribute__ ((unused,unused,unused)) signed int *__anonymous_object10, __attribute__ ((unused,unused,unused)) signed int *__anonymous_object11);
-signed int __apd2__Fi_PPiPPi__1(__attribute__ ((unused,unused,unused,unused)) signed int **__anonymous_object12, __attribute__ ((unused,unused,unused,unused)) signed int **__anonymous_object13);
-signed int __apd3__Fi_PiPi__1(__attribute__ ((unused,unused,unused)) signed int *__anonymous_object14, __attribute__ ((unused,unused,unused)) signed int *__anonymous_object15);
-signed int __apd4__Fi_PFi__PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object16)(), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object17)());
-signed int __apd5__Fi_PFi_i_PFi_i___1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object18)(__attribute__ ((unused)) signed int __anonymous_object19), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object20)(__attribute__ ((unused)) signed int __anonymous_object21));
-signed int __apd6__Fi_PFi__PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object22)(), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object23)());
-signed int __apd7__Fi_PFi_i_PFi_i___1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object24)(__attribute__ ((unused)) signed int __anonymous_object25), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object26)(__attribute__ ((unused)) signed int __anonymous_object27));
+signed int __apd1__Fi_PiPi__1(__attribute__ ((unused,unused,unused)) signed int *__anonymous_object14, __attribute__ ((unused,unused,unused)) signed int *__anonymous_object15);
+signed int __apd2__Fi_PPiPPi__1(__attribute__ ((unused,unused,unused,unused)) signed int **__anonymous_object16, __attribute__ ((unused,unused,unused,unused)) signed int **__anonymous_object17);
+signed int __apd3__Fi_PiPi__1(__attribute__ ((unused,unused,unused)) signed int *__anonymous_object18, __attribute__ ((unused,unused,unused)) signed int *__anonymous_object19);
+signed int __apd4__Fi_PFi__PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object20)(), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object21)());
+signed int __apd5__Fi_PFi_i_PFi_i___1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object22)(__attribute__ ((unused)) signed int __anonymous_object23), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object24)(__attribute__ ((unused)) signed int __anonymous_object25));
+signed int __apd6__Fi_PFi__PFi____1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object26)(), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object27)());
+signed int __apd7__Fi_PFi_i_PFi_i___1(__attribute__ ((unused,unused,unused)) signed int (*__anonymous_object28)(__attribute__ ((unused)) signed int __anonymous_object29), __attribute__ ((unused,unused,unused)) signed int (*__anonymous_object30)(__attribute__ ((unused)) signed int __anonymous_object31));
 struct Vad {
-    __attribute__ ((unused)) signed int __anonymous_object28;
-    __attribute__ ((unused,unused)) signed int *__anonymous_object29;
-    __attribute__ ((unused,unused)) signed int __anonymous_object30[((unsigned long int )10)];
-    __attribute__ ((unused,unused)) signed int (*__anonymous_object31)();
+    __attribute__ ((unused)) signed int __anonymous_object32;
+    __attribute__ ((unused,unused)) signed int *__anonymous_object33;
+    __attribute__ ((unused,unused)) signed int __anonymous_object34[((unsigned long int )10)];
+    __attribute__ ((unused,unused)) signed int (*__anonymous_object35)();
 };
 static inline void ___constructor__F_R4sVad_autogen___1(struct Vad *___dst__R4sVad_1);
@@ -341,13 +377,113 @@
 static inline void ___destructor__F_R4sVad_autogen___1(struct Vad *___dst__R4sVad_1);
 static inline struct Vad ___operator_assign__F4sVad_R4sVad4sVad_autogen___1(struct Vad *___dst__R4sVad_1, struct Vad ___src__4sVad_1);
+static inline void ___constructor__F_R4sVadi_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object36);
+static inline void ___constructor__F_R4sVadiPi_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object37, signed int *__anonymous_object38);
+static inline void ___constructor__F_R4sVadiPiA0i_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object39, signed int *__anonymous_object40, signed int __anonymous_object41[((unsigned long int )10)]);
+static inline void ___constructor__F_R4sVadiPiA0iPFi___autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object42, signed int *__anonymous_object43, signed int __anonymous_object44[((unsigned long int )10)], signed int (*__anonymous_object45)());
 static inline void ___constructor__F_R4sVad_autogen___1(struct Vad *___dst__R4sVad_1){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33) /* ?{} */);
+    {
+        signed int _index0 = 0;
+        for (;(_index0<10);((void)(++_index0))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[((signed long int )_index0)])))) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35) /* ?{} */);
 }
 static inline void ___constructor__F_R4sVad4sVad_autogen___1(struct Vad *___dst__R4sVad_1, struct Vad ___src__4sVad_1){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=___src__4sVad_1.__anonymous_object32) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33=___src__4sVad_1.__anonymous_object33) /* ?{} */);
+    {
+        signed int _index1 = 0;
+        for (;(_index1<10);((void)(++_index1))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[((signed long int )_index1)])))=___src__4sVad_1.__anonymous_object34[((signed long int )_index1)]) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35=___src__4sVad_1.__anonymous_object35) /* ?{} */);
 }
 static inline void ___destructor__F_R4sVad_autogen___1(struct Vad *___dst__R4sVad_1){
+    ((void)((*___dst__R4sVad_1).__anonymous_object35) /* ^?{} */);
+    {
+        signed int _index2 = (10-1);
+        for (;(_index2>=0);((void)(--_index2))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[((signed long int )_index2)])))) /* ^?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object33) /* ^?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object32) /* ^?{} */);
 }
 static inline struct Vad ___operator_assign__F4sVad_R4sVad4sVad_autogen___1(struct Vad *___dst__R4sVad_1, struct Vad ___src__4sVad_1){
     struct Vad ___ret__4sVad_1;
-    ((void)___constructor__F_R4sVad4sVad_autogen___1((&___ret__4sVad_1), ___src__4sVad_1));
-    return ((struct Vad )___ret__4sVad_1);
-}
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=___src__4sVad_1.__anonymous_object32));
+    ((void)((*___dst__R4sVad_1).__anonymous_object33=___src__4sVad_1.__anonymous_object33));
+    {
+        signed int _index3 = 0;
+        for (;(_index3<10);((void)(++_index3))) {
+            ((void)((*___dst__R4sVad_1).__anonymous_object34[((signed long int )_index3)]=___src__4sVad_1.__anonymous_object34[((signed long int )_index3)]));
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35=___src__4sVad_1.__anonymous_object35));
+    ((void)___constructor__F_R4sVad4sVad_autogen___1((&___ret__4sVad_1), (*___dst__R4sVad_1)));
+    return ___ret__4sVad_1;
+}
+static inline void ___constructor__F_R4sVadi_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object46){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=__anonymous_object46) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33) /* ?{} */);
+    {
+        signed int _index4 = 0;
+        for (;(_index4<10);((void)(++_index4))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[((signed long int )_index4)])))) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35) /* ?{} */);
+}
+static inline void ___constructor__F_R4sVadiPi_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object47, signed int *__anonymous_object48){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=__anonymous_object47) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33=__anonymous_object48) /* ?{} */);
+    {
+        signed int _index5 = 0;
+        for (;(_index5<10);((void)(++_index5))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[((signed long int )_index5)])))) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35) /* ?{} */);
+}
+static inline void ___constructor__F_R4sVadiPiA0i_autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object49, signed int *__anonymous_object50, signed int __anonymous_object51[((unsigned long int )10)]){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=__anonymous_object49) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33=__anonymous_object50) /* ?{} */);
+    {
+        signed int _index6 = 0;
+        for (;(_index6<10);((void)(++_index6))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[((signed long int )_index6)])))=__anonymous_object51[((signed long int )_index6)]) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35) /* ?{} */);
+}
+static inline void ___constructor__F_R4sVadiPiA0iPFi___autogen___1(struct Vad *___dst__R4sVad_1, signed int __anonymous_object52, signed int *__anonymous_object53, signed int __anonymous_object54[((unsigned long int )10)], signed int (*__anonymous_object55)()){
+    ((void)((*___dst__R4sVad_1).__anonymous_object32=__anonymous_object52) /* ?{} */);
+    ((void)((*___dst__R4sVad_1).__anonymous_object33=__anonymous_object53) /* ?{} */);
+    {
+        signed int _index7 = 0;
+        for (;(_index7<10);((void)(++_index7))) {
+            ((void)((*((signed int *)(&(*___dst__R4sVad_1).__anonymous_object34[((signed long int )_index7)])))=__anonymous_object54[((signed long int )_index7)]) /* ?{} */);
+        }
+
+    }
+
+    ((void)((*___dst__R4sVad_1).__anonymous_object35=__anonymous_object55) /* ?{} */);
+}
Index: src/tests/.expect/64/declarationSpecifier.txt
===================================================================
--- src/tests/.expect/64/declarationSpecifier.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/64/declarationSpecifier.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -20,4 +20,5 @@
 static inline void ___destructor__F_R13s__anonymous0_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1);
 static inline struct __anonymous0 ___operator_assign__F13s__anonymous0_R13s__anonymous013s__anonymous0_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1, struct __anonymous0 ___src__13s__anonymous0_1);
+static inline void ___constructor__F_R13s__anonymous0i_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous0_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1){
     ((void)((*___dst__R13s__anonymous0_1).__i__i_1) /* ?{} */);
@@ -32,6 +33,6 @@
     struct __anonymous0 ___ret__13s__anonymous0_1;
     ((void)((*___dst__R13s__anonymous0_1).__i__i_1=___src__13s__anonymous0_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), ___src__13s__anonymous0_1));
-    return ((struct __anonymous0 )___ret__13s__anonymous0_1);
+    ((void)___constructor__F_R13s__anonymous013s__anonymous0_autogen___1((&___ret__13s__anonymous0_1), (*___dst__R13s__anonymous0_1)));
+    return ___ret__13s__anonymous0_1;
 }
 static inline void ___constructor__F_R13s__anonymous0i_autogen___1(struct __anonymous0 *___dst__R13s__anonymous0_1, signed int __i__i_1){
@@ -46,4 +47,5 @@
 static inline void ___destructor__F_R13s__anonymous1_autogen___1(struct __anonymous1 *___dst__R13s__anonymous1_1);
 static inline struct __anonymous1 ___operator_assign__F13s__anonymous1_R13s__anonymous113s__anonymous1_autogen___1(struct __anonymous1 *___dst__R13s__anonymous1_1, struct __anonymous1 ___src__13s__anonymous1_1);
+static inline void ___constructor__F_R13s__anonymous1i_autogen___1(struct __anonymous1 *___dst__R13s__anonymous1_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous1_autogen___1(struct __anonymous1 *___dst__R13s__anonymous1_1){
     ((void)((*___dst__R13s__anonymous1_1).__i__i_1) /* ?{} */);
@@ -58,6 +60,6 @@
     struct __anonymous1 ___ret__13s__anonymous1_1;
     ((void)((*___dst__R13s__anonymous1_1).__i__i_1=___src__13s__anonymous1_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous113s__anonymous1_autogen___1((&___ret__13s__anonymous1_1), ___src__13s__anonymous1_1));
-    return ((struct __anonymous1 )___ret__13s__anonymous1_1);
+    ((void)___constructor__F_R13s__anonymous113s__anonymous1_autogen___1((&___ret__13s__anonymous1_1), (*___dst__R13s__anonymous1_1)));
+    return ___ret__13s__anonymous1_1;
 }
 static inline void ___constructor__F_R13s__anonymous1i_autogen___1(struct __anonymous1 *___dst__R13s__anonymous1_1, signed int __i__i_1){
@@ -72,4 +74,5 @@
 static inline void ___destructor__F_R13s__anonymous2_autogen___1(struct __anonymous2 *___dst__R13s__anonymous2_1);
 static inline struct __anonymous2 ___operator_assign__F13s__anonymous2_R13s__anonymous213s__anonymous2_autogen___1(struct __anonymous2 *___dst__R13s__anonymous2_1, struct __anonymous2 ___src__13s__anonymous2_1);
+static inline void ___constructor__F_R13s__anonymous2i_autogen___1(struct __anonymous2 *___dst__R13s__anonymous2_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous2_autogen___1(struct __anonymous2 *___dst__R13s__anonymous2_1){
     ((void)((*___dst__R13s__anonymous2_1).__i__i_1) /* ?{} */);
@@ -84,6 +87,6 @@
     struct __anonymous2 ___ret__13s__anonymous2_1;
     ((void)((*___dst__R13s__anonymous2_1).__i__i_1=___src__13s__anonymous2_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous213s__anonymous2_autogen___1((&___ret__13s__anonymous2_1), ___src__13s__anonymous2_1));
-    return ((struct __anonymous2 )___ret__13s__anonymous2_1);
+    ((void)___constructor__F_R13s__anonymous213s__anonymous2_autogen___1((&___ret__13s__anonymous2_1), (*___dst__R13s__anonymous2_1)));
+    return ___ret__13s__anonymous2_1;
 }
 static inline void ___constructor__F_R13s__anonymous2i_autogen___1(struct __anonymous2 *___dst__R13s__anonymous2_1, signed int __i__i_1){
@@ -98,4 +101,5 @@
 static inline void ___destructor__F_R13s__anonymous3_autogen___1(struct __anonymous3 *___dst__R13s__anonymous3_1);
 static inline struct __anonymous3 ___operator_assign__F13s__anonymous3_R13s__anonymous313s__anonymous3_autogen___1(struct __anonymous3 *___dst__R13s__anonymous3_1, struct __anonymous3 ___src__13s__anonymous3_1);
+static inline void ___constructor__F_R13s__anonymous3i_autogen___1(struct __anonymous3 *___dst__R13s__anonymous3_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous3_autogen___1(struct __anonymous3 *___dst__R13s__anonymous3_1){
     ((void)((*___dst__R13s__anonymous3_1).__i__i_1) /* ?{} */);
@@ -110,6 +114,6 @@
     struct __anonymous3 ___ret__13s__anonymous3_1;
     ((void)((*___dst__R13s__anonymous3_1).__i__i_1=___src__13s__anonymous3_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous313s__anonymous3_autogen___1((&___ret__13s__anonymous3_1), ___src__13s__anonymous3_1));
-    return ((struct __anonymous3 )___ret__13s__anonymous3_1);
+    ((void)___constructor__F_R13s__anonymous313s__anonymous3_autogen___1((&___ret__13s__anonymous3_1), (*___dst__R13s__anonymous3_1)));
+    return ___ret__13s__anonymous3_1;
 }
 static inline void ___constructor__F_R13s__anonymous3i_autogen___1(struct __anonymous3 *___dst__R13s__anonymous3_1, signed int __i__i_1){
@@ -124,4 +128,5 @@
 static inline void ___destructor__F_R13s__anonymous4_autogen___1(struct __anonymous4 *___dst__R13s__anonymous4_1);
 static inline struct __anonymous4 ___operator_assign__F13s__anonymous4_R13s__anonymous413s__anonymous4_autogen___1(struct __anonymous4 *___dst__R13s__anonymous4_1, struct __anonymous4 ___src__13s__anonymous4_1);
+static inline void ___constructor__F_R13s__anonymous4i_autogen___1(struct __anonymous4 *___dst__R13s__anonymous4_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous4_autogen___1(struct __anonymous4 *___dst__R13s__anonymous4_1){
     ((void)((*___dst__R13s__anonymous4_1).__i__i_1) /* ?{} */);
@@ -136,6 +141,6 @@
     struct __anonymous4 ___ret__13s__anonymous4_1;
     ((void)((*___dst__R13s__anonymous4_1).__i__i_1=___src__13s__anonymous4_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous413s__anonymous4_autogen___1((&___ret__13s__anonymous4_1), ___src__13s__anonymous4_1));
-    return ((struct __anonymous4 )___ret__13s__anonymous4_1);
+    ((void)___constructor__F_R13s__anonymous413s__anonymous4_autogen___1((&___ret__13s__anonymous4_1), (*___dst__R13s__anonymous4_1)));
+    return ___ret__13s__anonymous4_1;
 }
 static inline void ___constructor__F_R13s__anonymous4i_autogen___1(struct __anonymous4 *___dst__R13s__anonymous4_1, signed int __i__i_1){
@@ -150,4 +155,5 @@
 static inline void ___destructor__F_R13s__anonymous5_autogen___1(struct __anonymous5 *___dst__R13s__anonymous5_1);
 static inline struct __anonymous5 ___operator_assign__F13s__anonymous5_R13s__anonymous513s__anonymous5_autogen___1(struct __anonymous5 *___dst__R13s__anonymous5_1, struct __anonymous5 ___src__13s__anonymous5_1);
+static inline void ___constructor__F_R13s__anonymous5i_autogen___1(struct __anonymous5 *___dst__R13s__anonymous5_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous5_autogen___1(struct __anonymous5 *___dst__R13s__anonymous5_1){
     ((void)((*___dst__R13s__anonymous5_1).__i__i_1) /* ?{} */);
@@ -162,6 +168,6 @@
     struct __anonymous5 ___ret__13s__anonymous5_1;
     ((void)((*___dst__R13s__anonymous5_1).__i__i_1=___src__13s__anonymous5_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous513s__anonymous5_autogen___1((&___ret__13s__anonymous5_1), ___src__13s__anonymous5_1));
-    return ((struct __anonymous5 )___ret__13s__anonymous5_1);
+    ((void)___constructor__F_R13s__anonymous513s__anonymous5_autogen___1((&___ret__13s__anonymous5_1), (*___dst__R13s__anonymous5_1)));
+    return ___ret__13s__anonymous5_1;
 }
 static inline void ___constructor__F_R13s__anonymous5i_autogen___1(struct __anonymous5 *___dst__R13s__anonymous5_1, signed int __i__i_1){
@@ -176,4 +182,5 @@
 static inline void ___destructor__F_R13s__anonymous6_autogen___1(struct __anonymous6 *___dst__R13s__anonymous6_1);
 static inline struct __anonymous6 ___operator_assign__F13s__anonymous6_R13s__anonymous613s__anonymous6_autogen___1(struct __anonymous6 *___dst__R13s__anonymous6_1, struct __anonymous6 ___src__13s__anonymous6_1);
+static inline void ___constructor__F_R13s__anonymous6i_autogen___1(struct __anonymous6 *___dst__R13s__anonymous6_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous6_autogen___1(struct __anonymous6 *___dst__R13s__anonymous6_1){
     ((void)((*___dst__R13s__anonymous6_1).__i__i_1) /* ?{} */);
@@ -188,6 +195,6 @@
     struct __anonymous6 ___ret__13s__anonymous6_1;
     ((void)((*___dst__R13s__anonymous6_1).__i__i_1=___src__13s__anonymous6_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous613s__anonymous6_autogen___1((&___ret__13s__anonymous6_1), ___src__13s__anonymous6_1));
-    return ((struct __anonymous6 )___ret__13s__anonymous6_1);
+    ((void)___constructor__F_R13s__anonymous613s__anonymous6_autogen___1((&___ret__13s__anonymous6_1), (*___dst__R13s__anonymous6_1)));
+    return ___ret__13s__anonymous6_1;
 }
 static inline void ___constructor__F_R13s__anonymous6i_autogen___1(struct __anonymous6 *___dst__R13s__anonymous6_1, signed int __i__i_1){
@@ -202,4 +209,5 @@
 static inline void ___destructor__F_R13s__anonymous7_autogen___1(struct __anonymous7 *___dst__R13s__anonymous7_1);
 static inline struct __anonymous7 ___operator_assign__F13s__anonymous7_R13s__anonymous713s__anonymous7_autogen___1(struct __anonymous7 *___dst__R13s__anonymous7_1, struct __anonymous7 ___src__13s__anonymous7_1);
+static inline void ___constructor__F_R13s__anonymous7i_autogen___1(struct __anonymous7 *___dst__R13s__anonymous7_1, signed int __i__i_1);
 static inline void ___constructor__F_R13s__anonymous7_autogen___1(struct __anonymous7 *___dst__R13s__anonymous7_1){
     ((void)((*___dst__R13s__anonymous7_1).__i__i_1) /* ?{} */);
@@ -214,6 +222,6 @@
     struct __anonymous7 ___ret__13s__anonymous7_1;
     ((void)((*___dst__R13s__anonymous7_1).__i__i_1=___src__13s__anonymous7_1.__i__i_1));
-    ((void)___constructor__F_R13s__anonymous713s__anonymous7_autogen___1((&___ret__13s__anonymous7_1), ___src__13s__anonymous7_1));
-    return ((struct __anonymous7 )___ret__13s__anonymous7_1);
+    ((void)___constructor__F_R13s__anonymous713s__anonymous7_autogen___1((&___ret__13s__anonymous7_1), (*___dst__R13s__anonymous7_1)));
+    return ___ret__13s__anonymous7_1;
 }
 static inline void ___constructor__F_R13s__anonymous7i_autogen___1(struct __anonymous7 *___dst__R13s__anonymous7_1, signed int __i__i_1){
@@ -236,4 +244,5 @@
 static inline void ___destructor__F_R13s__anonymous8_autogen___1(struct __anonymous8 *___dst__R13s__anonymous8_1);
 static inline struct __anonymous8 ___operator_assign__F13s__anonymous8_R13s__anonymous813s__anonymous8_autogen___1(struct __anonymous8 *___dst__R13s__anonymous8_1, struct __anonymous8 ___src__13s__anonymous8_1);
+static inline void ___constructor__F_R13s__anonymous8s_autogen___1(struct __anonymous8 *___dst__R13s__anonymous8_1, signed short int __i__s_1);
 static inline void ___constructor__F_R13s__anonymous8_autogen___1(struct __anonymous8 *___dst__R13s__anonymous8_1){
     ((void)((*___dst__R13s__anonymous8_1).__i__s_1) /* ?{} */);
@@ -248,6 +257,6 @@
     struct __anonymous8 ___ret__13s__anonymous8_1;
     ((void)((*___dst__R13s__anonymous8_1).__i__s_1=___src__13s__anonymous8_1.__i__s_1));
-    ((void)___constructor__F_R13s__anonymous813s__anonymous8_autogen___1((&___ret__13s__anonymous8_1), ___src__13s__anonymous8_1));
-    return ((struct __anonymous8 )___ret__13s__anonymous8_1);
+    ((void)___constructor__F_R13s__anonymous813s__anonymous8_autogen___1((&___ret__13s__anonymous8_1), (*___dst__R13s__anonymous8_1)));
+    return ___ret__13s__anonymous8_1;
 }
 static inline void ___constructor__F_R13s__anonymous8s_autogen___1(struct __anonymous8 *___dst__R13s__anonymous8_1, signed short int __i__s_1){
@@ -262,4 +271,5 @@
 static inline void ___destructor__F_R13s__anonymous9_autogen___1(struct __anonymous9 *___dst__R13s__anonymous9_1);
 static inline struct __anonymous9 ___operator_assign__F13s__anonymous9_R13s__anonymous913s__anonymous9_autogen___1(struct __anonymous9 *___dst__R13s__anonymous9_1, struct __anonymous9 ___src__13s__anonymous9_1);
+static inline void ___constructor__F_R13s__anonymous9s_autogen___1(struct __anonymous9 *___dst__R13s__anonymous9_1, signed short int __i__s_1);
 static inline void ___constructor__F_R13s__anonymous9_autogen___1(struct __anonymous9 *___dst__R13s__anonymous9_1){
     ((void)((*___dst__R13s__anonymous9_1).__i__s_1) /* ?{} */);
@@ -274,6 +284,6 @@
     struct __anonymous9 ___ret__13s__anonymous9_1;
     ((void)((*___dst__R13s__anonymous9_1).__i__s_1=___src__13s__anonymous9_1.__i__s_1));
-    ((void)___constructor__F_R13s__anonymous913s__anonymous9_autogen___1((&___ret__13s__anonymous9_1), ___src__13s__anonymous9_1));
-    return ((struct __anonymous9 )___ret__13s__anonymous9_1);
+    ((void)___constructor__F_R13s__anonymous913s__anonymous9_autogen___1((&___ret__13s__anonymous9_1), (*___dst__R13s__anonymous9_1)));
+    return ___ret__13s__anonymous9_1;
 }
 static inline void ___constructor__F_R13s__anonymous9s_autogen___1(struct __anonymous9 *___dst__R13s__anonymous9_1, signed short int __i__s_1){
@@ -288,4 +298,5 @@
 static inline void ___destructor__F_R14s__anonymous10_autogen___1(struct __anonymous10 *___dst__R14s__anonymous10_1);
 static inline struct __anonymous10 ___operator_assign__F14s__anonymous10_R14s__anonymous1014s__anonymous10_autogen___1(struct __anonymous10 *___dst__R14s__anonymous10_1, struct __anonymous10 ___src__14s__anonymous10_1);
+static inline void ___constructor__F_R14s__anonymous10s_autogen___1(struct __anonymous10 *___dst__R14s__anonymous10_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous10_autogen___1(struct __anonymous10 *___dst__R14s__anonymous10_1){
     ((void)((*___dst__R14s__anonymous10_1).__i__s_1) /* ?{} */);
@@ -300,6 +311,6 @@
     struct __anonymous10 ___ret__14s__anonymous10_1;
     ((void)((*___dst__R14s__anonymous10_1).__i__s_1=___src__14s__anonymous10_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1014s__anonymous10_autogen___1((&___ret__14s__anonymous10_1), ___src__14s__anonymous10_1));
-    return ((struct __anonymous10 )___ret__14s__anonymous10_1);
+    ((void)___constructor__F_R14s__anonymous1014s__anonymous10_autogen___1((&___ret__14s__anonymous10_1), (*___dst__R14s__anonymous10_1)));
+    return ___ret__14s__anonymous10_1;
 }
 static inline void ___constructor__F_R14s__anonymous10s_autogen___1(struct __anonymous10 *___dst__R14s__anonymous10_1, signed short int __i__s_1){
@@ -314,4 +325,5 @@
 static inline void ___destructor__F_R14s__anonymous11_autogen___1(struct __anonymous11 *___dst__R14s__anonymous11_1);
 static inline struct __anonymous11 ___operator_assign__F14s__anonymous11_R14s__anonymous1114s__anonymous11_autogen___1(struct __anonymous11 *___dst__R14s__anonymous11_1, struct __anonymous11 ___src__14s__anonymous11_1);
+static inline void ___constructor__F_R14s__anonymous11s_autogen___1(struct __anonymous11 *___dst__R14s__anonymous11_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous11_autogen___1(struct __anonymous11 *___dst__R14s__anonymous11_1){
     ((void)((*___dst__R14s__anonymous11_1).__i__s_1) /* ?{} */);
@@ -326,6 +338,6 @@
     struct __anonymous11 ___ret__14s__anonymous11_1;
     ((void)((*___dst__R14s__anonymous11_1).__i__s_1=___src__14s__anonymous11_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1114s__anonymous11_autogen___1((&___ret__14s__anonymous11_1), ___src__14s__anonymous11_1));
-    return ((struct __anonymous11 )___ret__14s__anonymous11_1);
+    ((void)___constructor__F_R14s__anonymous1114s__anonymous11_autogen___1((&___ret__14s__anonymous11_1), (*___dst__R14s__anonymous11_1)));
+    return ___ret__14s__anonymous11_1;
 }
 static inline void ___constructor__F_R14s__anonymous11s_autogen___1(struct __anonymous11 *___dst__R14s__anonymous11_1, signed short int __i__s_1){
@@ -340,4 +352,5 @@
 static inline void ___destructor__F_R14s__anonymous12_autogen___1(struct __anonymous12 *___dst__R14s__anonymous12_1);
 static inline struct __anonymous12 ___operator_assign__F14s__anonymous12_R14s__anonymous1214s__anonymous12_autogen___1(struct __anonymous12 *___dst__R14s__anonymous12_1, struct __anonymous12 ___src__14s__anonymous12_1);
+static inline void ___constructor__F_R14s__anonymous12s_autogen___1(struct __anonymous12 *___dst__R14s__anonymous12_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous12_autogen___1(struct __anonymous12 *___dst__R14s__anonymous12_1){
     ((void)((*___dst__R14s__anonymous12_1).__i__s_1) /* ?{} */);
@@ -352,6 +365,6 @@
     struct __anonymous12 ___ret__14s__anonymous12_1;
     ((void)((*___dst__R14s__anonymous12_1).__i__s_1=___src__14s__anonymous12_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1214s__anonymous12_autogen___1((&___ret__14s__anonymous12_1), ___src__14s__anonymous12_1));
-    return ((struct __anonymous12 )___ret__14s__anonymous12_1);
+    ((void)___constructor__F_R14s__anonymous1214s__anonymous12_autogen___1((&___ret__14s__anonymous12_1), (*___dst__R14s__anonymous12_1)));
+    return ___ret__14s__anonymous12_1;
 }
 static inline void ___constructor__F_R14s__anonymous12s_autogen___1(struct __anonymous12 *___dst__R14s__anonymous12_1, signed short int __i__s_1){
@@ -366,4 +379,5 @@
 static inline void ___destructor__F_R14s__anonymous13_autogen___1(struct __anonymous13 *___dst__R14s__anonymous13_1);
 static inline struct __anonymous13 ___operator_assign__F14s__anonymous13_R14s__anonymous1314s__anonymous13_autogen___1(struct __anonymous13 *___dst__R14s__anonymous13_1, struct __anonymous13 ___src__14s__anonymous13_1);
+static inline void ___constructor__F_R14s__anonymous13s_autogen___1(struct __anonymous13 *___dst__R14s__anonymous13_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous13_autogen___1(struct __anonymous13 *___dst__R14s__anonymous13_1){
     ((void)((*___dst__R14s__anonymous13_1).__i__s_1) /* ?{} */);
@@ -378,6 +392,6 @@
     struct __anonymous13 ___ret__14s__anonymous13_1;
     ((void)((*___dst__R14s__anonymous13_1).__i__s_1=___src__14s__anonymous13_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1314s__anonymous13_autogen___1((&___ret__14s__anonymous13_1), ___src__14s__anonymous13_1));
-    return ((struct __anonymous13 )___ret__14s__anonymous13_1);
+    ((void)___constructor__F_R14s__anonymous1314s__anonymous13_autogen___1((&___ret__14s__anonymous13_1), (*___dst__R14s__anonymous13_1)));
+    return ___ret__14s__anonymous13_1;
 }
 static inline void ___constructor__F_R14s__anonymous13s_autogen___1(struct __anonymous13 *___dst__R14s__anonymous13_1, signed short int __i__s_1){
@@ -392,4 +406,5 @@
 static inline void ___destructor__F_R14s__anonymous14_autogen___1(struct __anonymous14 *___dst__R14s__anonymous14_1);
 static inline struct __anonymous14 ___operator_assign__F14s__anonymous14_R14s__anonymous1414s__anonymous14_autogen___1(struct __anonymous14 *___dst__R14s__anonymous14_1, struct __anonymous14 ___src__14s__anonymous14_1);
+static inline void ___constructor__F_R14s__anonymous14s_autogen___1(struct __anonymous14 *___dst__R14s__anonymous14_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous14_autogen___1(struct __anonymous14 *___dst__R14s__anonymous14_1){
     ((void)((*___dst__R14s__anonymous14_1).__i__s_1) /* ?{} */);
@@ -404,6 +419,6 @@
     struct __anonymous14 ___ret__14s__anonymous14_1;
     ((void)((*___dst__R14s__anonymous14_1).__i__s_1=___src__14s__anonymous14_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1414s__anonymous14_autogen___1((&___ret__14s__anonymous14_1), ___src__14s__anonymous14_1));
-    return ((struct __anonymous14 )___ret__14s__anonymous14_1);
+    ((void)___constructor__F_R14s__anonymous1414s__anonymous14_autogen___1((&___ret__14s__anonymous14_1), (*___dst__R14s__anonymous14_1)));
+    return ___ret__14s__anonymous14_1;
 }
 static inline void ___constructor__F_R14s__anonymous14s_autogen___1(struct __anonymous14 *___dst__R14s__anonymous14_1, signed short int __i__s_1){
@@ -418,4 +433,5 @@
 static inline void ___destructor__F_R14s__anonymous15_autogen___1(struct __anonymous15 *___dst__R14s__anonymous15_1);
 static inline struct __anonymous15 ___operator_assign__F14s__anonymous15_R14s__anonymous1514s__anonymous15_autogen___1(struct __anonymous15 *___dst__R14s__anonymous15_1, struct __anonymous15 ___src__14s__anonymous15_1);
+static inline void ___constructor__F_R14s__anonymous15s_autogen___1(struct __anonymous15 *___dst__R14s__anonymous15_1, signed short int __i__s_1);
 static inline void ___constructor__F_R14s__anonymous15_autogen___1(struct __anonymous15 *___dst__R14s__anonymous15_1){
     ((void)((*___dst__R14s__anonymous15_1).__i__s_1) /* ?{} */);
@@ -430,6 +446,6 @@
     struct __anonymous15 ___ret__14s__anonymous15_1;
     ((void)((*___dst__R14s__anonymous15_1).__i__s_1=___src__14s__anonymous15_1.__i__s_1));
-    ((void)___constructor__F_R14s__anonymous1514s__anonymous15_autogen___1((&___ret__14s__anonymous15_1), ___src__14s__anonymous15_1));
-    return ((struct __anonymous15 )___ret__14s__anonymous15_1);
+    ((void)___constructor__F_R14s__anonymous1514s__anonymous15_autogen___1((&___ret__14s__anonymous15_1), (*___dst__R14s__anonymous15_1)));
+    return ___ret__14s__anonymous15_1;
 }
 static inline void ___constructor__F_R14s__anonymous15s_autogen___1(struct __anonymous15 *___dst__R14s__anonymous15_1, signed short int __i__s_1){
@@ -460,4 +476,5 @@
 static inline void ___destructor__F_R14s__anonymous16_autogen___1(struct __anonymous16 *___dst__R14s__anonymous16_1);
 static inline struct __anonymous16 ___operator_assign__F14s__anonymous16_R14s__anonymous1614s__anonymous16_autogen___1(struct __anonymous16 *___dst__R14s__anonymous16_1, struct __anonymous16 ___src__14s__anonymous16_1);
+static inline void ___constructor__F_R14s__anonymous16i_autogen___1(struct __anonymous16 *___dst__R14s__anonymous16_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous16_autogen___1(struct __anonymous16 *___dst__R14s__anonymous16_1){
     ((void)((*___dst__R14s__anonymous16_1).__i__i_1) /* ?{} */);
@@ -472,6 +489,6 @@
     struct __anonymous16 ___ret__14s__anonymous16_1;
     ((void)((*___dst__R14s__anonymous16_1).__i__i_1=___src__14s__anonymous16_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous1614s__anonymous16_autogen___1((&___ret__14s__anonymous16_1), ___src__14s__anonymous16_1));
-    return ((struct __anonymous16 )___ret__14s__anonymous16_1);
+    ((void)___constructor__F_R14s__anonymous1614s__anonymous16_autogen___1((&___ret__14s__anonymous16_1), (*___dst__R14s__anonymous16_1)));
+    return ___ret__14s__anonymous16_1;
 }
 static inline void ___constructor__F_R14s__anonymous16i_autogen___1(struct __anonymous16 *___dst__R14s__anonymous16_1, signed int __i__i_1){
@@ -486,4 +503,5 @@
 static inline void ___destructor__F_R14s__anonymous17_autogen___1(struct __anonymous17 *___dst__R14s__anonymous17_1);
 static inline struct __anonymous17 ___operator_assign__F14s__anonymous17_R14s__anonymous1714s__anonymous17_autogen___1(struct __anonymous17 *___dst__R14s__anonymous17_1, struct __anonymous17 ___src__14s__anonymous17_1);
+static inline void ___constructor__F_R14s__anonymous17i_autogen___1(struct __anonymous17 *___dst__R14s__anonymous17_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous17_autogen___1(struct __anonymous17 *___dst__R14s__anonymous17_1){
     ((void)((*___dst__R14s__anonymous17_1).__i__i_1) /* ?{} */);
@@ -498,6 +516,6 @@
     struct __anonymous17 ___ret__14s__anonymous17_1;
     ((void)((*___dst__R14s__anonymous17_1).__i__i_1=___src__14s__anonymous17_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous1714s__anonymous17_autogen___1((&___ret__14s__anonymous17_1), ___src__14s__anonymous17_1));
-    return ((struct __anonymous17 )___ret__14s__anonymous17_1);
+    ((void)___constructor__F_R14s__anonymous1714s__anonymous17_autogen___1((&___ret__14s__anonymous17_1), (*___dst__R14s__anonymous17_1)));
+    return ___ret__14s__anonymous17_1;
 }
 static inline void ___constructor__F_R14s__anonymous17i_autogen___1(struct __anonymous17 *___dst__R14s__anonymous17_1, signed int __i__i_1){
@@ -512,4 +530,5 @@
 static inline void ___destructor__F_R14s__anonymous18_autogen___1(struct __anonymous18 *___dst__R14s__anonymous18_1);
 static inline struct __anonymous18 ___operator_assign__F14s__anonymous18_R14s__anonymous1814s__anonymous18_autogen___1(struct __anonymous18 *___dst__R14s__anonymous18_1, struct __anonymous18 ___src__14s__anonymous18_1);
+static inline void ___constructor__F_R14s__anonymous18i_autogen___1(struct __anonymous18 *___dst__R14s__anonymous18_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous18_autogen___1(struct __anonymous18 *___dst__R14s__anonymous18_1){
     ((void)((*___dst__R14s__anonymous18_1).__i__i_1) /* ?{} */);
@@ -524,6 +543,6 @@
     struct __anonymous18 ___ret__14s__anonymous18_1;
     ((void)((*___dst__R14s__anonymous18_1).__i__i_1=___src__14s__anonymous18_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous1814s__anonymous18_autogen___1((&___ret__14s__anonymous18_1), ___src__14s__anonymous18_1));
-    return ((struct __anonymous18 )___ret__14s__anonymous18_1);
+    ((void)___constructor__F_R14s__anonymous1814s__anonymous18_autogen___1((&___ret__14s__anonymous18_1), (*___dst__R14s__anonymous18_1)));
+    return ___ret__14s__anonymous18_1;
 }
 static inline void ___constructor__F_R14s__anonymous18i_autogen___1(struct __anonymous18 *___dst__R14s__anonymous18_1, signed int __i__i_1){
@@ -538,4 +557,5 @@
 static inline void ___destructor__F_R14s__anonymous19_autogen___1(struct __anonymous19 *___dst__R14s__anonymous19_1);
 static inline struct __anonymous19 ___operator_assign__F14s__anonymous19_R14s__anonymous1914s__anonymous19_autogen___1(struct __anonymous19 *___dst__R14s__anonymous19_1, struct __anonymous19 ___src__14s__anonymous19_1);
+static inline void ___constructor__F_R14s__anonymous19i_autogen___1(struct __anonymous19 *___dst__R14s__anonymous19_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous19_autogen___1(struct __anonymous19 *___dst__R14s__anonymous19_1){
     ((void)((*___dst__R14s__anonymous19_1).__i__i_1) /* ?{} */);
@@ -550,6 +570,6 @@
     struct __anonymous19 ___ret__14s__anonymous19_1;
     ((void)((*___dst__R14s__anonymous19_1).__i__i_1=___src__14s__anonymous19_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous1914s__anonymous19_autogen___1((&___ret__14s__anonymous19_1), ___src__14s__anonymous19_1));
-    return ((struct __anonymous19 )___ret__14s__anonymous19_1);
+    ((void)___constructor__F_R14s__anonymous1914s__anonymous19_autogen___1((&___ret__14s__anonymous19_1), (*___dst__R14s__anonymous19_1)));
+    return ___ret__14s__anonymous19_1;
 }
 static inline void ___constructor__F_R14s__anonymous19i_autogen___1(struct __anonymous19 *___dst__R14s__anonymous19_1, signed int __i__i_1){
@@ -564,4 +584,5 @@
 static inline void ___destructor__F_R14s__anonymous20_autogen___1(struct __anonymous20 *___dst__R14s__anonymous20_1);
 static inline struct __anonymous20 ___operator_assign__F14s__anonymous20_R14s__anonymous2014s__anonymous20_autogen___1(struct __anonymous20 *___dst__R14s__anonymous20_1, struct __anonymous20 ___src__14s__anonymous20_1);
+static inline void ___constructor__F_R14s__anonymous20i_autogen___1(struct __anonymous20 *___dst__R14s__anonymous20_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous20_autogen___1(struct __anonymous20 *___dst__R14s__anonymous20_1){
     ((void)((*___dst__R14s__anonymous20_1).__i__i_1) /* ?{} */);
@@ -576,6 +597,6 @@
     struct __anonymous20 ___ret__14s__anonymous20_1;
     ((void)((*___dst__R14s__anonymous20_1).__i__i_1=___src__14s__anonymous20_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous2014s__anonymous20_autogen___1((&___ret__14s__anonymous20_1), ___src__14s__anonymous20_1));
-    return ((struct __anonymous20 )___ret__14s__anonymous20_1);
+    ((void)___constructor__F_R14s__anonymous2014s__anonymous20_autogen___1((&___ret__14s__anonymous20_1), (*___dst__R14s__anonymous20_1)));
+    return ___ret__14s__anonymous20_1;
 }
 static inline void ___constructor__F_R14s__anonymous20i_autogen___1(struct __anonymous20 *___dst__R14s__anonymous20_1, signed int __i__i_1){
@@ -590,4 +611,5 @@
 static inline void ___destructor__F_R14s__anonymous21_autogen___1(struct __anonymous21 *___dst__R14s__anonymous21_1);
 static inline struct __anonymous21 ___operator_assign__F14s__anonymous21_R14s__anonymous2114s__anonymous21_autogen___1(struct __anonymous21 *___dst__R14s__anonymous21_1, struct __anonymous21 ___src__14s__anonymous21_1);
+static inline void ___constructor__F_R14s__anonymous21i_autogen___1(struct __anonymous21 *___dst__R14s__anonymous21_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous21_autogen___1(struct __anonymous21 *___dst__R14s__anonymous21_1){
     ((void)((*___dst__R14s__anonymous21_1).__i__i_1) /* ?{} */);
@@ -602,6 +624,6 @@
     struct __anonymous21 ___ret__14s__anonymous21_1;
     ((void)((*___dst__R14s__anonymous21_1).__i__i_1=___src__14s__anonymous21_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous2114s__anonymous21_autogen___1((&___ret__14s__anonymous21_1), ___src__14s__anonymous21_1));
-    return ((struct __anonymous21 )___ret__14s__anonymous21_1);
+    ((void)___constructor__F_R14s__anonymous2114s__anonymous21_autogen___1((&___ret__14s__anonymous21_1), (*___dst__R14s__anonymous21_1)));
+    return ___ret__14s__anonymous21_1;
 }
 static inline void ___constructor__F_R14s__anonymous21i_autogen___1(struct __anonymous21 *___dst__R14s__anonymous21_1, signed int __i__i_1){
@@ -616,4 +638,5 @@
 static inline void ___destructor__F_R14s__anonymous22_autogen___1(struct __anonymous22 *___dst__R14s__anonymous22_1);
 static inline struct __anonymous22 ___operator_assign__F14s__anonymous22_R14s__anonymous2214s__anonymous22_autogen___1(struct __anonymous22 *___dst__R14s__anonymous22_1, struct __anonymous22 ___src__14s__anonymous22_1);
+static inline void ___constructor__F_R14s__anonymous22i_autogen___1(struct __anonymous22 *___dst__R14s__anonymous22_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous22_autogen___1(struct __anonymous22 *___dst__R14s__anonymous22_1){
     ((void)((*___dst__R14s__anonymous22_1).__i__i_1) /* ?{} */);
@@ -628,6 +651,6 @@
     struct __anonymous22 ___ret__14s__anonymous22_1;
     ((void)((*___dst__R14s__anonymous22_1).__i__i_1=___src__14s__anonymous22_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous2214s__anonymous22_autogen___1((&___ret__14s__anonymous22_1), ___src__14s__anonymous22_1));
-    return ((struct __anonymous22 )___ret__14s__anonymous22_1);
+    ((void)___constructor__F_R14s__anonymous2214s__anonymous22_autogen___1((&___ret__14s__anonymous22_1), (*___dst__R14s__anonymous22_1)));
+    return ___ret__14s__anonymous22_1;
 }
 static inline void ___constructor__F_R14s__anonymous22i_autogen___1(struct __anonymous22 *___dst__R14s__anonymous22_1, signed int __i__i_1){
@@ -642,4 +665,5 @@
 static inline void ___destructor__F_R14s__anonymous23_autogen___1(struct __anonymous23 *___dst__R14s__anonymous23_1);
 static inline struct __anonymous23 ___operator_assign__F14s__anonymous23_R14s__anonymous2314s__anonymous23_autogen___1(struct __anonymous23 *___dst__R14s__anonymous23_1, struct __anonymous23 ___src__14s__anonymous23_1);
+static inline void ___constructor__F_R14s__anonymous23i_autogen___1(struct __anonymous23 *___dst__R14s__anonymous23_1, signed int __i__i_1);
 static inline void ___constructor__F_R14s__anonymous23_autogen___1(struct __anonymous23 *___dst__R14s__anonymous23_1){
     ((void)((*___dst__R14s__anonymous23_1).__i__i_1) /* ?{} */);
@@ -654,6 +678,6 @@
     struct __anonymous23 ___ret__14s__anonymous23_1;
     ((void)((*___dst__R14s__anonymous23_1).__i__i_1=___src__14s__anonymous23_1.__i__i_1));
-    ((void)___constructor__F_R14s__anonymous2314s__anonymous23_autogen___1((&___ret__14s__anonymous23_1), ___src__14s__anonymous23_1));
-    return ((struct __anonymous23 )___ret__14s__anonymous23_1);
+    ((void)___constructor__F_R14s__anonymous2314s__anonymous23_autogen___1((&___ret__14s__anonymous23_1), (*___dst__R14s__anonymous23_1)));
+    return ___ret__14s__anonymous23_1;
 }
 static inline void ___constructor__F_R14s__anonymous23i_autogen___1(struct __anonymous23 *___dst__R14s__anonymous23_1, signed int __i__i_1){
@@ -672,7 +696,7 @@
     __attribute__ ((unused)) signed int ___retval_main__i_1;
     ((void)(___retval_main__i_1=((signed int )0)) /* ?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
     ((void)(___retval_main__i_1=0) /* ?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi_iPPCc__1(argc, argv); }
@@ -689,4 +713,4 @@
     ((void)(___retval_main__i_1=(((void)(_tmp_cp_ret0=invoke_main(__argc__i_1, __argv__PPc_1, __envp__PPc_1))) , _tmp_cp_ret0)) /* ?{} */);
     ((void)(_tmp_cp_ret0) /* ^?{} */);
-    return ((signed int )___retval_main__i_1);
-}
+    return ___retval_main__i_1;
+}
Index: src/tests/.expect/64/extension.txt
===================================================================
--- src/tests/.expect/64/extension.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/64/extension.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -17,4 +17,7 @@
 static inline void ___destructor__F_R2sS_autogen___1(struct S *___dst__R2sS_1);
 static inline struct S ___operator_assign__F2sS_R2sS2sS_autogen___1(struct S *___dst__R2sS_1, struct S ___src__2sS_1);
+static inline void ___constructor__F_R2sSi_autogen___1(struct S *___dst__R2sS_1, signed int __a__i_1);
+static inline void ___constructor__F_R2sSii_autogen___1(struct S *___dst__R2sS_1, signed int __a__i_1, signed int __b__i_1);
+static inline void ___constructor__F_R2sSiii_autogen___1(struct S *___dst__R2sS_1, signed int __a__i_1, signed int __b__i_1, signed int __c__i_1);
 static inline void ___constructor__F_R2sS_autogen___1(struct S *___dst__R2sS_1){
     ((void)((*___dst__R2sS_1).__a__i_1) /* ?{} */);
@@ -37,6 +40,6 @@
     ((void)((*___dst__R2sS_1).__b__i_1=___src__2sS_1.__b__i_1));
     ((void)((*___dst__R2sS_1).__c__i_1=___src__2sS_1.__c__i_1));
-    ((void)___constructor__F_R2sS2sS_autogen___1((&___ret__2sS_1), ___src__2sS_1));
-    return ((struct S )___ret__2sS_1);
+    ((void)___constructor__F_R2sS2sS_autogen___1((&___ret__2sS_1), (*___dst__R2sS_1)));
+    return ___ret__2sS_1;
 }
 static inline void ___constructor__F_R2sSi_autogen___1(struct S *___dst__R2sS_1, signed int __a__i_1){
@@ -60,4 +63,9 @@
     __extension__ signed int __c__i_1;
 };
+static inline void ___constructor__F_R2uU_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1);
+static inline void ___constructor__F_R2uU2uU_autogen___1(union U *___dst__R2uU_1, union U ___src__2uU_1);
+static inline void ___destructor__F_R2uU_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1);
+static inline union U ___operator_assign__F2uU_R2uU2uU_autogen___1(union U *___dst__R2uU_1, union U ___src__2uU_1);
+static inline void ___constructor__F_R2uUi_autogen___1(union U *___dst__R2uU_1, signed int __a__i_1);
 static inline void ___constructor__F_R2uU_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1){
 }
@@ -70,9 +78,9 @@
     union U ___ret__2uU_1;
     ((void)__builtin_memcpy(((void *)___dst__R2uU_1), ((const void *)(&___src__2uU_1)), sizeof(union U )));
-    ((void)___constructor__F_R2uU2uU_autogen___1((&___ret__2uU_1), ___src__2uU_1));
-    return ((union U )___ret__2uU_1);
-}
-static inline void ___constructor__F_R2uUi_autogen___1(__attribute__ ((unused)) union U *___dst__R2uU_1, signed int __src__i_1){
-    ((void)__builtin_memcpy(((void *)___dst__R2uU_1), ((const void *)(&__src__i_1)), sizeof(signed int )));
+    ((void)___constructor__F_R2uU2uU_autogen___1((&___ret__2uU_1), (*___dst__R2uU_1)));
+    return ___ret__2uU_1;
+}
+static inline void ___constructor__F_R2uUi_autogen___1(union U *___dst__R2uU_1, signed int __a__i_1){
+    ((void)__builtin_memcpy(((void *)___dst__R2uU_1), ((const void *)(&__a__i_1)), sizeof(signed int )));
 }
 __extension__ enum E {
@@ -94,5 +102,88 @@
         __extension__ signed int *__z__Pi_2;
     };
-    signed int __i__i_2 = ((signed int )(__extension__ __a__i_1+__extension__ 3));
+    inline void ___constructor__F_R2sS_autogen___2(struct S *___dst__R2sS_2){
+        ((void)((*___dst__R2sS_2).__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sS2sS_autogen___2(struct S *___dst__R2sS_2, struct S ___src__2sS_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=___src__2sS_2.__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=___src__2sS_2.__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=___src__2sS_2.__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=___src__2sS_2.__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2=___src__2sS_2.__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2=___src__2sS_2.__z__Pi_2) /* ?{} */);
+    }
+    inline void ___destructor__F_R2sS_autogen___2(struct S *___dst__R2sS_2){
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2) /* ^?{} */);
+        ((void)((*___dst__R2sS_2).__a__i_2) /* ^?{} */);
+    }
+    inline struct S ___operator_assign__F2sS_R2sS2sS_autogen___2(struct S *___dst__R2sS_2, struct S ___src__2sS_2){
+        struct S ___ret__2sS_2;
+        ((void)((*___dst__R2sS_2).__a__i_2=___src__2sS_2.__a__i_2));
+        ((void)((*___dst__R2sS_2).__b__i_2=___src__2sS_2.__b__i_2));
+        ((void)((*___dst__R2sS_2).__c__i_2=___src__2sS_2.__c__i_2));
+        ((void)((*___dst__R2sS_2).__x__Pi_2=___src__2sS_2.__x__Pi_2));
+        ((void)((*___dst__R2sS_2).__y__Pi_2=___src__2sS_2.__y__Pi_2));
+        ((void)((*___dst__R2sS_2).__z__Pi_2=___src__2sS_2.__z__Pi_2));
+        ((void)___constructor__F_R2sS2sS_autogen___2((&___ret__2sS_2), (*___dst__R2sS_2)));
+        return ___ret__2sS_2;
+    }
+    inline void ___constructor__F_R2sSi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSii_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiii_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiiiPi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2, signed int *__x__Pi_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiiiPiPi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2, signed int *__x__Pi_2, signed int *__y__Pi_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2=__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2) /* ?{} */);
+    }
+    inline void ___constructor__F_R2sSiiiPiPiPi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2, signed int __b__i_2, signed int __c__i_2, signed int *__x__Pi_2, signed int *__y__Pi_2, signed int *__z__Pi_2){
+        ((void)((*___dst__R2sS_2).__a__i_2=__a__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__b__i_2=__b__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__x__Pi_2=__x__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__y__Pi_2=__y__Pi_2) /* ?{} */);
+        ((void)((*___dst__R2sS_2).__z__Pi_2=__z__Pi_2) /* ?{} */);
+    }
+    signed int __i__i_2 = (__extension__ __a__i_1+__extension__ 3);
     ((void)__extension__ 3);
     ((void)__extension__ __a__i_1);
Index: src/tests/.expect/64/gccExtensions.txt
===================================================================
--- src/tests/.expect/64/gccExtensions.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/64/gccExtensions.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -63,6 +63,6 @@
         ((void)((*___dst__R2sS_2).__b__i_2=___src__2sS_2.__b__i_2));
         ((void)((*___dst__R2sS_2).__c__i_2=___src__2sS_2.__c__i_2));
-        ((void)___constructor__F_R2sS2sS_autogen___2((&___ret__2sS_2), ___src__2sS_2));
-        return ((struct S )___ret__2sS_2);
+        ((void)___constructor__F_R2sS2sS_autogen___2((&___ret__2sS_2), (*___dst__R2sS_2)));
+        return ___ret__2sS_2;
     }
     inline void ___constructor__F_R2sSi_autogen___2(struct S *___dst__R2sS_2, signed int __a__i_2){
@@ -81,5 +81,5 @@
         ((void)((*___dst__R2sS_2).__c__i_2=__c__i_2) /* ?{} */);
     }
-    signed int __i__i_2 = ((signed int )__extension__ 3);
+    signed int __i__i_2 = __extension__ 3;
     __extension__ signed int __a__i_2;
     __extension__ signed int __b__i_2;
@@ -113,6 +113,6 @@
         struct s2 ___ret__3ss2_2;
         ((void)((*___dst__R3ss2_2).__i__i_2=___src__3ss2_2.__i__i_2));
-        ((void)___constructor__F_R3ss23ss2_autogen___2((&___ret__3ss2_2), ___src__3ss2_2));
-        return ((struct s2 )___ret__3ss2_2);
+        ((void)___constructor__F_R3ss23ss2_autogen___2((&___ret__3ss2_2), (*___dst__R3ss2_2)));
+        return ___ret__3ss2_2;
     }
     inline void ___constructor__F_R3ss2i_autogen___2(struct s2 *___dst__R3ss2_2, signed int __i__i_2){
@@ -134,6 +134,6 @@
         struct s3 ___ret__3ss3_2;
         ((void)((*___dst__R3ss3_2).__i__i_2=___src__3ss3_2.__i__i_2));
-        ((void)___constructor__F_R3ss33ss3_autogen___2((&___ret__3ss3_2), ___src__3ss3_2));
-        return ((struct s3 )___ret__3ss3_2);
+        ((void)___constructor__F_R3ss33ss3_autogen___2((&___ret__3ss3_2), (*___dst__R3ss3_2)));
+        return ___ret__3ss3_2;
     }
     inline void ___constructor__F_R3ss3i_autogen___2(struct s3 *___dst__R3ss3_2, signed int __i__i_2){
@@ -157,6 +157,6 @@
         struct s4 ___ret__3ss4_2;
         ((void)((*___dst__R3ss4_2).__i__i_2=___src__3ss4_2.__i__i_2));
-        ((void)___constructor__F_R3ss43ss4_autogen___2((&___ret__3ss4_2), ___src__3ss4_2));
-        return ((struct s4 )___ret__3ss4_2);
+        ((void)___constructor__F_R3ss43ss4_autogen___2((&___ret__3ss4_2), (*___dst__R3ss4_2)));
+        return ___ret__3ss4_2;
     }
     inline void ___constructor__F_R3ss4i_autogen___2(struct s4 *___dst__R3ss4_2, signed int __i__i_2){
@@ -169,7 +169,7 @@
     signed int __m3__A0A0i_2[((unsigned long int )10)][((unsigned long int )10)];
     ((void)(___retval_main__i_1=((signed int )0)) /* ?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
     ((void)(___retval_main__i_1=0) /* ?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi_iPPCc__1(argc, argv); }
@@ -186,4 +186,4 @@
     ((void)(___retval_main__i_1=(((void)(_tmp_cp_ret0=invoke_main(__argc__i_1, __argv__PPc_1, __envp__PPc_1))) , _tmp_cp_ret0)) /* ?{} */);
     ((void)(_tmp_cp_ret0) /* ^?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
 }
Index: src/tests/.expect/64/literals.txt
===================================================================
--- src/tests/.expect/64/literals.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/64/literals.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -5,6 +5,6 @@
 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
 extern signed int printf(const char *__restrict __format, ...);
-void __for_each__A2_0_0_0____operator_assign__PFt0_Rt0t0____constructor__PF_Rt0____constructor__PF_Rt0t0____destructor__PF_Rt0____operator_assign__PFt1_Rt1t1____constructor__PF_Rt1____constructor__PF_Rt1t1____destructor__PF_Rt1____operator_preincr__PFt0_Rt0____operator_predecr__PFt0_Rt0____operator_equal__PFi_t0t0____operator_notequal__PFi_t0t0____operator_deref__PFRt1_t0__F_t0t0PF_t1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object0)(), void *__anonymous_object1), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object2)(), void *__anonymous_object3), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object4)(), void *__anonymous_object5, void *__anonymous_object6), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object7)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object8), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object9)(), void *__anonymous_object10, void *__anonymous_object11), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object12)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object13, void *__anonymous_object14), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object15)(), void *__anonymous_object16, void *__anonymous_object17), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object18)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object19, void *__anonymous_object20), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object21, void *__anonymous_object22), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object23), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object24, void *__anonymous_object25), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object26), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object27, void *__anonymous_object28), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object29), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object30, void *__anonymous_object31), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object32), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object33), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object34), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object35, void *__anonymous_object36), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object37, void *__anonymous_object38), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object39), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object40));
-void __for_each_reverse__A2_0_0_0____operator_assign__PFt0_Rt0t0____constructor__PF_Rt0____constructor__PF_Rt0t0____destructor__PF_Rt0____operator_assign__PFt1_Rt1t1____constructor__PF_Rt1____constructor__PF_Rt1t1____destructor__PF_Rt1____operator_preincr__PFt0_Rt0____operator_predecr__PFt0_Rt0____operator_equal__PFi_t0t0____operator_notequal__PFi_t0t0____operator_deref__PFRt1_t0__F_t0t0PF_t1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object41)(), void *__anonymous_object42), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object43)(), void *__anonymous_object44), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object45)(), void *__anonymous_object46, void *__anonymous_object47), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object48)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object49), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object50)(), void *__anonymous_object51, void *__anonymous_object52), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object53)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object54, void *__anonymous_object55), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object56)(), void *__anonymous_object57, void *__anonymous_object58), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object59)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object60, void *__anonymous_object61), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object62, void *__anonymous_object63), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object64), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object65, void *__anonymous_object66), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object67), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object68, void *__anonymous_object69), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object70), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object71, void *__anonymous_object72), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object73), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object74), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object75), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object76, void *__anonymous_object77), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object78, void *__anonymous_object79), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object80), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object81));
+void __for_each__A0_2_0_0____operator_assign__PFd0_Rd0d0____constructor__PF_Rd0____constructor__PF_Rd0d0____destructor__PF_Rd0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_preincr__PFd0_Rd0____operator_predecr__PFd0_Rd0____operator_equal__PFi_d0d0____operator_notequal__PFi_d0d0____operator_deref__PFRd1_d0__F_d0d0PF_d1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object0)(), void *__anonymous_object1), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object2)(), void *__anonymous_object3), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object4)(), void *__anonymous_object5, void *__anonymous_object6), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object7)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object8), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object9)(), void *__anonymous_object10, void *__anonymous_object11), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object12)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object13, void *__anonymous_object14), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object15)(), void *__anonymous_object16, void *__anonymous_object17), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object18)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object19, void *__anonymous_object20), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object21, void *__anonymous_object22), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object23), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object24, void *__anonymous_object25), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object26), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object27, void *__anonymous_object28), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object29), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object30, void *__anonymous_object31), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object32), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object33), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object34), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object35, void *__anonymous_object36), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object37, void *__anonymous_object38), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object39), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object40));
+void __for_each_reverse__A0_2_0_0____operator_assign__PFd0_Rd0d0____constructor__PF_Rd0____constructor__PF_Rd0d0____destructor__PF_Rd0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_preincr__PFd0_Rd0____operator_predecr__PFd0_Rd0____operator_equal__PFi_d0d0____operator_notequal__PFi_d0d0____operator_deref__PFRd1_d0__F_d0d0PF_d1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object41)(), void *__anonymous_object42), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object43)(), void *__anonymous_object44), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object45)(), void *__anonymous_object46, void *__anonymous_object47), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object48)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object49), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object50)(), void *__anonymous_object51, void *__anonymous_object52), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object53)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object54, void *__anonymous_object55), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object56)(), void *__anonymous_object57, void *__anonymous_object58), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object59)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object60, void *__anonymous_object61), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object62, void *__anonymous_object63), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object64), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object65, void *__anonymous_object66), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object67), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object68, void *__anonymous_object69), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object70), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object71, void *__anonymous_object72), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object73), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object74), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object75), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object76, void *__anonymous_object77), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object78, void *__anonymous_object79), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object80), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object81));
 void *___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0c__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object82), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object83), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object84, _Bool __anonymous_object85), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object86), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object87, const char *__anonymous_object88), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object89), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object90, _Bool __anonymous_object91), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object92), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object93), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object94), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object95), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object96), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object97, const char *__anonymous_object98), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object99), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object100, const char *__anonymous_object101), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object102), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object103), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object104, const char *__anonymous_object105, unsigned long int __anonymous_object106), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object107, const char *__fmt__PCc_1, ...), void *__anonymous_object108, char __anonymous_object109);
 void *___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Sc__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object110), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object111), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object112, _Bool __anonymous_object113), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object114), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object115, const char *__anonymous_object116), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object117), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object118, _Bool __anonymous_object119), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object120), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object121), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object122), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object123), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object124), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object125, const char *__anonymous_object126), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object127), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object128, const char *__anonymous_object129), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object130), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object131), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object132, const char *__anonymous_object133, unsigned long int __anonymous_object134), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object135, const char *__fmt__PCc_1, ...), void *__anonymous_object136, signed char __anonymous_object137);
@@ -29,5 +29,5 @@
 void *___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCi__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object642), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object643), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object644, _Bool __anonymous_object645), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object646), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object647, const char *__anonymous_object648), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object649), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object650, _Bool __anonymous_object651), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object652), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object653), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object654), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object655), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object656), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object657, const char *__anonymous_object658), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object659), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object660, const char *__anonymous_object661), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object662), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object663), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object664, const char *__anonymous_object665, unsigned long int __anonymous_object666), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object667, const char *__fmt__PCc_1, ...), void *__anonymous_object668, const signed int *__anonymous_object669);
 void *___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCv__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object670), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object671), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object672, _Bool __anonymous_object673), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object674), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object675, const char *__anonymous_object676), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object677), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object678, _Bool __anonymous_object679), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object680), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object681), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object682), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object683), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object684), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object685, const char *__anonymous_object686), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object687), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object688, const char *__anonymous_object689), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object690), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object691), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object692, const char *__anonymous_object693, unsigned long int __anonymous_object694), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object695, const char *__fmt__PCc_1, ...), void *__anonymous_object696, const void *__anonymous_object697);
-void *___operator_bitor__A1_1_0_1____operator_assign__PFt1_Rt1t1____constructor__PF_Rt1____constructor__PF_Rt1t1____destructor__PF_Rt1____operator_bitor__PFPd0_Pd0t1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_bitor__PFPd0_Pd0tVARGS2__FPd0_Pd0t1tVARGS2__1(__attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype7tParams_M_MP)(void (*__anonymous_object698)(), void *__anonymous_object699, void *__anonymous_object700), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype2tT_M_MP)(void (*__anonymous_object701)(), void *__anonymous_object702, void *__anonymous_object703), __attribute__ ((unused)) void (*_adapterF_P2tT2tT__MP)(void (*__anonymous_object704)(), void *__anonymous_object705, void *__anonymous_object706), __attribute__ ((unused)) void (*_adapterF2tT_P2tT2tT_P_MP)(void (*__anonymous_object707)(), __attribute__ ((unused)) void *___retval__operator_assign__2tT_1, void *__anonymous_object708, void *__anonymous_object709), __attribute__ ((unused)) unsigned long int _sizeof_2tT, __attribute__ ((unused)) unsigned long int _alignof_2tT, __attribute__ ((unused)) unsigned long int _sizeof_7tParams, __attribute__ ((unused)) unsigned long int _alignof_7tParams, __attribute__ ((unused)) void *(*___operator_assign__PF2tT_R2tT2tT__1)(void *__anonymous_object710, void *__anonymous_object711), __attribute__ ((unused)) void (*___constructor__PF_R2tT__1)(void *__anonymous_object712), __attribute__ ((unused)) void (*___constructor__PF_R2tT2tT__1)(void *__anonymous_object713, void *__anonymous_object714), __attribute__ ((unused)) void (*___destructor__PF_R2tT__1)(void *__anonymous_object715), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype2tT__1)(void *__anonymous_object716, void *__anonymous_object717), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object718), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object719), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object720, _Bool __anonymous_object721), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object722), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object723, const char *__anonymous_object724), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object725), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object726, _Bool __anonymous_object727), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object728), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object729), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object730), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object731), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object732), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object733, const char *__anonymous_object734), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object735), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object736, const char *__anonymous_object737), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object738), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object739), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object740, const char *__anonymous_object741, unsigned long int __anonymous_object742), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object743, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype7tParams__1)(void *__anonymous_object744, void *__anonymous_object745), void *__os__P7tostype_1, void *__arg__2tT_1, void *__rest__7tParams_1);
+void *___operator_bitor__A0_2_0_1____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_bitor__PFPd0_Pd0d1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_bitor__PFPd0_Pd0tVARGS2__FPd0_Pd0d1tVARGS2__1(__attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype7tParams_M_MP)(void (*__anonymous_object698)(), void *__anonymous_object699, void *__anonymous_object700), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype2tT_M_MP)(void (*__anonymous_object701)(), void *__anonymous_object702, void *__anonymous_object703), __attribute__ ((unused)) void (*_adapterF_P2tT2tT__MP)(void (*__anonymous_object704)(), void *__anonymous_object705, void *__anonymous_object706), __attribute__ ((unused)) void (*_adapterF2tT_P2tT2tT_P_MP)(void (*__anonymous_object707)(), __attribute__ ((unused)) void *___retval__operator_assign__2tT_1, void *__anonymous_object708, void *__anonymous_object709), __attribute__ ((unused)) unsigned long int _sizeof_2tT, __attribute__ ((unused)) unsigned long int _alignof_2tT, __attribute__ ((unused)) unsigned long int _sizeof_7tParams, __attribute__ ((unused)) unsigned long int _alignof_7tParams, __attribute__ ((unused)) void *(*___operator_assign__PF2tT_R2tT2tT__1)(void *__anonymous_object710, void *__anonymous_object711), __attribute__ ((unused)) void (*___constructor__PF_R2tT__1)(void *__anonymous_object712), __attribute__ ((unused)) void (*___constructor__PF_R2tT2tT__1)(void *__anonymous_object713, void *__anonymous_object714), __attribute__ ((unused)) void (*___destructor__PF_R2tT__1)(void *__anonymous_object715), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype2tT__1)(void *__anonymous_object716, void *__anonymous_object717), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object718), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object719), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object720, _Bool __anonymous_object721), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object722), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object723, const char *__anonymous_object724), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object725), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object726, _Bool __anonymous_object727), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object728), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object729), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object730), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object731), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object732), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object733, const char *__anonymous_object734), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object735), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object736, const char *__anonymous_object737), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object738), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object739), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object740, const char *__anonymous_object741, unsigned long int __anonymous_object742), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object743, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype7tParams__1)(void *__anonymous_object744, void *__anonymous_object745), void *__os__P7tostype_1, void *__arg__2tT_1, void *__rest__7tParams_1);
 void *___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object746), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object747), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object748, _Bool __anonymous_object749), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object750), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object751, const char *__anonymous_object752), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object753), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object754, _Bool __anonymous_object755), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object756), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object757), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object758), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object759), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object760), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object761, const char *__anonymous_object762), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object763), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object764, const char *__anonymous_object765), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object766), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object767), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object768, const char *__anonymous_object769, unsigned long int __anonymous_object770), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object771, const char *__fmt__PCc_1, ...), void *__anonymous_object772, void *(*__anonymous_object773)(void *__anonymous_object774));
 void *__endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object775), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object776), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object777, _Bool __anonymous_object778), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object779), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object780, const char *__anonymous_object781), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object782), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object783, _Bool __anonymous_object784), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object785), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object786), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object787), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object788), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object789), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object790, const char *__anonymous_object791), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object792), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object793, const char *__anonymous_object794), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object795), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object796), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object797, const char *__anonymous_object798, unsigned long int __anonymous_object799), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object800, const char *__fmt__PCc_1, ...), void *__anonymous_object801);
@@ -38,6 +38,6 @@
 void *__sepDisable__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object910), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object911), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object912, _Bool __anonymous_object913), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object914), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object915, const char *__anonymous_object916), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object917), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object918, _Bool __anonymous_object919), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object920), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object921), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object922), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object923), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object924), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object925, const char *__anonymous_object926), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object927), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object928, const char *__anonymous_object929), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object930), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object931), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object932, const char *__anonymous_object933, unsigned long int __anonymous_object934), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object935, const char *__fmt__PCc_1, ...), void *__anonymous_object936);
 void *__sepEnable__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(__attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object937), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object938), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object939, _Bool __anonymous_object940), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object941), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object942, const char *__anonymous_object943), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object944), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object945, _Bool __anonymous_object946), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object947), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object948), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object949), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object950), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object951), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object952, const char *__anonymous_object953), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object954), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object955, const char *__anonymous_object956), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object957), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object958), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object959, const char *__anonymous_object960, unsigned long int __anonymous_object961), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object962, const char *__fmt__PCc_1, ...), void *__anonymous_object963);
-void __write__A2_1_0_0____operator_assign__PFt1_Rt1t1____constructor__PF_Rt1____constructor__PF_Rt1t1____destructor__PF_Rt1____operator_bitor__PFPd0_Pd0t1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_assign__PFt2_Rt2t2____constructor__PF_Rt2____constructor__PF_Rt2t2____destructor__PF_Rt2____operator_preincr__PFt2_Rt2____operator_predecr__PFt2_Rt2____operator_equal__PFi_t2t2____operator_notequal__PFi_t2t2____operator_deref__PFRt1_t2__F_t2t2Pd0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object964)(), void *__anonymous_object965), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object966)(), void *__anonymous_object967, void *__anonymous_object968), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object969)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object970), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object971)(), void *__anonymous_object972, void *__anonymous_object973), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object974)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object975, void *__anonymous_object976), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object977)(), void *__anonymous_object978, void *__anonymous_object979), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object980)(), void *__anonymous_object981, void *__anonymous_object982), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object983)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object984, void *__anonymous_object985), __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object986, void *__anonymous_object987), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object988), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object989, void *__anonymous_object990), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object991), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype9telt_type__1)(void *__anonymous_object992, void *__anonymous_object993), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object994), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object995), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object996, _Bool __anonymous_object997), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object998), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object999, const char *__anonymous_object1000), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object1001), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object1002, _Bool __anonymous_object1003), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object1004), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object1005), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object1006), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object1007), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object1008), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object1009, const char *__anonymous_object1010), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object1011), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object1012, const char *__anonymous_object1013), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object1014), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object1015), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object1016, const char *__anonymous_object1017, unsigned long int __anonymous_object1018), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object1019, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object1020, void *__anonymous_object1021), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object1022), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object1023, void *__anonymous_object1024), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object1025), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1026), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1027), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1028, void *__anonymous_object1029), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1030, void *__anonymous_object1031), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object1032), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__P7tostype_1);
-void __write_reverse__A2_1_0_0____operator_assign__PFt1_Rt1t1____constructor__PF_Rt1____constructor__PF_Rt1t1____destructor__PF_Rt1____operator_bitor__PFPd0_Pd0t1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_assign__PFt2_Rt2t2____constructor__PF_Rt2____constructor__PF_Rt2t2____destructor__PF_Rt2____operator_preincr__PFt2_Rt2____operator_predecr__PFt2_Rt2____operator_equal__PFi_t2t2____operator_notequal__PFi_t2t2____operator_deref__PFRt1_t2__F_t2t2Pd0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object1033)(), void *__anonymous_object1034), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object1035)(), void *__anonymous_object1036, void *__anonymous_object1037), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object1038)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object1039), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object1040)(), void *__anonymous_object1041, void *__anonymous_object1042), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object1043)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object1044, void *__anonymous_object1045), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object1046)(), void *__anonymous_object1047, void *__anonymous_object1048), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object1049)(), void *__anonymous_object1050, void *__anonymous_object1051), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object1052)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object1053, void *__anonymous_object1054), __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object1055, void *__anonymous_object1056), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object1057), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object1058, void *__anonymous_object1059), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object1060), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype9telt_type__1)(void *__anonymous_object1061, void *__anonymous_object1062), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object1063), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object1064), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object1065, _Bool __anonymous_object1066), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object1067), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object1068, const char *__anonymous_object1069), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object1070), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object1071, _Bool __anonymous_object1072), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object1073), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object1074), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object1075), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object1076), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object1077), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object1078, const char *__anonymous_object1079), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object1080), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object1081, const char *__anonymous_object1082), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object1083), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object1084), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object1085, const char *__anonymous_object1086, unsigned long int __anonymous_object1087), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object1088, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object1089, void *__anonymous_object1090), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object1091), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object1092, void *__anonymous_object1093), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object1094), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1095), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1096), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1097, void *__anonymous_object1098), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1099, void *__anonymous_object1100), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object1101), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__P7tostype_1);
+void __write__A0_3_0_0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_bitor__PFPd0_Pd0d1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_assign__PFd2_Rd2d2____constructor__PF_Rd2____constructor__PF_Rd2d2____destructor__PF_Rd2____operator_preincr__PFd2_Rd2____operator_predecr__PFd2_Rd2____operator_equal__PFi_d2d2____operator_notequal__PFi_d2d2____operator_deref__PFRd1_d2__F_d2d2Pd0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object964)(), void *__anonymous_object965), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object966)(), void *__anonymous_object967, void *__anonymous_object968), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object969)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object970), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object971)(), void *__anonymous_object972, void *__anonymous_object973), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object974)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object975, void *__anonymous_object976), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object977)(), void *__anonymous_object978, void *__anonymous_object979), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object980)(), void *__anonymous_object981, void *__anonymous_object982), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object983)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object984, void *__anonymous_object985), __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object986, void *__anonymous_object987), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object988), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object989, void *__anonymous_object990), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object991), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype9telt_type__1)(void *__anonymous_object992, void *__anonymous_object993), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object994), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object995), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object996, _Bool __anonymous_object997), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object998), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object999, const char *__anonymous_object1000), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object1001), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object1002, _Bool __anonymous_object1003), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object1004), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object1005), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object1006), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object1007), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object1008), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object1009, const char *__anonymous_object1010), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object1011), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object1012, const char *__anonymous_object1013), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object1014), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object1015), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object1016, const char *__anonymous_object1017, unsigned long int __anonymous_object1018), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object1019, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object1020, void *__anonymous_object1021), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object1022), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object1023, void *__anonymous_object1024), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object1025), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1026), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1027), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1028, void *__anonymous_object1029), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1030, void *__anonymous_object1031), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object1032), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__P7tostype_1);
+void __write_reverse__A0_3_0_0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_bitor__PFPd0_Pd0d1___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc____operator_assign__PFd2_Rd2d2____constructor__PF_Rd2____constructor__PF_Rd2d2____destructor__PF_Rd2____operator_preincr__PFd2_Rd2____operator_predecr__PFd2_Rd2____operator_equal__PFi_d2d2____operator_notequal__PFi_d2d2____operator_deref__PFRd1_d2__F_d2d2Pd0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object1033)(), void *__anonymous_object1034), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object1035)(), void *__anonymous_object1036, void *__anonymous_object1037), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object1038)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object1039), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object1040)(), void *__anonymous_object1041, void *__anonymous_object1042), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object1043)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object1044, void *__anonymous_object1045), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object1046)(), void *__anonymous_object1047, void *__anonymous_object1048), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object1049)(), void *__anonymous_object1050, void *__anonymous_object1051), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object1052)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object1053, void *__anonymous_object1054), __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object1055, void *__anonymous_object1056), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object1057), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object1058, void *__anonymous_object1059), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object1060), __attribute__ ((unused)) void *(*___operator_bitor__PFP7tostype_P7tostype9telt_type__1)(void *__anonymous_object1061, void *__anonymous_object1062), __attribute__ ((unused)) _Bool (*__sepPrt__PFb_P7tostype__1)(void *__anonymous_object1063), __attribute__ ((unused)) void (*__sepReset__PF_P7tostype__1)(void *__anonymous_object1064), __attribute__ ((unused)) void (*__sepReset__PF_P7tostypeb__1)(void *__anonymous_object1065, _Bool __anonymous_object1066), __attribute__ ((unused)) const char *(*__sepGetCur__PFPCc_P7tostype__1)(void *__anonymous_object1067), __attribute__ ((unused)) void (*__sepSetCur__PF_P7tostypePCc__1)(void *__anonymous_object1068, const char *__anonymous_object1069), __attribute__ ((unused)) _Bool (*__getNL__PFb_P7tostype__1)(void *__anonymous_object1070), __attribute__ ((unused)) void (*__setNL__PF_P7tostypeb__1)(void *__anonymous_object1071, _Bool __anonymous_object1072), __attribute__ ((unused)) void (*__sepOn__PF_P7tostype__1)(void *__anonymous_object1073), __attribute__ ((unused)) void (*__sepOff__PF_P7tostype__1)(void *__anonymous_object1074), __attribute__ ((unused)) _Bool (*__sepDisable__PFb_P7tostype__1)(void *__anonymous_object1075), __attribute__ ((unused)) _Bool (*__sepEnable__PFb_P7tostype__1)(void *__anonymous_object1076), __attribute__ ((unused)) const char *(*__sepGet__PFPCc_P7tostype__1)(void *__anonymous_object1077), __attribute__ ((unused)) void (*__sepSet__PF_P7tostypePCc__1)(void *__anonymous_object1078, const char *__anonymous_object1079), __attribute__ ((unused)) const char *(*__sepGetTuple__PFPCc_P7tostype__1)(void *__anonymous_object1080), __attribute__ ((unused)) void (*__sepSetTuple__PF_P7tostypePCc__1)(void *__anonymous_object1081, const char *__anonymous_object1082), __attribute__ ((unused)) signed int (*__fail__PFi_P7tostype__1)(void *__anonymous_object1083), __attribute__ ((unused)) signed int (*__flush__PFi_P7tostype__1)(void *__anonymous_object1084), __attribute__ ((unused)) void (*__open__PF_P7tostypePCcPCc__1)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tostype__1)(void *__os__P7tostype_1), __attribute__ ((unused)) void *(*__write__PFP7tostype_P7tostypePCcUl__1)(void *__anonymous_object1085, const char *__anonymous_object1086, unsigned long int __anonymous_object1087), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tostypePCc__1)(void *__anonymous_object1088, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object1089, void *__anonymous_object1090), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object1091), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object1092, void *__anonymous_object1093), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object1094), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1095), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object1096), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1097, void *__anonymous_object1098), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object1099, void *__anonymous_object1100), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object1101), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__P7tostype_1);
 void *___operator_bitor__A0_1_0_0___fail__PFi_Pd0___eof__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___read__PFPd0_Pd0PcUl___ungetc__PFPd0_Pd0c___fmt__PFi_Pd0PCc__FPd0_Pd0Rc__1(__attribute__ ((unused)) signed int (*__fail__PFi_P7tistype__1)(void *__anonymous_object1102), __attribute__ ((unused)) signed int (*__eof__PFi_P7tistype__1)(void *__anonymous_object1103), __attribute__ ((unused)) void (*__open__PF_P7tistypePCcPCc__1)(void *__is__P7tistype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tistype__1)(void *__is__P7tistype_1), __attribute__ ((unused)) void *(*__read__PFP7tistype_P7tistypePcUl__1)(void *__anonymous_object1104, char *__anonymous_object1105, unsigned long int __anonymous_object1106), __attribute__ ((unused)) void *(*__ungetc__PFP7tistype_P7tistypec__1)(void *__anonymous_object1107, char __anonymous_object1108), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tistypePCc__1)(void *__anonymous_object1109, const char *__fmt__PCc_1, ...), void *__anonymous_object1110, char *__anonymous_object1111);
 void *___operator_bitor__A0_1_0_0___fail__PFi_Pd0___eof__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___read__PFPd0_Pd0PcUl___ungetc__PFPd0_Pd0c___fmt__PFi_Pd0PCc__FPd0_Pd0RSc__1(__attribute__ ((unused)) signed int (*__fail__PFi_P7tistype__1)(void *__anonymous_object1112), __attribute__ ((unused)) signed int (*__eof__PFi_P7tistype__1)(void *__anonymous_object1113), __attribute__ ((unused)) void (*__open__PF_P7tistypePCcPCc__1)(void *__is__P7tistype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tistype__1)(void *__is__P7tistype_1), __attribute__ ((unused)) void *(*__read__PFP7tistype_P7tistypePcUl__1)(void *__anonymous_object1114, char *__anonymous_object1115, unsigned long int __anonymous_object1116), __attribute__ ((unused)) void *(*__ungetc__PFP7tistype_P7tistypec__1)(void *__anonymous_object1117, char __anonymous_object1118), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tistypePCc__1)(void *__anonymous_object1119, const char *__fmt__PCc_1, ...), void *__anonymous_object1120, signed char *__anonymous_object1121);
@@ -64,4 +64,5 @@
 static inline void ___destructor__F_R16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__R16s_Istream_cstrUC_1);
 static inline struct _Istream_cstrUC ___operator_assign__F16s_Istream_cstrUC_R16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__R16s_Istream_cstrUC_1, struct _Istream_cstrUC ___src__16s_Istream_cstrUC_1);
+static inline void ___constructor__F_R16s_Istream_cstrUCPc_autogen___1(struct _Istream_cstrUC *___dst__R16s_Istream_cstrUC_1, char *__s__Pc_1);
 static inline void ___constructor__F_R16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__R16s_Istream_cstrUC_1){
     ((void)((*___dst__R16s_Istream_cstrUC_1).__s__Pc_1) /* ?{} */);
@@ -76,6 +77,6 @@
     struct _Istream_cstrUC ___ret__16s_Istream_cstrUC_1;
     ((void)((*___dst__R16s_Istream_cstrUC_1).__s__Pc_1=___src__16s_Istream_cstrUC_1.__s__Pc_1));
-    ((void)___constructor__F_R16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1((&___ret__16s_Istream_cstrUC_1), ___src__16s_Istream_cstrUC_1));
-    return ((struct _Istream_cstrUC )___ret__16s_Istream_cstrUC_1);
+    ((void)___constructor__F_R16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1((&___ret__16s_Istream_cstrUC_1), (*___dst__R16s_Istream_cstrUC_1)));
+    return ___ret__16s_Istream_cstrUC_1;
 }
 static inline void ___constructor__F_R16s_Istream_cstrUCPc_autogen___1(struct _Istream_cstrUC *___dst__R16s_Istream_cstrUC_1, char *__s__Pc_1){
@@ -92,4 +93,6 @@
 static inline void ___destructor__F_R15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1);
 static inline struct _Istream_cstrC ___operator_assign__F15s_Istream_cstrC_R15s_Istream_cstrC15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1, struct _Istream_cstrC ___src__15s_Istream_cstrC_1);
+static inline void ___constructor__F_R15s_Istream_cstrCPc_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1, char *__s__Pc_1);
+static inline void ___constructor__F_R15s_Istream_cstrCPci_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1, char *__s__Pc_1, signed int __size__i_1);
 static inline void ___constructor__F_R15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1){
     ((void)((*___dst__R15s_Istream_cstrC_1).__s__Pc_1) /* ?{} */);
@@ -108,6 +111,6 @@
     ((void)((*___dst__R15s_Istream_cstrC_1).__s__Pc_1=___src__15s_Istream_cstrC_1.__s__Pc_1));
     ((void)((*___dst__R15s_Istream_cstrC_1).__size__i_1=___src__15s_Istream_cstrC_1.__size__i_1));
-    ((void)___constructor__F_R15s_Istream_cstrC15s_Istream_cstrC_autogen___1((&___ret__15s_Istream_cstrC_1), ___src__15s_Istream_cstrC_1));
-    return ((struct _Istream_cstrC )___ret__15s_Istream_cstrC_1);
+    ((void)___constructor__F_R15s_Istream_cstrC15s_Istream_cstrC_autogen___1((&___ret__15s_Istream_cstrC_1), (*___dst__R15s_Istream_cstrC_1)));
+    return ___ret__15s_Istream_cstrC_1;
 }
 static inline void ___constructor__F_R15s_Istream_cstrCPc_autogen___1(struct _Istream_cstrC *___dst__R15s_Istream_cstrC_1, char *__s__Pc_1){
@@ -122,5 +125,5 @@
 void *___operator_bitor__A0_1_0_0___fail__PFi_Pd0___eof__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___read__PFPd0_Pd0PcUl___ungetc__PFPd0_Pd0c___fmt__PFi_Pd0PCc__FPd0_Pd015s_Istream_cstrC__1(__attribute__ ((unused)) signed int (*__fail__PFi_P7tistype__1)(void *__anonymous_object1284), __attribute__ ((unused)) signed int (*__eof__PFi_P7tistype__1)(void *__anonymous_object1285), __attribute__ ((unused)) void (*__open__PF_P7tistypePCcPCc__1)(void *__is__P7tistype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__PF_P7tistype__1)(void *__is__P7tistype_1), __attribute__ ((unused)) void *(*__read__PFP7tistype_P7tistypePcUl__1)(void *__anonymous_object1286, char *__anonymous_object1287, unsigned long int __anonymous_object1288), __attribute__ ((unused)) void *(*__ungetc__PFP7tistype_P7tistypec__1)(void *__anonymous_object1289, char __anonymous_object1290), __attribute__ ((unused)) signed int (*__fmt__PFi_P7tistypePCc__1)(void *__anonymous_object1291, const char *__fmt__PCc_1, ...), void *__anonymous_object1292, struct _Istream_cstrC __anonymous_object1293);
 enum __anonymous0 {
-    __sepSize__C13e__anonymous0_1 = ((signed int )16),
+    __sepSize__C13e__anonymous0_1 = 16,
 };
 struct ofstream {
@@ -137,4 +140,11 @@
 static inline void ___destructor__F_R9sofstream_autogen___1(struct ofstream *___dst__R9sofstream_1);
 static inline struct ofstream ___operator_assign__F9sofstream_R9sofstream9sofstream_autogen___1(struct ofstream *___dst__R9sofstream_1, struct ofstream ___src__9sofstream_1);
+static inline void ___constructor__F_R9sofstreamPv_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1);
+static inline void ___constructor__F_R9sofstreamPvb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1);
+static inline void ___constructor__F_R9sofstreamPvbb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1);
+static inline void ___constructor__F_R9sofstreamPvbbb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1);
+static inline void ___constructor__F_R9sofstreamPvbbbPCc_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1);
+static inline void ___constructor__F_R9sofstreamPvbbbPCcA0c_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1, char __separator__A0c_1[((unsigned long int )__sepSize__C13e__anonymous0_1)]);
+static inline void ___constructor__F_R9sofstreamPvbbbPCcA0cA0c_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1, char __separator__A0c_1[((unsigned long int )__sepSize__C13e__anonymous0_1)], char __tupleSeparator__A0c_1[((unsigned long int )__sepSize__C13e__anonymous0_1)]);
 static inline void ___constructor__F_R9sofstream_autogen___1(struct ofstream *___dst__R9sofstream_1){
     ((void)((*___dst__R9sofstream_1).__file__Pv_1) /* ?{} */);
@@ -144,5 +154,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index0 = ((signed int )0);
+        signed int _index0 = 0;
         for (;(_index0<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index0))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[((signed long int )_index0)])))) /* ?{} */);
@@ -150,6 +160,7 @@
 
     }
-    {
-        signed int _index1 = ((signed int )0);
+
+    {
+        signed int _index1 = 0;
         for (;(_index1<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index1))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index1)])))) /* ?{} */);
@@ -157,4 +168,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstream9sofstream_autogen___1(struct ofstream *___dst__R9sofstream_1, struct ofstream ___src__9sofstream_1){
@@ -165,5 +177,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1=___src__9sofstream_1.__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index2 = ((signed int )0);
+        signed int _index2 = 0;
         for (;(_index2<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index2))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[((signed long int )_index2)])))=___src__9sofstream_1.__separator__A0c_1[((signed long int )_index2)]) /* ?{} */);
@@ -171,6 +183,7 @@
 
     }
-    {
-        signed int _index3 = ((signed int )0);
+
+    {
+        signed int _index3 = 0;
         for (;(_index3<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index3))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index3)])))=___src__9sofstream_1.__tupleSeparator__A0c_1[((signed long int )_index3)]) /* ?{} */);
@@ -178,8 +191,9 @@
 
     }
+
 }
 static inline void ___destructor__F_R9sofstream_autogen___1(struct ofstream *___dst__R9sofstream_1){
     {
-        signed int _index4 = ((signed int )(((signed int )__sepSize__C13e__anonymous0_1)-1));
+        signed int _index4 = (((signed int )__sepSize__C13e__anonymous0_1)-1);
         for (;(_index4>=0);((void)(--_index4))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index4)])))) /* ^?{} */);
@@ -187,6 +201,7 @@
 
     }
-    {
-        signed int _index5 = ((signed int )(((signed int )__sepSize__C13e__anonymous0_1)-1));
+
+    {
+        signed int _index5 = (((signed int )__sepSize__C13e__anonymous0_1)-1);
         for (;(_index5>=0);((void)(--_index5))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[((signed long int )_index5)])))) /* ^?{} */);
@@ -194,4 +209,5 @@
 
     }
+
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ^?{} */);
     ((void)((*___dst__R9sofstream_1).__sawNL__b_1) /* ^?{} */);
@@ -208,5 +224,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1=___src__9sofstream_1.__sepCur__PCc_1));
     {
-        signed int _index6 = ((signed int )0);
+        signed int _index6 = 0;
         for (;(_index6<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index6))) {
             ((void)((*___dst__R9sofstream_1).__separator__A0c_1[((signed long int )_index6)]=___src__9sofstream_1.__separator__A0c_1[((signed long int )_index6)]));
@@ -216,5 +232,5 @@
 
     {
-        signed int _index7 = ((signed int )0);
+        signed int _index7 = 0;
         for (;(_index7<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index7))) {
             ((void)((*___dst__R9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index7)]=___src__9sofstream_1.__tupleSeparator__A0c_1[((signed long int )_index7)]));
@@ -223,6 +239,6 @@
     }
 
-    ((void)___constructor__F_R9sofstream9sofstream_autogen___1((&___ret__9sofstream_1), ___src__9sofstream_1));
-    return ((struct ofstream )___ret__9sofstream_1);
+    ((void)___constructor__F_R9sofstream9sofstream_autogen___1((&___ret__9sofstream_1), (*___dst__R9sofstream_1)));
+    return ___ret__9sofstream_1;
 }
 static inline void ___constructor__F_R9sofstreamPv_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1){
@@ -233,5 +249,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index8 = ((signed int )0);
+        signed int _index8 = 0;
         for (;(_index8<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index8))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[((signed long int )_index8)])))) /* ?{} */);
@@ -239,6 +255,7 @@
 
     }
-    {
-        signed int _index9 = ((signed int )0);
+
+    {
+        signed int _index9 = 0;
         for (;(_index9<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index9))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index9)])))) /* ?{} */);
@@ -246,4 +263,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1){
@@ -254,5 +272,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index10 = ((signed int )0);
+        signed int _index10 = 0;
         for (;(_index10<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index10))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[((signed long int )_index10)])))) /* ?{} */);
@@ -260,6 +278,7 @@
 
     }
-    {
-        signed int _index11 = ((signed int )0);
+
+    {
+        signed int _index11 = 0;
         for (;(_index11<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index11))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index11)])))) /* ?{} */);
@@ -267,4 +286,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvbb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1){
@@ -275,5 +295,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index12 = ((signed int )0);
+        signed int _index12 = 0;
         for (;(_index12<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index12))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[((signed long int )_index12)])))) /* ?{} */);
@@ -281,6 +301,7 @@
 
     }
-    {
-        signed int _index13 = ((signed int )0);
+
+    {
+        signed int _index13 = 0;
         for (;(_index13<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index13))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index13)])))) /* ?{} */);
@@ -288,4 +309,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvbbb_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1){
@@ -296,5 +318,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index14 = ((signed int )0);
+        signed int _index14 = 0;
         for (;(_index14<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index14))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[((signed long int )_index14)])))) /* ?{} */);
@@ -302,6 +324,7 @@
 
     }
-    {
-        signed int _index15 = ((signed int )0);
+
+    {
+        signed int _index15 = 0;
         for (;(_index15<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index15))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index15)])))) /* ?{} */);
@@ -309,4 +332,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvbbbPCc_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1){
@@ -317,5 +341,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index16 = ((signed int )0);
+        signed int _index16 = 0;
         for (;(_index16<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index16))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[((signed long int )_index16)])))) /* ?{} */);
@@ -323,6 +347,7 @@
 
     }
-    {
-        signed int _index17 = ((signed int )0);
+
+    {
+        signed int _index17 = 0;
         for (;(_index17<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index17))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index17)])))) /* ?{} */);
@@ -330,4 +355,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvbbbPCcA0c_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1, char __separator__A0c_1[((unsigned long int )__sepSize__C13e__anonymous0_1)]){
@@ -338,5 +364,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index18 = ((signed int )0);
+        signed int _index18 = 0;
         for (;(_index18<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index18))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[((signed long int )_index18)])))=__separator__A0c_1[((signed long int )_index18)]) /* ?{} */);
@@ -344,6 +370,7 @@
 
     }
-    {
-        signed int _index19 = ((signed int )0);
+
+    {
+        signed int _index19 = 0;
         for (;(_index19<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index19))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index19)])))) /* ?{} */);
@@ -351,4 +378,5 @@
 
     }
+
 }
 static inline void ___constructor__F_R9sofstreamPvbbbPCcA0cA0c_autogen___1(struct ofstream *___dst__R9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1, char __separator__A0c_1[((unsigned long int )__sepSize__C13e__anonymous0_1)], char __tupleSeparator__A0c_1[((unsigned long int )__sepSize__C13e__anonymous0_1)]){
@@ -359,5 +387,5 @@
     ((void)((*___dst__R9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
     {
-        signed int _index20 = ((signed int )0);
+        signed int _index20 = 0;
         for (;(_index20<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index20))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__separator__A0c_1[((signed long int )_index20)])))=__separator__A0c_1[((signed long int )_index20)]) /* ?{} */);
@@ -365,6 +393,7 @@
 
     }
-    {
-        signed int _index21 = ((signed int )0);
+
+    {
+        signed int _index21 = 0;
         for (;(_index21<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index21))) {
             ((void)((*((char *)(&(*___dst__R9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index21)])))=__tupleSeparator__A0c_1[((signed long int )_index21)]) /* ?{} */);
@@ -372,4 +401,5 @@
 
     }
+
 }
 _Bool __sepPrt__Fb_P9sofstream__1(struct ofstream *__anonymous_object1294);
@@ -404,4 +434,5 @@
 static inline void ___destructor__F_R9sifstream_autogen___1(struct ifstream *___dst__R9sifstream_1);
 static inline struct ifstream ___operator_assign__F9sifstream_R9sifstream9sifstream_autogen___1(struct ifstream *___dst__R9sifstream_1, struct ifstream ___src__9sifstream_1);
+static inline void ___constructor__F_R9sifstreamPv_autogen___1(struct ifstream *___dst__R9sifstream_1, void *__file__Pv_1);
 static inline void ___constructor__F_R9sifstream_autogen___1(struct ifstream *___dst__R9sifstream_1){
     ((void)((*___dst__R9sifstream_1).__file__Pv_1) /* ?{} */);
@@ -416,6 +447,6 @@
     struct ifstream ___ret__9sifstream_1;
     ((void)((*___dst__R9sifstream_1).__file__Pv_1=___src__9sifstream_1.__file__Pv_1));
-    ((void)___constructor__F_R9sifstream9sifstream_autogen___1((&___ret__9sifstream_1), ___src__9sifstream_1));
-    return ((struct ifstream )___ret__9sifstream_1);
+    ((void)___constructor__F_R9sifstream9sifstream_autogen___1((&___ret__9sifstream_1), (*___dst__R9sifstream_1)));
+    return ___ret__9sifstream_1;
 }
 static inline void ___constructor__F_R9sifstreamPv_autogen___1(struct ifstream *___dst__R9sifstream_1, void *__file__Pv_1){
@@ -435,7 +466,7 @@
     struct ofstream *_tmp_cp_ret2;
     __attribute__ ((unused)) struct ofstream *_thunk0(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1322))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1323))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1324, _Bool __anonymous_object1325))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1326))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1327, const char *__anonymous_object1328))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1329))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1330, _Bool __anonymous_object1331))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1332))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1333))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1334))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1335))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1336))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1337, const char *__anonymous_object1338))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1339))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1340, const char *__anonymous_object1341))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1342))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1343))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1344, const char *__anonymous_object1345, unsigned long int __anonymous_object1346))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1347, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret2=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1348))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1349))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1350, _Bool __anonymous_object1351))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1352))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1353, const char *__anonymous_object1354))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1355))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1356, _Bool __anonymous_object1357))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1358))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1359))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1360))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1361))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1362))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1363, const char *__anonymous_object1364))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1365))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1366, const char *__anonymous_object1367))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1368))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1369))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1370, const char *__anonymous_object1371, unsigned long int __anonymous_object1372))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1373, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret1=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0c__1(((_Bool (*)(void *__anonymous_object1374))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1375))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1376, _Bool __anonymous_object1377))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1378))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1379, const char *__anonymous_object1380))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1381))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1382, _Bool __anonymous_object1383))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1384))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1385))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1386))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1387))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1388))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1389, const char *__anonymous_object1390))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1391))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1392, const char *__anonymous_object1393))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1394))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1395))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1396, const char *__anonymous_object1397, unsigned long int __anonymous_object1398))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1399, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret0=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1400))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1401))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1402, _Bool __anonymous_object1403))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1404))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1405, const char *__anonymous_object1406))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1407))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1408, _Bool __anonymous_object1409))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1410))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1411))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1412))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1413))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1414))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1415, const char *__anonymous_object1416))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1417))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1418, const char *__anonymous_object1419))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1420))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1421))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1422, const char *__anonymous_object1423, unsigned long int __anonymous_object1424))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1425, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "char "))) , _tmp_cp_ret0), __v__c_1))) , _tmp_cp_ret1), ((void *(*)(void *__anonymous_object1426))(&_thunk0))))) , _tmp_cp_ret2));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1322))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1323))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1324, _Bool __anonymous_object1325))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1326))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1327, const char *__anonymous_object1328))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1329))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1330, _Bool __anonymous_object1331))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1332))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1333))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1334))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1335))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1336))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1337, const char *__anonymous_object1338))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1339))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1340, const char *__anonymous_object1341))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1342))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1343))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1344, const char *__anonymous_object1345, unsigned long int __anonymous_object1346))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1347, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret2=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1348))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1349))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1350, _Bool __anonymous_object1351))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1352))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1353, const char *__anonymous_object1354))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1355))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1356, _Bool __anonymous_object1357))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1358))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1359))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1360))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1361))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1362))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1363, const char *__anonymous_object1364))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1365))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1366, const char *__anonymous_object1367))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1368))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1369))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1370, const char *__anonymous_object1371, unsigned long int __anonymous_object1372))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1373, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret1=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0c__1(((_Bool (*)(void *__anonymous_object1374))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1375))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1376, _Bool __anonymous_object1377))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1378))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1379, const char *__anonymous_object1380))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1381))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1382, _Bool __anonymous_object1383))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1384))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1385))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1386))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1387))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1388))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1389, const char *__anonymous_object1390))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1391))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1392, const char *__anonymous_object1393))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1394))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1395))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1396, const char *__anonymous_object1397, unsigned long int __anonymous_object1398))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1399, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret0=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1400))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1401))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1402, _Bool __anonymous_object1403))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1404))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1405, const char *__anonymous_object1406))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1407))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1408, _Bool __anonymous_object1409))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1410))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1411))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1412))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1413))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1414))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1415, const char *__anonymous_object1416))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1417))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1418, const char *__anonymous_object1419))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1420))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1421))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1422, const char *__anonymous_object1423, unsigned long int __anonymous_object1424))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1425, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "char "))) , _tmp_cp_ret0)), __v__c_1))) , _tmp_cp_ret1)), ((void *(*)(void *__anonymous_object1426))(&_thunk0))))) , _tmp_cp_ret2));
     ((void)(_tmp_cp_ret0) /* ^?{} */);
     ((void)(_tmp_cp_ret1) /* ^?{} */);
@@ -447,7 +478,7 @@
     struct ofstream *_tmp_cp_ret5;
     __attribute__ ((unused)) struct ofstream *_thunk1(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1427))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1428))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1429, _Bool __anonymous_object1430))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1431))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1432, const char *__anonymous_object1433))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1434))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1435, _Bool __anonymous_object1436))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1437))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1438))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1439))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1440))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1441))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1442, const char *__anonymous_object1443))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1444))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1445, const char *__anonymous_object1446))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1447))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1448))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1449, const char *__anonymous_object1450, unsigned long int __anonymous_object1451))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1452, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret5=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1453))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1454))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1455, _Bool __anonymous_object1456))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1457))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1458, const char *__anonymous_object1459))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1460))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1461, _Bool __anonymous_object1462))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1463))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1464))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1465))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1466))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1467))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1468, const char *__anonymous_object1469))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1470))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1471, const char *__anonymous_object1472))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1473))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1474))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1475, const char *__anonymous_object1476, unsigned long int __anonymous_object1477))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1478, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret4=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Sc__1(((_Bool (*)(void *__anonymous_object1479))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1480))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1481, _Bool __anonymous_object1482))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1483))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1484, const char *__anonymous_object1485))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1486))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1487, _Bool __anonymous_object1488))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1489))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1490))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1491))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1492))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1493))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1494, const char *__anonymous_object1495))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1496))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1497, const char *__anonymous_object1498))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1499))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1500))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1501, const char *__anonymous_object1502, unsigned long int __anonymous_object1503))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1504, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret3=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1505))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1506))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1507, _Bool __anonymous_object1508))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1509))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1510, const char *__anonymous_object1511))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1512))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1513, _Bool __anonymous_object1514))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1515))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1516))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1517))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1518))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1519))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1520, const char *__anonymous_object1521))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1522))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1523, const char *__anonymous_object1524))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1525))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1526))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1527, const char *__anonymous_object1528, unsigned long int __anonymous_object1529))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1530, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "signed char "))) , _tmp_cp_ret3), __v__Sc_1))) , _tmp_cp_ret4), ((void *(*)(void *__anonymous_object1531))(&_thunk1))))) , _tmp_cp_ret5));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1427))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1428))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1429, _Bool __anonymous_object1430))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1431))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1432, const char *__anonymous_object1433))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1434))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1435, _Bool __anonymous_object1436))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1437))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1438))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1439))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1440))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1441))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1442, const char *__anonymous_object1443))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1444))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1445, const char *__anonymous_object1446))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1447))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1448))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1449, const char *__anonymous_object1450, unsigned long int __anonymous_object1451))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1452, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret5=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1453))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1454))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1455, _Bool __anonymous_object1456))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1457))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1458, const char *__anonymous_object1459))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1460))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1461, _Bool __anonymous_object1462))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1463))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1464))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1465))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1466))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1467))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1468, const char *__anonymous_object1469))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1470))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1471, const char *__anonymous_object1472))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1473))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1474))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1475, const char *__anonymous_object1476, unsigned long int __anonymous_object1477))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1478, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret4=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Sc__1(((_Bool (*)(void *__anonymous_object1479))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1480))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1481, _Bool __anonymous_object1482))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1483))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1484, const char *__anonymous_object1485))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1486))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1487, _Bool __anonymous_object1488))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1489))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1490))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1491))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1492))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1493))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1494, const char *__anonymous_object1495))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1496))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1497, const char *__anonymous_object1498))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1499))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1500))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1501, const char *__anonymous_object1502, unsigned long int __anonymous_object1503))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1504, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret3=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1505))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1506))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1507, _Bool __anonymous_object1508))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1509))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1510, const char *__anonymous_object1511))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1512))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1513, _Bool __anonymous_object1514))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1515))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1516))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1517))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1518))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1519))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1520, const char *__anonymous_object1521))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1522))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1523, const char *__anonymous_object1524))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1525))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1526))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1527, const char *__anonymous_object1528, unsigned long int __anonymous_object1529))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1530, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "signed char "))) , _tmp_cp_ret3)), __v__Sc_1))) , _tmp_cp_ret4)), ((void *(*)(void *__anonymous_object1531))(&_thunk1))))) , _tmp_cp_ret5));
     ((void)(_tmp_cp_ret3) /* ^?{} */);
     ((void)(_tmp_cp_ret4) /* ^?{} */);
@@ -459,7 +490,7 @@
     struct ofstream *_tmp_cp_ret8;
     __attribute__ ((unused)) struct ofstream *_thunk2(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1532))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1533))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1534, _Bool __anonymous_object1535))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1536))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1537, const char *__anonymous_object1538))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1539))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1540, _Bool __anonymous_object1541))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1542))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1543))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1544))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1545))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1546))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1547, const char *__anonymous_object1548))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1549))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1550, const char *__anonymous_object1551))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1552))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1553))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1554, const char *__anonymous_object1555, unsigned long int __anonymous_object1556))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1557, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret8=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1558))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1559))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1560, _Bool __anonymous_object1561))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1562))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1563, const char *__anonymous_object1564))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1565))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1566, _Bool __anonymous_object1567))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1568))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1569))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1570))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1571))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1572))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1573, const char *__anonymous_object1574))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1575))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1576, const char *__anonymous_object1577))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1578))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1579))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1580, const char *__anonymous_object1581, unsigned long int __anonymous_object1582))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1583, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret7=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Uc__1(((_Bool (*)(void *__anonymous_object1584))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1585))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1586, _Bool __anonymous_object1587))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1588))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1589, const char *__anonymous_object1590))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1591))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1592, _Bool __anonymous_object1593))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1594))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1595))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1596))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1597))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1598))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1599, const char *__anonymous_object1600))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1601))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1602, const char *__anonymous_object1603))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1604))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1605))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1606, const char *__anonymous_object1607, unsigned long int __anonymous_object1608))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1609, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret6=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1610))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1611))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1612, _Bool __anonymous_object1613))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1614))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1615, const char *__anonymous_object1616))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1617))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1618, _Bool __anonymous_object1619))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1620))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1621))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1622))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1623))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1624))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1625, const char *__anonymous_object1626))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1627))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1628, const char *__anonymous_object1629))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1630))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1631))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1632, const char *__anonymous_object1633, unsigned long int __anonymous_object1634))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1635, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "unsigned char "))) , _tmp_cp_ret6), __v__Uc_1))) , _tmp_cp_ret7), ((void *(*)(void *__anonymous_object1636))(&_thunk2))))) , _tmp_cp_ret8));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1532))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1533))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1534, _Bool __anonymous_object1535))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1536))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1537, const char *__anonymous_object1538))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1539))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1540, _Bool __anonymous_object1541))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1542))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1543))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1544))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1545))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1546))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1547, const char *__anonymous_object1548))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1549))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1550, const char *__anonymous_object1551))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1552))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1553))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1554, const char *__anonymous_object1555, unsigned long int __anonymous_object1556))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1557, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret8=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1558))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1559))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1560, _Bool __anonymous_object1561))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1562))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1563, const char *__anonymous_object1564))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1565))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1566, _Bool __anonymous_object1567))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1568))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1569))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1570))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1571))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1572))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1573, const char *__anonymous_object1574))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1575))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1576, const char *__anonymous_object1577))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1578))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1579))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1580, const char *__anonymous_object1581, unsigned long int __anonymous_object1582))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1583, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret7=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Uc__1(((_Bool (*)(void *__anonymous_object1584))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1585))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1586, _Bool __anonymous_object1587))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1588))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1589, const char *__anonymous_object1590))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1591))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1592, _Bool __anonymous_object1593))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1594))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1595))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1596))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1597))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1598))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1599, const char *__anonymous_object1600))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1601))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1602, const char *__anonymous_object1603))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1604))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1605))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1606, const char *__anonymous_object1607, unsigned long int __anonymous_object1608))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1609, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret6=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1610))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1611))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1612, _Bool __anonymous_object1613))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1614))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1615, const char *__anonymous_object1616))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1617))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1618, _Bool __anonymous_object1619))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1620))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1621))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1622))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1623))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1624))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1625, const char *__anonymous_object1626))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1627))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1628, const char *__anonymous_object1629))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1630))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1631))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1632, const char *__anonymous_object1633, unsigned long int __anonymous_object1634))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1635, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "unsigned char "))) , _tmp_cp_ret6)), __v__Uc_1))) , _tmp_cp_ret7)), ((void *(*)(void *__anonymous_object1636))(&_thunk2))))) , _tmp_cp_ret8));
     ((void)(_tmp_cp_ret6) /* ^?{} */);
     ((void)(_tmp_cp_ret7) /* ^?{} */);
@@ -471,7 +502,7 @@
     struct ofstream *_tmp_cp_ret11;
     __attribute__ ((unused)) struct ofstream *_thunk3(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1637))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1638))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1639, _Bool __anonymous_object1640))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1641))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1642, const char *__anonymous_object1643))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1644))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1645, _Bool __anonymous_object1646))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1647))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1648))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1649))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1650))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1651))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1652, const char *__anonymous_object1653))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1654))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1655, const char *__anonymous_object1656))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1657))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1658))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1659, const char *__anonymous_object1660, unsigned long int __anonymous_object1661))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1662, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret11=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1663))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1664))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1665, _Bool __anonymous_object1666))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1667))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1668, const char *__anonymous_object1669))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1670))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1671, _Bool __anonymous_object1672))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1673))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1674))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1675))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1676))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1677))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1678, const char *__anonymous_object1679))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1680))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1681, const char *__anonymous_object1682))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1683))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1684))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1685, const char *__anonymous_object1686, unsigned long int __anonymous_object1687))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1688, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret10=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0s__1(((_Bool (*)(void *__anonymous_object1689))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1690))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1691, _Bool __anonymous_object1692))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1693))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1694, const char *__anonymous_object1695))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1696))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1697, _Bool __anonymous_object1698))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1699))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1700))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1701))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1702))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1703))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1704, const char *__anonymous_object1705))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1706))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1707, const char *__anonymous_object1708))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1709))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1710))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1711, const char *__anonymous_object1712, unsigned long int __anonymous_object1713))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1714, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret9=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1715))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1716))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1717, _Bool __anonymous_object1718))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1719))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1720, const char *__anonymous_object1721))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1722))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1723, _Bool __anonymous_object1724))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1725))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1726))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1727))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1728))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1729))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1730, const char *__anonymous_object1731))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1732))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1733, const char *__anonymous_object1734))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1735))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1736))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1737, const char *__anonymous_object1738, unsigned long int __anonymous_object1739))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1740, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "signed short int"))) , _tmp_cp_ret9), __v__s_1))) , _tmp_cp_ret10), ((void *(*)(void *__anonymous_object1741))(&_thunk3))))) , _tmp_cp_ret11));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1637))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1638))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1639, _Bool __anonymous_object1640))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1641))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1642, const char *__anonymous_object1643))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1644))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1645, _Bool __anonymous_object1646))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1647))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1648))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1649))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1650))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1651))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1652, const char *__anonymous_object1653))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1654))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1655, const char *__anonymous_object1656))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1657))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1658))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1659, const char *__anonymous_object1660, unsigned long int __anonymous_object1661))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1662, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret11=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1663))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1664))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1665, _Bool __anonymous_object1666))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1667))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1668, const char *__anonymous_object1669))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1670))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1671, _Bool __anonymous_object1672))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1673))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1674))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1675))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1676))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1677))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1678, const char *__anonymous_object1679))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1680))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1681, const char *__anonymous_object1682))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1683))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1684))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1685, const char *__anonymous_object1686, unsigned long int __anonymous_object1687))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1688, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret10=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0s__1(((_Bool (*)(void *__anonymous_object1689))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1690))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1691, _Bool __anonymous_object1692))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1693))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1694, const char *__anonymous_object1695))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1696))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1697, _Bool __anonymous_object1698))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1699))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1700))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1701))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1702))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1703))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1704, const char *__anonymous_object1705))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1706))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1707, const char *__anonymous_object1708))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1709))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1710))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1711, const char *__anonymous_object1712, unsigned long int __anonymous_object1713))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1714, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret9=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1715))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1716))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1717, _Bool __anonymous_object1718))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1719))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1720, const char *__anonymous_object1721))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1722))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1723, _Bool __anonymous_object1724))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1725))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1726))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1727))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1728))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1729))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1730, const char *__anonymous_object1731))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1732))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1733, const char *__anonymous_object1734))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1735))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1736))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1737, const char *__anonymous_object1738, unsigned long int __anonymous_object1739))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1740, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "signed short int"))) , _tmp_cp_ret9)), __v__s_1))) , _tmp_cp_ret10)), ((void *(*)(void *__anonymous_object1741))(&_thunk3))))) , _tmp_cp_ret11));
     ((void)(_tmp_cp_ret9) /* ^?{} */);
     ((void)(_tmp_cp_ret10) /* ^?{} */);
@@ -483,7 +514,7 @@
     struct ofstream *_tmp_cp_ret14;
     __attribute__ ((unused)) struct ofstream *_thunk4(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1742))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1743))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1744, _Bool __anonymous_object1745))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1746))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1747, const char *__anonymous_object1748))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1749))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1750, _Bool __anonymous_object1751))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1752))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1753))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1754))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1755))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1756))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1757, const char *__anonymous_object1758))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1759))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1760, const char *__anonymous_object1761))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1762))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1763))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1764, const char *__anonymous_object1765, unsigned long int __anonymous_object1766))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1767, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret14=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1768))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1769))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1770, _Bool __anonymous_object1771))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1772))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1773, const char *__anonymous_object1774))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1775))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1776, _Bool __anonymous_object1777))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1778))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1779))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1780))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1781))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1782))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1783, const char *__anonymous_object1784))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1785))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1786, const char *__anonymous_object1787))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1788))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1789))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1790, const char *__anonymous_object1791, unsigned long int __anonymous_object1792))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1793, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret13=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Us__1(((_Bool (*)(void *__anonymous_object1794))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1795))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1796, _Bool __anonymous_object1797))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1798))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1799, const char *__anonymous_object1800))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1801))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1802, _Bool __anonymous_object1803))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1804))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1805))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1806))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1807))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1808))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1809, const char *__anonymous_object1810))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1811))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1812, const char *__anonymous_object1813))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1814))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1815))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1816, const char *__anonymous_object1817, unsigned long int __anonymous_object1818))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1819, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret12=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1820))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1821))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1822, _Bool __anonymous_object1823))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1824))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1825, const char *__anonymous_object1826))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1827))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1828, _Bool __anonymous_object1829))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1830))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1831))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1832))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1833))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1834))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1835, const char *__anonymous_object1836))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1837))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1838, const char *__anonymous_object1839))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1840))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1841))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1842, const char *__anonymous_object1843, unsigned long int __anonymous_object1844))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1845, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "unsigned short int"))) , _tmp_cp_ret12), __v__Us_1))) , _tmp_cp_ret13), ((void *(*)(void *__anonymous_object1846))(&_thunk4))))) , _tmp_cp_ret14));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1742))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1743))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1744, _Bool __anonymous_object1745))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1746))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1747, const char *__anonymous_object1748))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1749))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1750, _Bool __anonymous_object1751))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1752))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1753))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1754))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1755))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1756))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1757, const char *__anonymous_object1758))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1759))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1760, const char *__anonymous_object1761))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1762))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1763))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1764, const char *__anonymous_object1765, unsigned long int __anonymous_object1766))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1767, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret14=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1768))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1769))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1770, _Bool __anonymous_object1771))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1772))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1773, const char *__anonymous_object1774))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1775))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1776, _Bool __anonymous_object1777))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1778))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1779))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1780))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1781))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1782))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1783, const char *__anonymous_object1784))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1785))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1786, const char *__anonymous_object1787))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1788))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1789))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1790, const char *__anonymous_object1791, unsigned long int __anonymous_object1792))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1793, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret13=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Us__1(((_Bool (*)(void *__anonymous_object1794))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1795))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1796, _Bool __anonymous_object1797))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1798))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1799, const char *__anonymous_object1800))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1801))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1802, _Bool __anonymous_object1803))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1804))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1805))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1806))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1807))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1808))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1809, const char *__anonymous_object1810))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1811))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1812, const char *__anonymous_object1813))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1814))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1815))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1816, const char *__anonymous_object1817, unsigned long int __anonymous_object1818))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1819, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret12=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1820))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1821))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1822, _Bool __anonymous_object1823))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1824))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1825, const char *__anonymous_object1826))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1827))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1828, _Bool __anonymous_object1829))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1830))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1831))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1832))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1833))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1834))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1835, const char *__anonymous_object1836))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1837))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1838, const char *__anonymous_object1839))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1840))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1841))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1842, const char *__anonymous_object1843, unsigned long int __anonymous_object1844))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1845, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "unsigned short int"))) , _tmp_cp_ret12)), __v__Us_1))) , _tmp_cp_ret13)), ((void *(*)(void *__anonymous_object1846))(&_thunk4))))) , _tmp_cp_ret14));
     ((void)(_tmp_cp_ret12) /* ^?{} */);
     ((void)(_tmp_cp_ret13) /* ^?{} */);
@@ -495,7 +526,7 @@
     struct ofstream *_tmp_cp_ret17;
     __attribute__ ((unused)) struct ofstream *_thunk5(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1847))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1848))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1849, _Bool __anonymous_object1850))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1851))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1852, const char *__anonymous_object1853))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1854))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1855, _Bool __anonymous_object1856))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1857))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1858))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1859))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1860))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1861))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1862, const char *__anonymous_object1863))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1864))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1865, const char *__anonymous_object1866))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1867))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1868))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1869, const char *__anonymous_object1870, unsigned long int __anonymous_object1871))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1872, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), _p0);
-    }
-    ((void)(((void)(_tmp_cp_ret17=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1873))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1874))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1875, _Bool __anonymous_object1876))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1877))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1878, const char *__anonymous_object1879))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1880))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1881, _Bool __anonymous_object1882))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1883))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1884))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1885))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1886))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1887))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1888, const char *__anonymous_object1889))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1890))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1891, const char *__anonymous_object1892))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1893))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1894))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1895, const char *__anonymous_object1896, unsigned long int __anonymous_object1897))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1898, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret16=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Ul__1(((_Bool (*)(void *__anonymous_object1899))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1900))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1901, _Bool __anonymous_object1902))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1903))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1904, const char *__anonymous_object1905))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1906))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1907, _Bool __anonymous_object1908))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1909))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1910))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1911))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1912))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1913))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1914, const char *__anonymous_object1915))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1916))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1917, const char *__anonymous_object1918))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1919))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1920))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1921, const char *__anonymous_object1922, unsigned long int __anonymous_object1923))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1924, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), (((void)(_tmp_cp_ret15=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1925))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1926))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1927, _Bool __anonymous_object1928))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1929))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1930, const char *__anonymous_object1931))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1932))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1933, _Bool __anonymous_object1934))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1935))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1936))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1937))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1938))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1939))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1940, const char *__anonymous_object1941))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1942))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1943, const char *__anonymous_object1944))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1945))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1946))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1947, const char *__anonymous_object1948, unsigned long int __anonymous_object1949))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1950, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), __sout__P9sofstream_1, "size_t"))) , _tmp_cp_ret15), __v__Ul_1))) , _tmp_cp_ret16), ((void *(*)(void *__anonymous_object1951))(&_thunk5))))) , _tmp_cp_ret17));
+        return __endl__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0__1(((_Bool (*)(void *__anonymous_object1847))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1848))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1849, _Bool __anonymous_object1850))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1851))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1852, const char *__anonymous_object1853))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1854))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1855, _Bool __anonymous_object1856))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1857))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1858))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1859))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1860))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1861))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1862, const char *__anonymous_object1863))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1864))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1865, const char *__anonymous_object1866))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1867))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1868))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1869, const char *__anonymous_object1870, unsigned long int __anonymous_object1871))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1872, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)_p0));
+    }
+    ((void)(((void)(_tmp_cp_ret17=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PFPd0_Pd0___1(((_Bool (*)(void *__anonymous_object1873))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1874))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1875, _Bool __anonymous_object1876))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1877))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1878, const char *__anonymous_object1879))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1880))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1881, _Bool __anonymous_object1882))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1883))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1884))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1885))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1886))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1887))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1888, const char *__anonymous_object1889))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1890))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1891, const char *__anonymous_object1892))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1893))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1894))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1895, const char *__anonymous_object1896, unsigned long int __anonymous_object1897))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1898, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret16=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0Ul__1(((_Bool (*)(void *__anonymous_object1899))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1900))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1901, _Bool __anonymous_object1902))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1903))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1904, const char *__anonymous_object1905))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1906))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1907, _Bool __anonymous_object1908))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1909))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1910))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1911))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1912))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1913))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1914, const char *__anonymous_object1915))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1916))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1917, const char *__anonymous_object1918))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1919))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1920))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1921, const char *__anonymous_object1922, unsigned long int __anonymous_object1923))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1924, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret15=___operator_bitor__A0_1_0_0___sepPrt__PFb_Pd0___sepReset__PF_Pd0___sepReset__PF_Pd0b___sepGetCur__PFPCc_Pd0___sepSetCur__PF_Pd0PCc___getNL__PFb_Pd0___setNL__PF_Pd0b___sepOn__PF_Pd0___sepOff__PF_Pd0___sepDisable__PFb_Pd0___sepEnable__PFb_Pd0___sepGet__PFPCc_Pd0___sepSet__PF_Pd0PCc___sepGetTuple__PFPCc_Pd0___sepSetTuple__PF_Pd0PCc___fail__PFi_Pd0___flush__PFi_Pd0___open__PF_Pd0PCcPCc___close__PF_Pd0___write__PFPd0_Pd0PCcUl___fmt__PFi_Pd0PCc__FPd0_Pd0PCc__1(((_Bool (*)(void *__anonymous_object1925))__sepPrt__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1926))__sepReset__F_P9sofstream__1), ((void (*)(void *__anonymous_object1927, _Bool __anonymous_object1928))__sepReset__F_P9sofstreamb__1), ((const char *(*)(void *__anonymous_object1929))__sepGetCur__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1930, const char *__anonymous_object1931))__sepSetCur__F_P9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1932))__getNL__Fb_P9sofstream__1), ((void (*)(void *__anonymous_object1933, _Bool __anonymous_object1934))__setNL__F_P9sofstreamb__1), ((void (*)(void *__anonymous_object1935))__sepOn__F_P9sofstream__1), ((void (*)(void *__anonymous_object1936))__sepOff__F_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1937))__sepDisable__Fb_P9sofstream__1), ((_Bool (*)(void *__anonymous_object1938))__sepEnable__Fb_P9sofstream__1), ((const char *(*)(void *__anonymous_object1939))__sepGet__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1940, const char *__anonymous_object1941))__sepSet__F_P9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1942))__sepGetTuple__FPCc_P9sofstream__1), ((void (*)(void *__anonymous_object1943, const char *__anonymous_object1944))__sepSetTuple__F_P9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1945))__fail__Fi_P9sofstream__1), ((signed int (*)(void *__anonymous_object1946))__flush__Fi_P9sofstream__1), ((void (*)(void *__os__P7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_P9sofstreamPCcPCc__1), ((void (*)(void *__os__P7tostype_1))__close__F_P9sofstream__1), ((void *(*)(void *__anonymous_object1947, const char *__anonymous_object1948, unsigned long int __anonymous_object1949))__write__FP9sofstream_P9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1950, const char *__fmt__PCc_1, ...))__fmt__Fi_P9sofstreamPCc__1), ((void *)__sout__P9sofstream_1), "size_t"))) , _tmp_cp_ret15)), __v__Ul_1))) , _tmp_cp_ret16)), ((void *(*)(void *__anonymous_object1951))(&_thunk5))))) , _tmp_cp_ret17));
     ((void)(_tmp_cp_ret15) /* ^?{} */);
     ((void)(_tmp_cp_ret16) /* ^?{} */);
@@ -708,10 +739,10 @@
     ((void)0123456789.e-09L);
     ((void)0123456789.e-09DL);
-    ((void)(-0123456789.e-09));
-    ((void)(-0123456789.e-09f));
-    ((void)(-0123456789.e-09l));
-    ((void)(-0123456789.e-09F));
-    ((void)(-0123456789.e-09L));
-    ((void)(-0123456789.e-09DL));
+    ((void)(+0123456789.e-09));
+    ((void)(+0123456789.e-09f));
+    ((void)(+0123456789.e-09l));
+    ((void)(+0123456789.e-09F));
+    ((void)(+0123456789.e-09L));
+    ((void)(+0123456789.e-09DL));
     ((void)(-0123456789.e-09));
     ((void)(-0123456789.e-09f));
@@ -852,10 +883,10 @@
     ((void)0123456789.0123456789E-09L);
     ((void)0123456789.0123456789E-09DL);
-    ((void)(-0123456789.0123456789E-09));
-    ((void)(-0123456789.0123456789E-09f));
-    ((void)(-0123456789.0123456789E-09l));
-    ((void)(-0123456789.0123456789E-09F));
-    ((void)(-0123456789.0123456789E-09L));
-    ((void)(-0123456789.0123456789E-09DL));
+    ((void)(+0123456789.0123456789E-09));
+    ((void)(+0123456789.0123456789E-09f));
+    ((void)(+0123456789.0123456789E-09l));
+    ((void)(+0123456789.0123456789E-09F));
+    ((void)(+0123456789.0123456789E-09L));
+    ((void)(+0123456789.0123456789E-09DL));
     ((void)(-0123456789.0123456789E-09));
     ((void)(-0123456789.0123456789E-09f));
@@ -899,9 +930,9 @@
     ((void)0x0123456789.p-09F);
     ((void)0x0123456789.p-09L);
-    ((void)(-0x0123456789.p-09));
-    ((void)(-0x0123456789.p-09f));
-    ((void)(-0x0123456789.p-09l));
-    ((void)(-0x0123456789.p-09F));
-    ((void)(-0x0123456789.p-09L));
+    ((void)(+0x0123456789.p-09));
+    ((void)(+0x0123456789.p-09f));
+    ((void)(+0x0123456789.p-09l));
+    ((void)(+0x0123456789.p-09F));
+    ((void)(+0x0123456789.p-09L));
     ((void)(-0x0123456789.p-09));
     ((void)(-0x0123456789.p-09f));
@@ -944,9 +975,9 @@
     ((void)0x.0123456789P-09F);
     ((void)0x.0123456789P-09L);
-    ((void)(-0x.0123456789P-09));
-    ((void)(-0x.0123456789P-09f));
-    ((void)(-0x.0123456789P-09l));
-    ((void)(-0x.0123456789P-09F));
-    ((void)(-0x.0123456789P-09L));
+    ((void)(+0x.0123456789P-09));
+    ((void)(+0x.0123456789P-09f));
+    ((void)(+0x.0123456789P-09l));
+    ((void)(+0x.0123456789P-09F));
+    ((void)(+0x.0123456789P-09L));
     ((void)(-0x.0123456789P-09));
     ((void)(-0x.0123456789P-09f));
@@ -989,4 +1020,9 @@
     ((void)0X0123456789.0123456789P-09F);
     ((void)0X0123456789.0123456789P-09L);
+    ((void)(+0X0123456789.0123456789P-09));
+    ((void)(+0X0123456789.0123456789P-09f));
+    ((void)(+0X0123456789.0123456789P-09l));
+    ((void)(+0X0123456789.0123456789P-09F));
+    ((void)(+0X0123456789.0123456789P-09L));
     ((void)(-0X0123456789.0123456789P-09));
     ((void)(-0X0123456789.0123456789P-09f));
@@ -994,9 +1030,236 @@
     ((void)(-0X0123456789.0123456789P-09F));
     ((void)(-0X0123456789.0123456789P-09L));
-    ((void)(-0X0123456789.0123456789P-09));
-    ((void)(-0X0123456789.0123456789P-09f));
-    ((void)(-0X0123456789.0123456789P-09l));
-    ((void)(-0X0123456789.0123456789P-09F));
-    ((void)(-0X0123456789.0123456789P-09L));
+    ((void)((signed char )01234567));
+    ((void)((signed short int )01234567));
+    ((void)((signed int )01234567));
+    ((void)((signed long int )01234567));
+    ((void)((__int128 )01234567));
+    ((void)((unsigned char )01234567u));
+    ((void)((signed short int )01234567u));
+    ((void)((unsigned int )01234567u));
+    ((void)((signed long int )01234567u));
+    ((void)((__int128 )01234567u));
+    ((void)(+((signed int )((signed char )01234567))));
+    ((void)(+((signed int )((signed short int )01234567))));
+    ((void)(+((signed int )01234567)));
+    ((void)(+((signed long int )01234567)));
+    ((void)(+((float )((__int128 )01234567))));
+    ((void)(+((signed int )((unsigned char )01234567u))));
+    ((void)(+((signed int )((signed short int )01234567u))));
+    ((void)(+((unsigned int )01234567u)));
+    ((void)(+((signed long int )01234567u)));
+    ((void)(+((float )((__int128 )01234567u))));
+    ((void)(-((signed int )((signed char )01234567))));
+    ((void)(-((signed int )((signed short int )01234567))));
+    ((void)(-((signed int )01234567)));
+    ((void)(-((signed long int )01234567)));
+    ((void)(-((float )((__int128 )01234567))));
+    ((void)(-((signed int )((unsigned char )01234567u))));
+    ((void)(-((signed int )((signed short int )01234567u))));
+    ((void)(-((unsigned int )01234567u)));
+    ((void)(-((signed long int )01234567u)));
+    ((void)(-((float )((__int128 )01234567u))));
+    ((void)((signed char )1234567890));
+    ((void)((signed short int )1234567890));
+    ((void)((signed int )1234567890));
+    ((void)((signed long int )1234567890));
+    ((void)((__int128 )1234567890));
+    ((void)((signed char )1234567890U));
+    ((void)((unsigned short int )1234567890U));
+    ((void)((signed int )1234567890U));
+    ((void)((unsigned long int )1234567890u));
+    ((void)((unsigned __int128 )1234567890u));
+    ((void)(+((signed int )((signed char )1234567890))));
+    ((void)(+((signed int )((signed short int )1234567890))));
+    ((void)(+((signed int )1234567890)));
+    ((void)(+((signed long int )1234567890)));
+    ((void)(+((float )((__int128 )1234567890))));
+    ((void)(+((signed int )((signed char )1234567890U))));
+    ((void)(+((signed int )((unsigned short int )1234567890U))));
+    ((void)(+((signed int )1234567890U)));
+    ((void)(+((unsigned long int )1234567890u)));
+    ((void)(+((float )((unsigned __int128 )1234567890u))));
+    ((void)(-((signed int )((signed char )1234567890))));
+    ((void)(-((signed int )((signed short int )1234567890))));
+    ((void)(-((signed int )1234567890)));
+    ((void)(-((signed long int )1234567890)));
+    ((void)(-((float )((__int128 )1234567890))));
+    ((void)(-((signed int )((signed char )1234567890U))));
+    ((void)(-((signed int )((unsigned short int )1234567890U))));
+    ((void)(-((signed int )1234567890U)));
+    ((void)(-((unsigned long int )1234567890u)));
+    ((void)(-((float )((unsigned __int128 )1234567890u))));
+    ((void)((signed char )0x0123456789abcdef));
+    ((void)((signed short int )0x0123456789abcdef));
+    ((void)((signed int )0x0123456789abcdef));
+    ((void)((signed long int )0x0123456789abcdef));
+    ((void)((signed char )0x0123456789abcdefu));
+    ((void)((unsigned short int )0x0123456789abcdefu));
+    ((void)((signed int )0x0123456789abcdefu));
+    ((void)((unsigned long int )0x0123456789abcdefu));
+    ((void)(+((signed int )((signed char )0x0123456789abcdef))));
+    ((void)(+((signed int )((signed short int )0x0123456789abcdef))));
+    ((void)(+((signed int )0x0123456789abcdef)));
+    ((void)(+((signed long int )0x0123456789abcdef)));
+    ((void)(+((signed int )((signed char )0x0123456789abcdefu))));
+    ((void)(+((signed int )((unsigned short int )0x0123456789abcdefu))));
+    ((void)(+((signed int )0x0123456789abcdefu)));
+    ((void)(+((unsigned long int )0x0123456789abcdefu)));
+    ((void)(-((signed int )((signed char )0x0123456789abcdef))));
+    ((void)(-((signed int )((signed short int )0x0123456789abcdef))));
+    ((void)(-((signed int )0x0123456789abcdef)));
+    ((void)(-((signed long int )0x0123456789abcdef)));
+    ((void)(-((signed int )((signed char )0x0123456789abcdefu))));
+    ((void)(-((signed int )((unsigned short int )0x0123456789abcdefu))));
+    ((void)(-((signed int )0x0123456789abcdefu)));
+    ((void)(-((unsigned long int )0x0123456789abcdefu)));
+    ((void)((signed char )0x0123456789ABCDEF));
+    ((void)((signed short int )0x0123456789ABCDEF));
+    ((void)((signed int )0x0123456789ABCDEF));
+    ((void)((signed long int )0x0123456789ABCDEF));
+    ((void)((signed char )0x0123456789ABCDEFu));
+    ((void)((unsigned short int )0x0123456789ABCDEFu));
+    ((void)((signed int )0x0123456789ABCDEFu));
+    ((void)((unsigned long int )0x0123456789ABCDEFu));
+    ((void)(+((signed int )((signed char )0x0123456789ABCDEF))));
+    ((void)(+((signed int )((signed short int )0x0123456789ABCDEF))));
+    ((void)(+((signed int )0x0123456789ABCDEF)));
+    ((void)(+((signed long int )0x0123456789ABCDEF)));
+    ((void)(+((signed int )((signed char )0x0123456789ABCDEFu))));
+    ((void)(+((signed int )((unsigned short int )0x0123456789ABCDEFu))));
+    ((void)(+((signed int )0x0123456789ABCDEFu)));
+    ((void)(+((unsigned long int )0x0123456789ABCDEFu)));
+    ((void)(-((signed int )((signed char )0x0123456789ABCDEF))));
+    ((void)(-((signed int )((signed short int )0x0123456789ABCDEF))));
+    ((void)(-((signed int )0x0123456789ABCDEF)));
+    ((void)(-((signed long int )0x0123456789ABCDEF)));
+    ((void)(-((signed int )((signed char )0x0123456789ABCDEFu))));
+    ((void)(-((signed int )((unsigned short int )0x0123456789ABCDEFu))));
+    ((void)(-((signed int )0x0123456789ABCDEFu)));
+    ((void)(-((unsigned long int )0x0123456789ABCDEFu)));
+    ((void)((signed char )0X0123456789abcdef));
+    ((void)((signed short int )0X0123456789abcdef));
+    ((void)((signed int )0X0123456789abcdef));
+    ((void)((signed long int )0X0123456789abcdef));
+    ((void)((signed char )0X0123456789abcdefu));
+    ((void)((unsigned short int )0X0123456789abcdefu));
+    ((void)((signed int )0X0123456789abcdefu));
+    ((void)((unsigned long int )0X0123456789abcdefu));
+    ((void)(+((signed int )((signed char )0X0123456789abcdef))));
+    ((void)(+((signed int )((signed short int )0X0123456789abcdef))));
+    ((void)(+((signed int )0X0123456789abcdef)));
+    ((void)(+((signed long int )0X0123456789abcdef)));
+    ((void)(+((signed int )((signed char )0X0123456789abcdefu))));
+    ((void)(+((signed int )((unsigned short int )0X0123456789abcdefu))));
+    ((void)(+((signed int )0X0123456789abcdefu)));
+    ((void)(+((unsigned long int )0X0123456789abcdefu)));
+    ((void)(-((signed int )((signed char )0X0123456789abcdef))));
+    ((void)(-((signed int )((signed short int )0X0123456789abcdef))));
+    ((void)(-((signed int )0X0123456789abcdef)));
+    ((void)(-((signed long int )0X0123456789abcdef)));
+    ((void)(-((signed int )((signed char )0X0123456789abcdefu))));
+    ((void)(-((signed int )((unsigned short int )0X0123456789abcdefu))));
+    ((void)(-((signed int )0X0123456789abcdefu)));
+    ((void)(-((unsigned long int )0X0123456789abcdefu)));
+    ((void)((signed char )0X0123456789ABCDEF));
+    ((void)((signed short int )0X0123456789ABCDEF));
+    ((void)((signed int )0X0123456789ABCDEF));
+    ((void)((signed long int )0X0123456789ABCDEF));
+    ((void)((signed char )0X0123456789ABCDEFu));
+    ((void)((unsigned short int )0X0123456789ABCDEFu));
+    ((void)((signed int )0X0123456789ABCDEFu));
+    ((void)((unsigned long int )0X0123456789ABCDEFu));
+    ((void)(+((signed int )((signed char )0X0123456789ABCDEF))));
+    ((void)(+((signed int )((signed short int )0X0123456789ABCDEF))));
+    ((void)(+((signed int )0X0123456789ABCDEF)));
+    ((void)(+((signed long int )0X0123456789ABCDEF)));
+    ((void)(+((signed int )((signed char )0X0123456789ABCDEFu))));
+    ((void)(+((signed int )((unsigned short int )0X0123456789ABCDEFu))));
+    ((void)(+((signed int )0X0123456789ABCDEFu)));
+    ((void)(+((unsigned long int )0X0123456789ABCDEFu)));
+    ((void)(-((signed int )((signed char )0X0123456789ABCDEF))));
+    ((void)(-((signed int )((signed short int )0X0123456789ABCDEF))));
+    ((void)(-((signed int )0X0123456789ABCDEF)));
+    ((void)(-((signed long int )0X0123456789ABCDEF)));
+    ((void)(-((signed int )((signed char )0X0123456789ABCDEFu))));
+    ((void)(-((signed int )((unsigned short int )0X0123456789ABCDEFu))));
+    ((void)(-((signed int )0X0123456789ABCDEFu)));
+    ((void)(-((unsigned long int )0X0123456789ABCDEFu)));
+    ((void)((float )0123456789.));
+    ((void)((double )0123456789.));
+    ((void)((long double )0123456789.));
+    ((void)((long double )0123456789.));
+    ((void)(+((float )0123456789.)));
+    ((void)(+((double )0123456789.)));
+    ((void)(+((long double )0123456789.)));
+    ((void)(+((long double )0123456789.)));
+    ((void)(-((float )0123456789.)));
+    ((void)(-((double )0123456789.)));
+    ((void)(-((long double )0123456789.)));
+    ((void)(-((long double )0123456789.)));
+    ((void)((float )0123456789.e09));
+    ((void)((double )0123456789.e09));
+    ((void)((long double )0123456789.e09));
+    ((void)((long double )0123456789.e09));
+    ((void)(+((float )0123456789.e+09)));
+    ((void)(+((double )0123456789.e+09)));
+    ((void)(+((long double )0123456789.e+09)));
+    ((void)(+((long double )0123456789.e+09)));
+    ((void)(-((float )0123456789.e-09)));
+    ((void)(-((double )0123456789.e-09)));
+    ((void)(-((long double )0123456789.e-09)));
+    ((void)(-((long double )0123456789.e-09)));
+    ((void)((float ).0123456789e09));
+    ((void)((double ).0123456789e09));
+    ((void)((long double ).0123456789e09));
+    ((void)((long double ).0123456789e09));
+    ((void)(+((float ).0123456789E+09)));
+    ((void)(+((double ).0123456789E+09)));
+    ((void)(+((long double ).0123456789E+09)));
+    ((void)(+((long double ).0123456789E+09)));
+    ((void)(-((float ).0123456789E-09)));
+    ((void)(-((double ).0123456789E-09)));
+    ((void)(-((long double ).0123456789E-09)));
+    ((void)(-((long double ).0123456789E-09)));
+    ((void)((float )0123456789.0123456789));
+    ((void)((double )0123456789.0123456789));
+    ((void)((long double )0123456789.0123456789));
+    ((void)((long double )0123456789.0123456789));
+    ((void)(+((float )0123456789.0123456789E09)));
+    ((void)(+((double )0123456789.0123456789E09)));
+    ((void)(+((long double )0123456789.0123456789E09)));
+    ((void)(+((long double )0123456789.0123456789E09)));
+    ((void)(-((float )0123456789.0123456789E+09)));
+    ((void)(-((double )0123456789.0123456789E+09)));
+    ((void)(-((long double )0123456789.0123456789E+09)));
+    ((void)(-((long double )0123456789.0123456789E+09)));
+    ((void)((float )0123456789.0123456789E-09));
+    ((void)((double )0123456789.0123456789E-09));
+    ((void)((long double )0123456789.0123456789E-09));
+    ((void)((long double )0123456789.0123456789E-09));
+    ((void)((float )0x0123456789.p09));
+    ((void)((double )0x0123456789.p09));
+    ((void)((long double )0x0123456789.p09));
+    ((void)((long double )0x0123456789.p09));
+    ((void)(+((float )0x0123456789.p09)));
+    ((void)(+((double )0x0123456789.p09)));
+    ((void)(+((long double )0x0123456789.p09)));
+    ((void)(+((long double )0x0123456789.p09)));
+    ((void)(-((float )0x0123456789.p09)));
+    ((void)(-((double )0x0123456789.p09)));
+    ((void)(-((long double )0x0123456789.p09)));
+    ((void)(-((long double )0x0123456789.p09)));
+    ((void)((float )0x0123456789.p+09));
+    ((void)((double )0x0123456789.p+09));
+    ((void)((long double )0x0123456789.p+09));
+    ((void)((long double )0x0123456789.p+09));
+    ((void)(+((float )0x0123456789.p-09)));
+    ((void)(+((double )0x0123456789.p-09)));
+    ((void)(+((long double )0x0123456789.p-09)));
+    ((void)(+((long double )0x0123456789.p-09)));
+    ((void)(-((float )0x.0123456789p09)));
+    ((void)(-((double )0x.0123456789p09)));
+    ((void)(-((long double )0x.0123456789p09)));
+    ((void)(-((long double )0x.0123456789p09)));
     ((void)__f__F_c__1('a'));
     ((void)__f__F_Sc__1(20));
@@ -1111,5 +1374,5 @@
     ((void)L"a" "b" "c");
     ((void)(___retval_main__i_1=0) /* ?{} */);
-    return ((signed int )___retval_main__i_1);
+    return ___retval_main__i_1;
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi___1(); }
@@ -1126,4 +1389,4 @@
     ((void)(___retval_main__i_1=(((void)(_tmp_cp_ret0=invoke_main(__argc__i_1, __argv__PPc_1, __envp__PPc_1))) , _tmp_cp_ret0)) /* ?{} */);
     ((void)(_tmp_cp_ret0) /* ^?{} */);
-    return ((signed int )___retval_main__i_1);
-}
+    return ___retval_main__i_1;
+}
Index: src/tests/.expect/castError.txt
===================================================================
--- src/tests/.expect/castError.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/castError.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -1,40 +1,36 @@
-castError.c:7:1 error: Cannot choose between 3 alternatives for expression Cast of:
+castError.c:7:1 error: Cannot choose between 3 alternatives for expression
+Cast of:
   Name: f
+... to:
+  charAlternatives are:
+Cost ( 1, 0, 0, 0 ): Cast of:
+     Variable Expression: f: signed int
+   ... to:
+     char
+ (types:
+   char
+ )
+ Environment: 
 
-to:
-  char
-Alternatives are:        Cost ( 1, 0, 0, 0 ): Cast of:
-          Variable Expression: f: function
-                accepting unspecified arguments
-              returning 
-                nothing 
+Cost ( 1, 0, 0, 0 ): Cast of:
+     Variable Expression: f: double
+   ... to:
+     char
+ (types:
+   char
+ )
+ Environment: 
+
+Cost ( 1, 0, 0, 0 ): Cast of:
+     Variable Expression: f: function
+       accepting unspecified arguments
+     ... returning nothing 
+
+   ... to:
+     char
+ (types:
+   char
+ )
+ Environment: 
 
 
-        to:
-          char
-(types:
-            char
-)
-        Environment: 
-
-        Cost ( 1, 0, 0, 0 ): Cast of:
-          Variable Expression: f: signed int
-
-        to:
-          char
-(types:
-            char
-)
-        Environment: 
-
-        Cost ( 1, 0, 0, 0 ): Cast of:
-          Variable Expression: f: double
-
-        to:
-          char
-(types:
-            char
-)
-        Environment: 
-
-
Index: src/tests/.expect/concurrent/boundedBuffer.txt
===================================================================
--- src/tests/.expect/concurrent/boundedBuffer.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/concurrent/boundedBuffer.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,1 @@
+total:500000
Index: src/tests/.expect/concurrent/fmtLines.txt
===================================================================
--- src/tests/.expect/concurrent/fmtLines.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/concurrent/fmtLines.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,78 @@
+// /  / Cf  oral  l Ve  rsio  
+n 1.  0.0   Copy  righ  t (C  
+) 20  17 U  nive  rsit  y of  
+ Wat  erlo  o///  / Th  e co  
+nten  ts o  f th  is f  ile   
+are   cove  red   unde  r th  
+e li  cenc  e ag  reem  ent   
+in t  he//   fil  e "L  ICEN  
+CE"   dist  ribu  ted   with  
+ Cfo  rall  .//   // f  mtLi  
+nes.  cc -  - //   //   Auth  
+or                 : P  eter  
+ A.   Buhr  // C  reat  ed O  
+n           : Su  n Se  p 17  
+ 21:  56:1  5 20  17//   Las  
+t Mo  difi  ed B  y :   Pete  
+r A.   Buh  r//   Last   Mod  
+ifie  d On   : M  on S  ep 1  
+8 11  :35:  57 2  017/  / Up  
+date   Cou  nt       :   31/  
+/ #i  nclu  de <  fstr  eam>  
+#inc  lude   <co  rout  ine>  
+coro  utin  e Fo  rmat   {	c  
+har   ch;	  				  				  		//  
+ use  d fo  r co  mmun  icat  
+ion	  int   g, b  ;			  				  
+				  // g  loba  l be  caus  
+e us  ed i  n de  stru  ctor  
+};vo  id ?  {}(   Form  at &  
+ fmt   ) {        resu  me(   
+fmt   );		  				  				  // s  
+tart   cor  outi  ne}v  oid   
+^?{}  ( Fo  rmat   & f  mt )  
+ {      if   ( f  mt.g   !=   
+0 ||   fmt  .b !  = 0   ) so  
+ut |   end  l;}v  oid   main  
+( Fo  rmat   & f  mt )   {	f  
+or (   ;;   ) {	  				  				  
+	//   for   as m  any   char  
+acte  rs		  for   ( fm  t.g   
+= 0;   fmt  .g <   5;   fmt.  
+g +=   1 )   {		  // g  roup  
+s of   5 b  lock  s			  for   
+( fm  t.b   = 0;   fmt  .b <  
+ 4;   fmt.  b +=   1 )   {	/  
+/ bl  ocks   of   4 ch  arac  
+ters  				  for   ( ;;   ) {  
+				  			/  / fo  r ne  wlin  
+e ch  arac  ters  				  	sus  
+pend  ();	  				  if (   fmt  
+.ch   != '  \n'   ) br  eak;  
+		//   ign  ore   newl  ine	  
+			}   //   for	  			s  out   
+| fm  t.ch  ;			  				  // p  
+rint   cha  ract  er		  	} /  
+/ fo  r			  sout   | "    ";  
+				  				  // p  rint   blo  
+ck s  epar  ator  		}   // f  
+or		  sout   | e  ndl;  				  
+				  	//   prin  t gr  oup   
+sepa  rato  r	}   // f  or}   
+// m  ainv  oid   prt(   For  
+mat   & fm  t, c  har   ch )  
+ {      fm  t.ch   = c  h;    
+  re  sume  ( fm  t );  } //  
+ prt  int   main  () {  	For  
+mat   fmt;  	cha  r ch  ;	fo  
+r (   ;; )   {		  sin   | ch  
+;			  				  			/  / re  ad o  
+ne c  hara  cter  	  i  f (   
+eof(   sin   ) )   bre  ak;	  
+				  		//   eof   ?		  prt(  
+ fmt  , ch   );	  } //   for  
+} //   mai  n//   Loca  l Va  
+riab  les:   ///  / ta  b-wi  
+dth:   4 /  ///   comp  ile-  
+comm  and:   "cf  a fm  tLin  
+es.c  " //  // E  nd:   //
Index: src/tests/.expect/concurrent/matrixSum.txt
===================================================================
--- src/tests/.expect/concurrent/matrixSum.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/concurrent/matrixSum.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,1 @@
+10000
Index: src/tests/.expect/concurrent/pingpong.txt
===================================================================
--- src/tests/.expect/concurrent/pingpong.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/concurrent/pingpong.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,40 @@
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
+ping
+pong
Index: src/tests/.expect/concurrent/prodcons.txt
===================================================================
--- src/tests/.expect/concurrent/prodcons.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/concurrent/prodcons.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,33 @@
+47 88
+47 88
+ $1
+ $1
+1
+68 24
+ # 1
+68 24
+ $2
+ $2
+2
+58 18
+ # 2
+58 18
+ $3
+ $3
+3
+55 82
+ # 3
+55 82
+ $4
+ $4
+4
+60 87
+ # 4
+60 87
+ $5
+ $5
+5
+ # 5
+cons stops
+prod stops
+main stops
Index: src/tests/.expect/concurrent/sched-ext-barge.txt
===================================================================
--- src/tests/.expect/concurrent/sched-ext-barge.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/concurrent/sched-ext-barge.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,5002 @@
+Starting
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1944
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1957
+1958
+1959
+1960
+1961
+1962
+1963
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1981
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2020
+2021
+2022
+2023
+2024
+2025
+2026
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2049
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2060
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2094
+2095
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2108
+2109
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2119
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2143
+2144
+2145
+2146
+2147
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2155
+2156
+2157
+2158
+2159
+2160
+2161
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2170
+2171
+2172
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2185
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2200
+2201
+2202
+2203
+2204
+2205
+2206
+2207
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2215
+2216
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+2232
+2233
+2234
+2235
+2236
+2237
+2238
+2239
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2249
+2250
+2251
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2265
+2266
+2267
+2268
+2269
+2270
+2271
+2272
+2273
+2274
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2310
+2311
+2312
+2313
+2314
+2315
+2316
+2317
+2318
+2319
+2320
+2321
+2322
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2332
+2333
+2334
+2335
+2336
+2337
+2338
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2351
+2352
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2371
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2380
+2381
+2382
+2383
+2384
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2399
+2400
+2401
+2402
+2403
+2404
+2405
+2406
+2407
+2408
+2409
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2443
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2466
+2467
+2468
+2469
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2479
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2490
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2498
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2522
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2530
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2540
+2541
+2542
+2543
+2544
+2545
+2546
+2547
+2548
+2549
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2560
+2561
+2562
+2563
+2564
+2565
+2566
+2567
+2568
+2569
+2570
+2571
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2583
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2594
+2595
+2596
+2597
+2598
+2599
+2600
+2601
+2602
+2603
+2604
+2605
+2606
+2607
+2608
+2609
+2610
+2611
+2612
+2613
+2614
+2615
+2616
+2617
+2618
+2619
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2631
+2632
+2633
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2646
+2647
+2648
+2649
+2650
+2651
+2652
+2653
+2654
+2655
+2656
+2657
+2658
+2659
+2660
+2661
+2662
+2663
+2664
+2665
+2666
+2667
+2668
+2669
+2670
+2671
+2672
+2673
+2674
+2675
+2676
+2677
+2678
+2679
+2680
+2681
+2682
+2683
+2684
+2685
+2686
+2687
+2688
+2689
+2690
+2691
+2692
+2693
+2694
+2695
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2704
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2722
+2723
+2724
+2725
+2726
+2727
+2728
+2729
+2730
+2731
+2732
+2733
+2734
+2735
+2736
+2737
+2738
+2739
+2740
+2741
+2742
+2743
+2744
+2745
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2757
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2774
+2775
+2776
+2777
+2778
+2779
+2780
+2781
+2782
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2798
+2799
+2800
+2801
+2802
+2803
+2804
+2805
+2806
+2807
+2808
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2819
+2820
+2821
+2822
+2823
+2824
+2825
+2826
+2827
+2828
+2829
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2840
+2841
+2842
+2843
+2844
+2845
+2846
+2847
+2848
+2849
+2850
+2851
+2852
+2853
+2854
+2855
+2856
+2857
+2858
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2866
+2867
+2868
+2869
+2870
+2871
+2872
+2873
+2874
+2875
+2876
+2877
+2878
+2879
+2880
+2881
+2882
+2883
+2884
+2885
+2886
+2887
+2888
+2889
+2890
+2891
+2892
+2893
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2901
+2902
+2903
+2904
+2905
+2906
+2907
+2908
+2909
+2910
+2911
+2912
+2913
+2914
+2915
+2916
+2917
+2918
+2919
+2920
+2921
+2922
+2923
+2924
+2925
+2926
+2927
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2936
+2937
+2938
+2939
+2940
+2941
+2942
+2943
+2944
+2945
+2946
+2947
+2948
+2949
+2950
+2951
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2959
+2960
+2961
+2962
+2963
+2964
+2965
+2966
+2967
+2968
+2969
+2970
+2971
+2972
+2973
+2974
+2975
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2992
+2993
+2994
+2995
+2996
+2997
+2998
+2999
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3008
+3009
+3010
+3011
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3023
+3024
+3025
+3026
+3027
+3028
+3029
+3030
+3031
+3032
+3033
+3034
+3035
+3036
+3037
+3038
+3039
+3040
+3041
+3042
+3043
+3044
+3045
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3059
+3060
+3061
+3062
+3063
+3064
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3077
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3091
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3099
+3100
+3101
+3102
+3103
+3104
+3105
+3106
+3107
+3108
+3109
+3110
+3111
+3112
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3121
+3122
+3123
+3124
+3125
+3126
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3134
+3135
+3136
+3137
+3138
+3139
+3140
+3141
+3142
+3143
+3144
+3145
+3146
+3147
+3148
+3149
+3150
+3151
+3152
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+3160
+3161
+3162
+3163
+3164
+3165
+3166
+3167
+3168
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3183
+3184
+3185
+3186
+3187
+3188
+3189
+3190
+3191
+3192
+3193
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3202
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3210
+3211
+3212
+3213
+3214
+3215
+3216
+3217
+3218
+3219
+3220
+3221
+3222
+3223
+3224
+3225
+3226
+3227
+3228
+3229
+3230
+3231
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3239
+3240
+3241
+3242
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3251
+3252
+3253
+3254
+3255
+3256
+3257
+3258
+3259
+3260
+3261
+3262
+3263
+3264
+3265
+3266
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3284
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3296
+3297
+3298
+3299
+3300
+3301
+3302
+3303
+3304
+3305
+3306
+3307
+3308
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3316
+3317
+3318
+3319
+3320
+3321
+3322
+3323
+3324
+3325
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3333
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3344
+3345
+3346
+3347
+3348
+3349
+3350
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3372
+3373
+3374
+3375
+3376
+3377
+3378
+3379
+3380
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3389
+3390
+3391
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3399
+3400
+3401
+3402
+3403
+3404
+3405
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3423
+3424
+3425
+3426
+3427
+3428
+3429
+3430
+3431
+3432
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+3446
+3447
+3448
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3465
+3466
+3467
+3468
+3469
+3470
+3471
+3472
+3473
+3474
+3475
+3476
+3477
+3478
+3479
+3480
+3481
+3482
+3483
+3484
+3485
+3486
+3487
+3488
+3489
+3490
+3491
+3492
+3493
+3494
+3495
+3496
+3497
+3498
+3499
+3500
+3501
+3502
+3503
+3504
+3505
+3506
+3507
+3508
+3509
+3510
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3518
+3519
+3520
+3521
+3522
+3523
+3524
+3525
+3526
+3527
+3528
+3529
+3530
+3531
+3532
+3533
+3534
+3535
+3536
+3537
+3538
+3539
+3540
+3541
+3542
+3543
+3544
+3545
+3546
+3547
+3548
+3549
+3550
+3551
+3552
+3553
+3554
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3562
+3563
+3564
+3565
+3566
+3567
+3568
+3569
+3570
+3571
+3572
+3573
+3574
+3575
+3576
+3577
+3578
+3579
+3580
+3581
+3582
+3583
+3584
+3585
+3586
+3587
+3588
+3589
+3590
+3591
+3592
+3593
+3594
+3595
+3596
+3597
+3598
+3599
+3600
+3601
+3602
+3603
+3604
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3612
+3613
+3614
+3615
+3616
+3617
+3618
+3619
+3620
+3621
+3622
+3623
+3624
+3625
+3626
+3627
+3628
+3629
+3630
+3631
+3632
+3633
+3634
+3635
+3636
+3637
+3638
+3639
+3640
+3641
+3642
+3643
+3644
+3645
+3646
+3647
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3656
+3657
+3658
+3659
+3660
+3661
+3662
+3663
+3664
+3665
+3666
+3667
+3668
+3669
+3670
+3671
+3672
+3673
+3674
+3675
+3676
+3677
+3678
+3679
+3680
+3681
+3682
+3683
+3684
+3685
+3686
+3687
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3695
+3696
+3697
+3698
+3699
+3700
+3701
+3702
+3703
+3704
+3705
+3706
+3707
+3708
+3709
+3710
+3711
+3712
+3713
+3714
+3715
+3716
+3717
+3718
+3719
+3720
+3721
+3722
+3723
+3724
+3725
+3726
+3727
+3728
+3729
+3730
+3731
+3732
+3733
+3734
+3735
+3736
+3737
+3738
+3739
+3740
+3741
+3742
+3743
+3744
+3745
+3746
+3747
+3748
+3749
+3750
+3751
+3752
+3753
+3754
+3755
+3756
+3757
+3758
+3759
+3760
+3761
+3762
+3763
+3764
+3765
+3766
+3767
+3768
+3769
+3770
+3771
+3772
+3773
+3774
+3775
+3776
+3777
+3778
+3779
+3780
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3790
+3791
+3792
+3793
+3794
+3795
+3796
+3797
+3798
+3799
+3800
+3801
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3810
+3811
+3812
+3813
+3814
+3815
+3816
+3817
+3818
+3819
+3820
+3821
+3822
+3823
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3840
+3841
+3842
+3843
+3844
+3845
+3846
+3847
+3848
+3849
+3850
+3851
+3852
+3853
+3854
+3855
+3856
+3857
+3858
+3859
+3860
+3861
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3874
+3875
+3876
+3877
+3878
+3879
+3880
+3881
+3882
+3883
+3884
+3885
+3886
+3887
+3888
+3889
+3890
+3891
+3892
+3893
+3894
+3895
+3896
+3897
+3898
+3899
+3900
+3901
+3902
+3903
+3904
+3905
+3906
+3907
+3908
+3909
+3910
+3911
+3912
+3913
+3914
+3915
+3916
+3917
+3918
+3919
+3920
+3921
+3922
+3923
+3924
+3925
+3926
+3927
+3928
+3929
+3930
+3931
+3932
+3933
+3934
+3935
+3936
+3937
+3938
+3939
+3940
+3941
+3942
+3943
+3944
+3945
+3946
+3947
+3948
+3949
+3950
+3951
+3952
+3953
+3954
+3955
+3956
+3957
+3958
+3959
+3960
+3961
+3962
+3963
+3964
+3965
+3966
+3967
+3968
+3969
+3970
+3971
+3972
+3973
+3974
+3975
+3976
+3977
+3978
+3979
+3980
+3981
+3982
+3983
+3984
+3985
+3986
+3987
+3988
+3989
+3990
+3991
+3992
+3993
+3994
+3995
+3996
+3997
+3998
+3999
+4000
+4001
+4002
+4003
+4004
+4005
+4006
+4007
+4008
+4009
+4010
+4011
+4012
+4013
+4014
+4015
+4016
+4017
+4018
+4019
+4020
+4021
+4022
+4023
+4024
+4025
+4026
+4027
+4028
+4029
+4030
+4031
+4032
+4033
+4034
+4035
+4036
+4037
+4038
+4039
+4040
+4041
+4042
+4043
+4044
+4045
+4046
+4047
+4048
+4049
+4050
+4051
+4052
+4053
+4054
+4055
+4056
+4057
+4058
+4059
+4060
+4061
+4062
+4063
+4064
+4065
+4066
+4067
+4068
+4069
+4070
+4071
+4072
+4073
+4074
+4075
+4076
+4077
+4078
+4079
+4080
+4081
+4082
+4083
+4084
+4085
+4086
+4087
+4088
+4089
+4090
+4091
+4092
+4093
+4094
+4095
+4096
+4097
+4098
+4099
+4100
+4101
+4102
+4103
+4104
+4105
+4106
+4107
+4108
+4109
+4110
+4111
+4112
+4113
+4114
+4115
+4116
+4117
+4118
+4119
+4120
+4121
+4122
+4123
+4124
+4125
+4126
+4127
+4128
+4129
+4130
+4131
+4132
+4133
+4134
+4135
+4136
+4137
+4138
+4139
+4140
+4141
+4142
+4143
+4144
+4145
+4146
+4147
+4148
+4149
+4150
+4151
+4152
+4153
+4154
+4155
+4156
+4157
+4158
+4159
+4160
+4161
+4162
+4163
+4164
+4165
+4166
+4167
+4168
+4169
+4170
+4171
+4172
+4173
+4174
+4175
+4176
+4177
+4178
+4179
+4180
+4181
+4182
+4183
+4184
+4185
+4186
+4187
+4188
+4189
+4190
+4191
+4192
+4193
+4194
+4195
+4196
+4197
+4198
+4199
+4200
+4201
+4202
+4203
+4204
+4205
+4206
+4207
+4208
+4209
+4210
+4211
+4212
+4213
+4214
+4215
+4216
+4217
+4218
+4219
+4220
+4221
+4222
+4223
+4224
+4225
+4226
+4227
+4228
+4229
+4230
+4231
+4232
+4233
+4234
+4235
+4236
+4237
+4238
+4239
+4240
+4241
+4242
+4243
+4244
+4245
+4246
+4247
+4248
+4249
+4250
+4251
+4252
+4253
+4254
+4255
+4256
+4257
+4258
+4259
+4260
+4261
+4262
+4263
+4264
+4265
+4266
+4267
+4268
+4269
+4270
+4271
+4272
+4273
+4274
+4275
+4276
+4277
+4278
+4279
+4280
+4281
+4282
+4283
+4284
+4285
+4286
+4287
+4288
+4289
+4290
+4291
+4292
+4293
+4294
+4295
+4296
+4297
+4298
+4299
+4300
+4301
+4302
+4303
+4304
+4305
+4306
+4307
+4308
+4309
+4310
+4311
+4312
+4313
+4314
+4315
+4316
+4317
+4318
+4319
+4320
+4321
+4322
+4323
+4324
+4325
+4326
+4327
+4328
+4329
+4330
+4331
+4332
+4333
+4334
+4335
+4336
+4337
+4338
+4339
+4340
+4341
+4342
+4343
+4344
+4345
+4346
+4347
+4348
+4349
+4350
+4351
+4352
+4353
+4354
+4355
+4356
+4357
+4358
+4359
+4360
+4361
+4362
+4363
+4364
+4365
+4366
+4367
+4368
+4369
+4370
+4371
+4372
+4373
+4374
+4375
+4376
+4377
+4378
+4379
+4380
+4381
+4382
+4383
+4384
+4385
+4386
+4387
+4388
+4389
+4390
+4391
+4392
+4393
+4394
+4395
+4396
+4397
+4398
+4399
+4400
+4401
+4402
+4403
+4404
+4405
+4406
+4407
+4408
+4409
+4410
+4411
+4412
+4413
+4414
+4415
+4416
+4417
+4418
+4419
+4420
+4421
+4422
+4423
+4424
+4425
+4426
+4427
+4428
+4429
+4430
+4431
+4432
+4433
+4434
+4435
+4436
+4437
+4438
+4439
+4440
+4441
+4442
+4443
+4444
+4445
+4446
+4447
+4448
+4449
+4450
+4451
+4452
+4453
+4454
+4455
+4456
+4457
+4458
+4459
+4460
+4461
+4462
+4463
+4464
+4465
+4466
+4467
+4468
+4469
+4470
+4471
+4472
+4473
+4474
+4475
+4476
+4477
+4478
+4479
+4480
+4481
+4482
+4483
+4484
+4485
+4486
+4487
+4488
+4489
+4490
+4491
+4492
+4493
+4494
+4495
+4496
+4497
+4498
+4499
+4500
+4501
+4502
+4503
+4504
+4505
+4506
+4507
+4508
+4509
+4510
+4511
+4512
+4513
+4514
+4515
+4516
+4517
+4518
+4519
+4520
+4521
+4522
+4523
+4524
+4525
+4526
+4527
+4528
+4529
+4530
+4531
+4532
+4533
+4534
+4535
+4536
+4537
+4538
+4539
+4540
+4541
+4542
+4543
+4544
+4545
+4546
+4547
+4548
+4549
+4550
+4551
+4552
+4553
+4554
+4555
+4556
+4557
+4558
+4559
+4560
+4561
+4562
+4563
+4564
+4565
+4566
+4567
+4568
+4569
+4570
+4571
+4572
+4573
+4574
+4575
+4576
+4577
+4578
+4579
+4580
+4581
+4582
+4583
+4584
+4585
+4586
+4587
+4588
+4589
+4590
+4591
+4592
+4593
+4594
+4595
+4596
+4597
+4598
+4599
+4600
+4601
+4602
+4603
+4604
+4605
+4606
+4607
+4608
+4609
+4610
+4611
+4612
+4613
+4614
+4615
+4616
+4617
+4618
+4619
+4620
+4621
+4622
+4623
+4624
+4625
+4626
+4627
+4628
+4629
+4630
+4631
+4632
+4633
+4634
+4635
+4636
+4637
+4638
+4639
+4640
+4641
+4642
+4643
+4644
+4645
+4646
+4647
+4648
+4649
+4650
+4651
+4652
+4653
+4654
+4655
+4656
+4657
+4658
+4659
+4660
+4661
+4662
+4663
+4664
+4665
+4666
+4667
+4668
+4669
+4670
+4671
+4672
+4673
+4674
+4675
+4676
+4677
+4678
+4679
+4680
+4681
+4682
+4683
+4684
+4685
+4686
+4687
+4688
+4689
+4690
+4691
+4692
+4693
+4694
+4695
+4696
+4697
+4698
+4699
+4700
+4701
+4702
+4703
+4704
+4705
+4706
+4707
+4708
+4709
+4710
+4711
+4712
+4713
+4714
+4715
+4716
+4717
+4718
+4719
+4720
+4721
+4722
+4723
+4724
+4725
+4726
+4727
+4728
+4729
+4730
+4731
+4732
+4733
+4734
+4735
+4736
+4737
+4738
+4739
+4740
+4741
+4742
+4743
+4744
+4745
+4746
+4747
+4748
+4749
+4750
+4751
+4752
+4753
+4754
+4755
+4756
+4757
+4758
+4759
+4760
+4761
+4762
+4763
+4764
+4765
+4766
+4767
+4768
+4769
+4770
+4771
+4772
+4773
+4774
+4775
+4776
+4777
+4778
+4779
+4780
+4781
+4782
+4783
+4784
+4785
+4786
+4787
+4788
+4789
+4790
+4791
+4792
+4793
+4794
+4795
+4796
+4797
+4798
+4799
+4800
+4801
+4802
+4803
+4804
+4805
+4806
+4807
+4808
+4809
+4810
+4811
+4812
+4813
+4814
+4815
+4816
+4817
+4818
+4819
+4820
+4821
+4822
+4823
+4824
+4825
+4826
+4827
+4828
+4829
+4830
+4831
+4832
+4833
+4834
+4835
+4836
+4837
+4838
+4839
+4840
+4841
+4842
+4843
+4844
+4845
+4846
+4847
+4848
+4849
+4850
+4851
+4852
+4853
+4854
+4855
+4856
+4857
+4858
+4859
+4860
+4861
+4862
+4863
+4864
+4865
+4866
+4867
+4868
+4869
+4870
+4871
+4872
+4873
+4874
+4875
+4876
+4877
+4878
+4879
+4880
+4881
+4882
+4883
+4884
+4885
+4886
+4887
+4888
+4889
+4890
+4891
+4892
+4893
+4894
+4895
+4896
+4897
+4898
+4899
+4900
+4901
+4902
+4903
+4904
+4905
+4906
+4907
+4908
+4909
+4910
+4911
+4912
+4913
+4914
+4915
+4916
+4917
+4918
+4919
+4920
+4921
+4922
+4923
+4924
+4925
+4926
+4927
+4928
+4929
+4930
+4931
+4932
+4933
+4934
+4935
+4936
+4937
+4938
+4939
+4940
+4941
+4942
+4943
+4944
+4945
+4946
+4947
+4948
+4949
+4950
+4951
+4952
+4953
+4954
+4955
+4956
+4957
+4958
+4959
+4960
+4961
+4962
+4963
+4964
+4965
+4966
+4967
+4968
+4969
+4970
+4971
+4972
+4973
+4974
+4975
+4976
+4977
+4978
+4979
+4980
+4981
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+4990
+4991
+4992
+4993
+4994
+4995
+4996
+4997
+4998
+4999
+Stopping
Index: src/tests/.expect/concurrent/sched-ext-dtor.txt
===================================================================
--- src/tests/.expect/concurrent/sched-ext-dtor.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/concurrent/sched-ext-dtor.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,2 @@
+Starting
+Stopping
Index: src/tests/.expect/concurrent/sched-ext-else.txt
===================================================================
--- src/tests/.expect/concurrent/sched-ext-else.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/concurrent/sched-ext-else.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,9 @@
+Starting
+Step 0
+else called
+Step 1
+else called
+Step 2
+else called
+Step 3
+Done
Index: src/tests/.expect/concurrent/sched-ext-recurse.txt
===================================================================
--- src/tests/.expect/concurrent/sched-ext-recurse.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/concurrent/sched-ext-recurse.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,5002 @@
+Starting
+0 1st 2nd 3rd Last 3rd 2nd 1st
+1 1st 2nd 3rd Last 3rd 2nd 1st
+2 1st 2nd 3rd Last 3rd 2nd 1st
+3 1st 2nd 3rd Last 3rd 2nd 1st
+4 1st 2nd 3rd Last 3rd 2nd 1st
+5 1st 2nd 3rd Last 3rd 2nd 1st
+6 1st 2nd 3rd Last 3rd 2nd 1st
+7 1st 2nd 3rd Last 3rd 2nd 1st
+8 1st 2nd 3rd Last 3rd 2nd 1st
+9 1st 2nd 3rd Last 3rd 2nd 1st
+10 1st 2nd 3rd Last 3rd 2nd 1st
+11 1st 2nd 3rd Last 3rd 2nd 1st
+12 1st 2nd 3rd Last 3rd 2nd 1st
+13 1st 2nd 3rd Last 3rd 2nd 1st
+14 1st 2nd 3rd Last 3rd 2nd 1st
+15 1st 2nd 3rd Last 3rd 2nd 1st
+16 1st 2nd 3rd Last 3rd 2nd 1st
+17 1st 2nd 3rd Last 3rd 2nd 1st
+18 1st 2nd 3rd Last 3rd 2nd 1st
+19 1st 2nd 3rd Last 3rd 2nd 1st
+20 1st 2nd 3rd Last 3rd 2nd 1st
+21 1st 2nd 3rd Last 3rd 2nd 1st
+22 1st 2nd 3rd Last 3rd 2nd 1st
+23 1st 2nd 3rd Last 3rd 2nd 1st
+24 1st 2nd 3rd Last 3rd 2nd 1st
+25 1st 2nd 3rd Last 3rd 2nd 1st
+26 1st 2nd 3rd Last 3rd 2nd 1st
+27 1st 2nd 3rd Last 3rd 2nd 1st
+28 1st 2nd 3rd Last 3rd 2nd 1st
+29 1st 2nd 3rd Last 3rd 2nd 1st
+30 1st 2nd 3rd Last 3rd 2nd 1st
+31 1st 2nd 3rd Last 3rd 2nd 1st
+32 1st 2nd 3rd Last 3rd 2nd 1st
+33 1st 2nd 3rd Last 3rd 2nd 1st
+34 1st 2nd 3rd Last 3rd 2nd 1st
+35 1st 2nd 3rd Last 3rd 2nd 1st
+36 1st 2nd 3rd Last 3rd 2nd 1st
+37 1st 2nd 3rd Last 3rd 2nd 1st
+38 1st 2nd 3rd Last 3rd 2nd 1st
+39 1st 2nd 3rd Last 3rd 2nd 1st
+40 1st 2nd 3rd Last 3rd 2nd 1st
+41 1st 2nd 3rd Last 3rd 2nd 1st
+42 1st 2nd 3rd Last 3rd 2nd 1st
+43 1st 2nd 3rd Last 3rd 2nd 1st
+44 1st 2nd 3rd Last 3rd 2nd 1st
+45 1st 2nd 3rd Last 3rd 2nd 1st
+46 1st 2nd 3rd Last 3rd 2nd 1st
+47 1st 2nd 3rd Last 3rd 2nd 1st
+48 1st 2nd 3rd Last 3rd 2nd 1st
+49 1st 2nd 3rd Last 3rd 2nd 1st
+50 1st 2nd 3rd Last 3rd 2nd 1st
+51 1st 2nd 3rd Last 3rd 2nd 1st
+52 1st 2nd 3rd Last 3rd 2nd 1st
+53 1st 2nd 3rd Last 3rd 2nd 1st
+54 1st 2nd 3rd Last 3rd 2nd 1st
+55 1st 2nd 3rd Last 3rd 2nd 1st
+56 1st 2nd 3rd Last 3rd 2nd 1st
+57 1st 2nd 3rd Last 3rd 2nd 1st
+58 1st 2nd 3rd Last 3rd 2nd 1st
+59 1st 2nd 3rd Last 3rd 2nd 1st
+60 1st 2nd 3rd Last 3rd 2nd 1st
+61 1st 2nd 3rd Last 3rd 2nd 1st
+62 1st 2nd 3rd Last 3rd 2nd 1st
+63 1st 2nd 3rd Last 3rd 2nd 1st
+64 1st 2nd 3rd Last 3rd 2nd 1st
+65 1st 2nd 3rd Last 3rd 2nd 1st
+66 1st 2nd 3rd Last 3rd 2nd 1st
+67 1st 2nd 3rd Last 3rd 2nd 1st
+68 1st 2nd 3rd Last 3rd 2nd 1st
+69 1st 2nd 3rd Last 3rd 2nd 1st
+70 1st 2nd 3rd Last 3rd 2nd 1st
+71 1st 2nd 3rd Last 3rd 2nd 1st
+72 1st 2nd 3rd Last 3rd 2nd 1st
+73 1st 2nd 3rd Last 3rd 2nd 1st
+74 1st 2nd 3rd Last 3rd 2nd 1st
+75 1st 2nd 3rd Last 3rd 2nd 1st
+76 1st 2nd 3rd Last 3rd 2nd 1st
+77 1st 2nd 3rd Last 3rd 2nd 1st
+78 1st 2nd 3rd Last 3rd 2nd 1st
+79 1st 2nd 3rd Last 3rd 2nd 1st
+80 1st 2nd 3rd Last 3rd 2nd 1st
+81 1st 2nd 3rd Last 3rd 2nd 1st
+82 1st 2nd 3rd Last 3rd 2nd 1st
+83 1st 2nd 3rd Last 3rd 2nd 1st
+84 1st 2nd 3rd Last 3rd 2nd 1st
+85 1st 2nd 3rd Last 3rd 2nd 1st
+86 1st 2nd 3rd Last 3rd 2nd 1st
+87 1st 2nd 3rd Last 3rd 2nd 1st
+88 1st 2nd 3rd Last 3rd 2nd 1st
+89 1st 2nd 3rd Last 3rd 2nd 1st
+90 1st 2nd 3rd Last 3rd 2nd 1st
+91 1st 2nd 3rd Last 3rd 2nd 1st
+92 1st 2nd 3rd Last 3rd 2nd 1st
+93 1st 2nd 3rd Last 3rd 2nd 1st
+94 1st 2nd 3rd Last 3rd 2nd 1st
+95 1st 2nd 3rd Last 3rd 2nd 1st
+96 1st 2nd 3rd Last 3rd 2nd 1st
+97 1st 2nd 3rd Last 3rd 2nd 1st
+98 1st 2nd 3rd Last 3rd 2nd 1st
+99 1st 2nd 3rd Last 3rd 2nd 1st
+100 1st 2nd 3rd Last 3rd 2nd 1st
+101 1st 2nd 3rd Last 3rd 2nd 1st
+102 1st 2nd 3rd Last 3rd 2nd 1st
+103 1st 2nd 3rd Last 3rd 2nd 1st
+104 1st 2nd 3rd Last 3rd 2nd 1st
+105 1st 2nd 3rd Last 3rd 2nd 1st
+106 1st 2nd 3rd Last 3rd 2nd 1st
+107 1st 2nd 3rd Last 3rd 2nd 1st
+108 1st 2nd 3rd Last 3rd 2nd 1st
+109 1st 2nd 3rd Last 3rd 2nd 1st
+110 1st 2nd 3rd Last 3rd 2nd 1st
+111 1st 2nd 3rd Last 3rd 2nd 1st
+112 1st 2nd 3rd Last 3rd 2nd 1st
+113 1st 2nd 3rd Last 3rd 2nd 1st
+114 1st 2nd 3rd Last 3rd 2nd 1st
+115 1st 2nd 3rd Last 3rd 2nd 1st
+116 1st 2nd 3rd Last 3rd 2nd 1st
+117 1st 2nd 3rd Last 3rd 2nd 1st
+118 1st 2nd 3rd Last 3rd 2nd 1st
+119 1st 2nd 3rd Last 3rd 2nd 1st
+120 1st 2nd 3rd Last 3rd 2nd 1st
+121 1st 2nd 3rd Last 3rd 2nd 1st
+122 1st 2nd 3rd Last 3rd 2nd 1st
+123 1st 2nd 3rd Last 3rd 2nd 1st
+124 1st 2nd 3rd Last 3rd 2nd 1st
+125 1st 2nd 3rd Last 3rd 2nd 1st
+126 1st 2nd 3rd Last 3rd 2nd 1st
+127 1st 2nd 3rd Last 3rd 2nd 1st
+128 1st 2nd 3rd Last 3rd 2nd 1st
+129 1st 2nd 3rd Last 3rd 2nd 1st
+130 1st 2nd 3rd Last 3rd 2nd 1st
+131 1st 2nd 3rd Last 3rd 2nd 1st
+132 1st 2nd 3rd Last 3rd 2nd 1st
+133 1st 2nd 3rd Last 3rd 2nd 1st
+134 1st 2nd 3rd Last 3rd 2nd 1st
+135 1st 2nd 3rd Last 3rd 2nd 1st
+136 1st 2nd 3rd Last 3rd 2nd 1st
+137 1st 2nd 3rd Last 3rd 2nd 1st
+138 1st 2nd 3rd Last 3rd 2nd 1st
+139 1st 2nd 3rd Last 3rd 2nd 1st
+140 1st 2nd 3rd Last 3rd 2nd 1st
+141 1st 2nd 3rd Last 3rd 2nd 1st
+142 1st 2nd 3rd Last 3rd 2nd 1st
+143 1st 2nd 3rd Last 3rd 2nd 1st
+144 1st 2nd 3rd Last 3rd 2nd 1st
+145 1st 2nd 3rd Last 3rd 2nd 1st
+146 1st 2nd 3rd Last 3rd 2nd 1st
+147 1st 2nd 3rd Last 3rd 2nd 1st
+148 1st 2nd 3rd Last 3rd 2nd 1st
+149 1st 2nd 3rd Last 3rd 2nd 1st
+150 1st 2nd 3rd Last 3rd 2nd 1st
+151 1st 2nd 3rd Last 3rd 2nd 1st
+152 1st 2nd 3rd Last 3rd 2nd 1st
+153 1st 2nd 3rd Last 3rd 2nd 1st
+154 1st 2nd 3rd Last 3rd 2nd 1st
+155 1st 2nd 3rd Last 3rd 2nd 1st
+156 1st 2nd 3rd Last 3rd 2nd 1st
+157 1st 2nd 3rd Last 3rd 2nd 1st
+158 1st 2nd 3rd Last 3rd 2nd 1st
+159 1st 2nd 3rd Last 3rd 2nd 1st
+160 1st 2nd 3rd Last 3rd 2nd 1st
+161 1st 2nd 3rd Last 3rd 2nd 1st
+162 1st 2nd 3rd Last 3rd 2nd 1st
+163 1st 2nd 3rd Last 3rd 2nd 1st
+164 1st 2nd 3rd Last 3rd 2nd 1st
+165 1st 2nd 3rd Last 3rd 2nd 1st
+166 1st 2nd 3rd Last 3rd 2nd 1st
+167 1st 2nd 3rd Last 3rd 2nd 1st
+168 1st 2nd 3rd Last 3rd 2nd 1st
+169 1st 2nd 3rd Last 3rd 2nd 1st
+170 1st 2nd 3rd Last 3rd 2nd 1st
+171 1st 2nd 3rd Last 3rd 2nd 1st
+172 1st 2nd 3rd Last 3rd 2nd 1st
+173 1st 2nd 3rd Last 3rd 2nd 1st
+174 1st 2nd 3rd Last 3rd 2nd 1st
+175 1st 2nd 3rd Last 3rd 2nd 1st
+176 1st 2nd 3rd Last 3rd 2nd 1st
+177 1st 2nd 3rd Last 3rd 2nd 1st
+178 1st 2nd 3rd Last 3rd 2nd 1st
+179 1st 2nd 3rd Last 3rd 2nd 1st
+180 1st 2nd 3rd Last 3rd 2nd 1st
+181 1st 2nd 3rd Last 3rd 2nd 1st
+182 1st 2nd 3rd Last 3rd 2nd 1st
+183 1st 2nd 3rd Last 3rd 2nd 1st
+184 1st 2nd 3rd Last 3rd 2nd 1st
+185 1st 2nd 3rd Last 3rd 2nd 1st
+186 1st 2nd 3rd Last 3rd 2nd 1st
+187 1st 2nd 3rd Last 3rd 2nd 1st
+188 1st 2nd 3rd Last 3rd 2nd 1st
+189 1st 2nd 3rd Last 3rd 2nd 1st
+190 1st 2nd 3rd Last 3rd 2nd 1st
+191 1st 2nd 3rd Last 3rd 2nd 1st
+192 1st 2nd 3rd Last 3rd 2nd 1st
+193 1st 2nd 3rd Last 3rd 2nd 1st
+194 1st 2nd 3rd Last 3rd 2nd 1st
+195 1st 2nd 3rd Last 3rd 2nd 1st
+196 1st 2nd 3rd Last 3rd 2nd 1st
+197 1st 2nd 3rd Last 3rd 2nd 1st
+198 1st 2nd 3rd Last 3rd 2nd 1st
+199 1st 2nd 3rd Last 3rd 2nd 1st
+200 1st 2nd 3rd Last 3rd 2nd 1st
+201 1st 2nd 3rd Last 3rd 2nd 1st
+202 1st 2nd 3rd Last 3rd 2nd 1st
+203 1st 2nd 3rd Last 3rd 2nd 1st
+204 1st 2nd 3rd Last 3rd 2nd 1st
+205 1st 2nd 3rd Last 3rd 2nd 1st
+206 1st 2nd 3rd Last 3rd 2nd 1st
+207 1st 2nd 3rd Last 3rd 2nd 1st
+208 1st 2nd 3rd Last 3rd 2nd 1st
+209 1st 2nd 3rd Last 3rd 2nd 1st
+210 1st 2nd 3rd Last 3rd 2nd 1st
+211 1st 2nd 3rd Last 3rd 2nd 1st
+212 1st 2nd 3rd Last 3rd 2nd 1st
+213 1st 2nd 3rd Last 3rd 2nd 1st
+214 1st 2nd 3rd Last 3rd 2nd 1st
+215 1st 2nd 3rd Last 3rd 2nd 1st
+216 1st 2nd 3rd Last 3rd 2nd 1st
+217 1st 2nd 3rd Last 3rd 2nd 1st
+218 1st 2nd 3rd Last 3rd 2nd 1st
+219 1st 2nd 3rd Last 3rd 2nd 1st
+220 1st 2nd 3rd Last 3rd 2nd 1st
+221 1st 2nd 3rd Last 3rd 2nd 1st
+222 1st 2nd 3rd Last 3rd 2nd 1st
+223 1st 2nd 3rd Last 3rd 2nd 1st
+224 1st 2nd 3rd Last 3rd 2nd 1st
+225 1st 2nd 3rd Last 3rd 2nd 1st
+226 1st 2nd 3rd Last 3rd 2nd 1st
+227 1st 2nd 3rd Last 3rd 2nd 1st
+228 1st 2nd 3rd Last 3rd 2nd 1st
+229 1st 2nd 3rd Last 3rd 2nd 1st
+230 1st 2nd 3rd Last 3rd 2nd 1st
+231 1st 2nd 3rd Last 3rd 2nd 1st
+232 1st 2nd 3rd Last 3rd 2nd 1st
+233 1st 2nd 3rd Last 3rd 2nd 1st
+234 1st 2nd 3rd Last 3rd 2nd 1st
+235 1st 2nd 3rd Last 3rd 2nd 1st
+236 1st 2nd 3rd Last 3rd 2nd 1st
+237 1st 2nd 3rd Last 3rd 2nd 1st
+238 1st 2nd 3rd Last 3rd 2nd 1st
+239 1st 2nd 3rd Last 3rd 2nd 1st
+240 1st 2nd 3rd Last 3rd 2nd 1st
+241 1st 2nd 3rd Last 3rd 2nd 1st
+242 1st 2nd 3rd Last 3rd 2nd 1st
+243 1st 2nd 3rd Last 3rd 2nd 1st
+244 1st 2nd 3rd Last 3rd 2nd 1st
+245 1st 2nd 3rd Last 3rd 2nd 1st
+246 1st 2nd 3rd Last 3rd 2nd 1st
+247 1st 2nd 3rd Last 3rd 2nd 1st
+248 1st 2nd 3rd Last 3rd 2nd 1st
+249 1st 2nd 3rd Last 3rd 2nd 1st
+250 1st 2nd 3rd Last 3rd 2nd 1st
+251 1st 2nd 3rd Last 3rd 2nd 1st
+252 1st 2nd 3rd Last 3rd 2nd 1st
+253 1st 2nd 3rd Last 3rd 2nd 1st
+254 1st 2nd 3rd Last 3rd 2nd 1st
+255 1st 2nd 3rd Last 3rd 2nd 1st
+256 1st 2nd 3rd Last 3rd 2nd 1st
+257 1st 2nd 3rd Last 3rd 2nd 1st
+258 1st 2nd 3rd Last 3rd 2nd 1st
+259 1st 2nd 3rd Last 3rd 2nd 1st
+260 1st 2nd 3rd Last 3rd 2nd 1st
+261 1st 2nd 3rd Last 3rd 2nd 1st
+262 1st 2nd 3rd Last 3rd 2nd 1st
+263 1st 2nd 3rd Last 3rd 2nd 1st
+264 1st 2nd 3rd Last 3rd 2nd 1st
+265 1st 2nd 3rd Last 3rd 2nd 1st
+266 1st 2nd 3rd Last 3rd 2nd 1st
+267 1st 2nd 3rd Last 3rd 2nd 1st
+268 1st 2nd 3rd Last 3rd 2nd 1st
+269 1st 2nd 3rd Last 3rd 2nd 1st
+270 1st 2nd 3rd Last 3rd 2nd 1st
+271 1st 2nd 3rd Last 3rd 2nd 1st
+272 1st 2nd 3rd Last 3rd 2nd 1st
+273 1st 2nd 3rd Last 3rd 2nd 1st
+274 1st 2nd 3rd Last 3rd 2nd 1st
+275 1st 2nd 3rd Last 3rd 2nd 1st
+276 1st 2nd 3rd Last 3rd 2nd 1st
+277 1st 2nd 3rd Last 3rd 2nd 1st
+278 1st 2nd 3rd Last 3rd 2nd 1st
+279 1st 2nd 3rd Last 3rd 2nd 1st
+280 1st 2nd 3rd Last 3rd 2nd 1st
+281 1st 2nd 3rd Last 3rd 2nd 1st
+282 1st 2nd 3rd Last 3rd 2nd 1st
+283 1st 2nd 3rd Last 3rd 2nd 1st
+284 1st 2nd 3rd Last 3rd 2nd 1st
+285 1st 2nd 3rd Last 3rd 2nd 1st
+286 1st 2nd 3rd Last 3rd 2nd 1st
+287 1st 2nd 3rd Last 3rd 2nd 1st
+288 1st 2nd 3rd Last 3rd 2nd 1st
+289 1st 2nd 3rd Last 3rd 2nd 1st
+290 1st 2nd 3rd Last 3rd 2nd 1st
+291 1st 2nd 3rd Last 3rd 2nd 1st
+292 1st 2nd 3rd Last 3rd 2nd 1st
+293 1st 2nd 3rd Last 3rd 2nd 1st
+294 1st 2nd 3rd Last 3rd 2nd 1st
+295 1st 2nd 3rd Last 3rd 2nd 1st
+296 1st 2nd 3rd Last 3rd 2nd 1st
+297 1st 2nd 3rd Last 3rd 2nd 1st
+298 1st 2nd 3rd Last 3rd 2nd 1st
+299 1st 2nd 3rd Last 3rd 2nd 1st
+300 1st 2nd 3rd Last 3rd 2nd 1st
+301 1st 2nd 3rd Last 3rd 2nd 1st
+302 1st 2nd 3rd Last 3rd 2nd 1st
+303 1st 2nd 3rd Last 3rd 2nd 1st
+304 1st 2nd 3rd Last 3rd 2nd 1st
+305 1st 2nd 3rd Last 3rd 2nd 1st
+306 1st 2nd 3rd Last 3rd 2nd 1st
+307 1st 2nd 3rd Last 3rd 2nd 1st
+308 1st 2nd 3rd Last 3rd 2nd 1st
+309 1st 2nd 3rd Last 3rd 2nd 1st
+310 1st 2nd 3rd Last 3rd 2nd 1st
+311 1st 2nd 3rd Last 3rd 2nd 1st
+312 1st 2nd 3rd Last 3rd 2nd 1st
+313 1st 2nd 3rd Last 3rd 2nd 1st
+314 1st 2nd 3rd Last 3rd 2nd 1st
+315 1st 2nd 3rd Last 3rd 2nd 1st
+316 1st 2nd 3rd Last 3rd 2nd 1st
+317 1st 2nd 3rd Last 3rd 2nd 1st
+318 1st 2nd 3rd Last 3rd 2nd 1st
+319 1st 2nd 3rd Last 3rd 2nd 1st
+320 1st 2nd 3rd Last 3rd 2nd 1st
+321 1st 2nd 3rd Last 3rd 2nd 1st
+322 1st 2nd 3rd Last 3rd 2nd 1st
+323 1st 2nd 3rd Last 3rd 2nd 1st
+324 1st 2nd 3rd Last 3rd 2nd 1st
+325 1st 2nd 3rd Last 3rd 2nd 1st
+326 1st 2nd 3rd Last 3rd 2nd 1st
+327 1st 2nd 3rd Last 3rd 2nd 1st
+328 1st 2nd 3rd Last 3rd 2nd 1st
+329 1st 2nd 3rd Last 3rd 2nd 1st
+330 1st 2nd 3rd Last 3rd 2nd 1st
+331 1st 2nd 3rd Last 3rd 2nd 1st
+332 1st 2nd 3rd Last 3rd 2nd 1st
+333 1st 2nd 3rd Last 3rd 2nd 1st
+334 1st 2nd 3rd Last 3rd 2nd 1st
+335 1st 2nd 3rd Last 3rd 2nd 1st
+336 1st 2nd 3rd Last 3rd 2nd 1st
+337 1st 2nd 3rd Last 3rd 2nd 1st
+338 1st 2nd 3rd Last 3rd 2nd 1st
+339 1st 2nd 3rd Last 3rd 2nd 1st
+340 1st 2nd 3rd Last 3rd 2nd 1st
+341 1st 2nd 3rd Last 3rd 2nd 1st
+342 1st 2nd 3rd Last 3rd 2nd 1st
+343 1st 2nd 3rd Last 3rd 2nd 1st
+344 1st 2nd 3rd Last 3rd 2nd 1st
+345 1st 2nd 3rd Last 3rd 2nd 1st
+346 1st 2nd 3rd Last 3rd 2nd 1st
+347 1st 2nd 3rd Last 3rd 2nd 1st
+348 1st 2nd 3rd Last 3rd 2nd 1st
+349 1st 2nd 3rd Last 3rd 2nd 1st
+350 1st 2nd 3rd Last 3rd 2nd 1st
+351 1st 2nd 3rd Last 3rd 2nd 1st
+352 1st 2nd 3rd Last 3rd 2nd 1st
+353 1st 2nd 3rd Last 3rd 2nd 1st
+354 1st 2nd 3rd Last 3rd 2nd 1st
+355 1st 2nd 3rd Last 3rd 2nd 1st
+356 1st 2nd 3rd Last 3rd 2nd 1st
+357 1st 2nd 3rd Last 3rd 2nd 1st
+358 1st 2nd 3rd Last 3rd 2nd 1st
+359 1st 2nd 3rd Last 3rd 2nd 1st
+360 1st 2nd 3rd Last 3rd 2nd 1st
+361 1st 2nd 3rd Last 3rd 2nd 1st
+362 1st 2nd 3rd Last 3rd 2nd 1st
+363 1st 2nd 3rd Last 3rd 2nd 1st
+364 1st 2nd 3rd Last 3rd 2nd 1st
+365 1st 2nd 3rd Last 3rd 2nd 1st
+366 1st 2nd 3rd Last 3rd 2nd 1st
+367 1st 2nd 3rd Last 3rd 2nd 1st
+368 1st 2nd 3rd Last 3rd 2nd 1st
+369 1st 2nd 3rd Last 3rd 2nd 1st
+370 1st 2nd 3rd Last 3rd 2nd 1st
+371 1st 2nd 3rd Last 3rd 2nd 1st
+372 1st 2nd 3rd Last 3rd 2nd 1st
+373 1st 2nd 3rd Last 3rd 2nd 1st
+374 1st 2nd 3rd Last 3rd 2nd 1st
+375 1st 2nd 3rd Last 3rd 2nd 1st
+376 1st 2nd 3rd Last 3rd 2nd 1st
+377 1st 2nd 3rd Last 3rd 2nd 1st
+378 1st 2nd 3rd Last 3rd 2nd 1st
+379 1st 2nd 3rd Last 3rd 2nd 1st
+380 1st 2nd 3rd Last 3rd 2nd 1st
+381 1st 2nd 3rd Last 3rd 2nd 1st
+382 1st 2nd 3rd Last 3rd 2nd 1st
+383 1st 2nd 3rd Last 3rd 2nd 1st
+384 1st 2nd 3rd Last 3rd 2nd 1st
+385 1st 2nd 3rd Last 3rd 2nd 1st
+386 1st 2nd 3rd Last 3rd 2nd 1st
+387 1st 2nd 3rd Last 3rd 2nd 1st
+388 1st 2nd 3rd Last 3rd 2nd 1st
+389 1st 2nd 3rd Last 3rd 2nd 1st
+390 1st 2nd 3rd Last 3rd 2nd 1st
+391 1st 2nd 3rd Last 3rd 2nd 1st
+392 1st 2nd 3rd Last 3rd 2nd 1st
+393 1st 2nd 3rd Last 3rd 2nd 1st
+394 1st 2nd 3rd Last 3rd 2nd 1st
+395 1st 2nd 3rd Last 3rd 2nd 1st
+396 1st 2nd 3rd Last 3rd 2nd 1st
+397 1st 2nd 3rd Last 3rd 2nd 1st
+398 1st 2nd 3rd Last 3rd 2nd 1st
+399 1st 2nd 3rd Last 3rd 2nd 1st
+400 1st 2nd 3rd Last 3rd 2nd 1st
+401 1st 2nd 3rd Last 3rd 2nd 1st
+402 1st 2nd 3rd Last 3rd 2nd 1st
+403 1st 2nd 3rd Last 3rd 2nd 1st
+404 1st 2nd 3rd Last 3rd 2nd 1st
+405 1st 2nd 3rd Last 3rd 2nd 1st
+406 1st 2nd 3rd Last 3rd 2nd 1st
+407 1st 2nd 3rd Last 3rd 2nd 1st
+408 1st 2nd 3rd Last 3rd 2nd 1st
+409 1st 2nd 3rd Last 3rd 2nd 1st
+410 1st 2nd 3rd Last 3rd 2nd 1st
+411 1st 2nd 3rd Last 3rd 2nd 1st
+412 1st 2nd 3rd Last 3rd 2nd 1st
+413 1st 2nd 3rd Last 3rd 2nd 1st
+414 1st 2nd 3rd Last 3rd 2nd 1st
+415 1st 2nd 3rd Last 3rd 2nd 1st
+416 1st 2nd 3rd Last 3rd 2nd 1st
+417 1st 2nd 3rd Last 3rd 2nd 1st
+418 1st 2nd 3rd Last 3rd 2nd 1st
+419 1st 2nd 3rd Last 3rd 2nd 1st
+420 1st 2nd 3rd Last 3rd 2nd 1st
+421 1st 2nd 3rd Last 3rd 2nd 1st
+422 1st 2nd 3rd Last 3rd 2nd 1st
+423 1st 2nd 3rd Last 3rd 2nd 1st
+424 1st 2nd 3rd Last 3rd 2nd 1st
+425 1st 2nd 3rd Last 3rd 2nd 1st
+426 1st 2nd 3rd Last 3rd 2nd 1st
+427 1st 2nd 3rd Last 3rd 2nd 1st
+428 1st 2nd 3rd Last 3rd 2nd 1st
+429 1st 2nd 3rd Last 3rd 2nd 1st
+430 1st 2nd 3rd Last 3rd 2nd 1st
+431 1st 2nd 3rd Last 3rd 2nd 1st
+432 1st 2nd 3rd Last 3rd 2nd 1st
+433 1st 2nd 3rd Last 3rd 2nd 1st
+434 1st 2nd 3rd Last 3rd 2nd 1st
+435 1st 2nd 3rd Last 3rd 2nd 1st
+436 1st 2nd 3rd Last 3rd 2nd 1st
+437 1st 2nd 3rd Last 3rd 2nd 1st
+438 1st 2nd 3rd Last 3rd 2nd 1st
+439 1st 2nd 3rd Last 3rd 2nd 1st
+440 1st 2nd 3rd Last 3rd 2nd 1st
+441 1st 2nd 3rd Last 3rd 2nd 1st
+442 1st 2nd 3rd Last 3rd 2nd 1st
+443 1st 2nd 3rd Last 3rd 2nd 1st
+444 1st 2nd 3rd Last 3rd 2nd 1st
+445 1st 2nd 3rd Last 3rd 2nd 1st
+446 1st 2nd 3rd Last 3rd 2nd 1st
+447 1st 2nd 3rd Last 3rd 2nd 1st
+448 1st 2nd 3rd Last 3rd 2nd 1st
+449 1st 2nd 3rd Last 3rd 2nd 1st
+450 1st 2nd 3rd Last 3rd 2nd 1st
+451 1st 2nd 3rd Last 3rd 2nd 1st
+452 1st 2nd 3rd Last 3rd 2nd 1st
+453 1st 2nd 3rd Last 3rd 2nd 1st
+454 1st 2nd 3rd Last 3rd 2nd 1st
+455 1st 2nd 3rd Last 3rd 2nd 1st
+456 1st 2nd 3rd Last 3rd 2nd 1st
+457 1st 2nd 3rd Last 3rd 2nd 1st
+458 1st 2nd 3rd Last 3rd 2nd 1st
+459 1st 2nd 3rd Last 3rd 2nd 1st
+460 1st 2nd 3rd Last 3rd 2nd 1st
+461 1st 2nd 3rd Last 3rd 2nd 1st
+462 1st 2nd 3rd Last 3rd 2nd 1st
+463 1st 2nd 3rd Last 3rd 2nd 1st
+464 1st 2nd 3rd Last 3rd 2nd 1st
+465 1st 2nd 3rd Last 3rd 2nd 1st
+466 1st 2nd 3rd Last 3rd 2nd 1st
+467 1st 2nd 3rd Last 3rd 2nd 1st
+468 1st 2nd 3rd Last 3rd 2nd 1st
+469 1st 2nd 3rd Last 3rd 2nd 1st
+470 1st 2nd 3rd Last 3rd 2nd 1st
+471 1st 2nd 3rd Last 3rd 2nd 1st
+472 1st 2nd 3rd Last 3rd 2nd 1st
+473 1st 2nd 3rd Last 3rd 2nd 1st
+474 1st 2nd 3rd Last 3rd 2nd 1st
+475 1st 2nd 3rd Last 3rd 2nd 1st
+476 1st 2nd 3rd Last 3rd 2nd 1st
+477 1st 2nd 3rd Last 3rd 2nd 1st
+478 1st 2nd 3rd Last 3rd 2nd 1st
+479 1st 2nd 3rd Last 3rd 2nd 1st
+480 1st 2nd 3rd Last 3rd 2nd 1st
+481 1st 2nd 3rd Last 3rd 2nd 1st
+482 1st 2nd 3rd Last 3rd 2nd 1st
+483 1st 2nd 3rd Last 3rd 2nd 1st
+484 1st 2nd 3rd Last 3rd 2nd 1st
+485 1st 2nd 3rd Last 3rd 2nd 1st
+486 1st 2nd 3rd Last 3rd 2nd 1st
+487 1st 2nd 3rd Last 3rd 2nd 1st
+488 1st 2nd 3rd Last 3rd 2nd 1st
+489 1st 2nd 3rd Last 3rd 2nd 1st
+490 1st 2nd 3rd Last 3rd 2nd 1st
+491 1st 2nd 3rd Last 3rd 2nd 1st
+492 1st 2nd 3rd Last 3rd 2nd 1st
+493 1st 2nd 3rd Last 3rd 2nd 1st
+494 1st 2nd 3rd Last 3rd 2nd 1st
+495 1st 2nd 3rd Last 3rd 2nd 1st
+496 1st 2nd 3rd Last 3rd 2nd 1st
+497 1st 2nd 3rd Last 3rd 2nd 1st
+498 1st 2nd 3rd Last 3rd 2nd 1st
+499 1st 2nd 3rd Last 3rd 2nd 1st
+500 1st 2nd 3rd Last 3rd 2nd 1st
+501 1st 2nd 3rd Last 3rd 2nd 1st
+502 1st 2nd 3rd Last 3rd 2nd 1st
+503 1st 2nd 3rd Last 3rd 2nd 1st
+504 1st 2nd 3rd Last 3rd 2nd 1st
+505 1st 2nd 3rd Last 3rd 2nd 1st
+506 1st 2nd 3rd Last 3rd 2nd 1st
+507 1st 2nd 3rd Last 3rd 2nd 1st
+508 1st 2nd 3rd Last 3rd 2nd 1st
+509 1st 2nd 3rd Last 3rd 2nd 1st
+510 1st 2nd 3rd Last 3rd 2nd 1st
+511 1st 2nd 3rd Last 3rd 2nd 1st
+512 1st 2nd 3rd Last 3rd 2nd 1st
+513 1st 2nd 3rd Last 3rd 2nd 1st
+514 1st 2nd 3rd Last 3rd 2nd 1st
+515 1st 2nd 3rd Last 3rd 2nd 1st
+516 1st 2nd 3rd Last 3rd 2nd 1st
+517 1st 2nd 3rd Last 3rd 2nd 1st
+518 1st 2nd 3rd Last 3rd 2nd 1st
+519 1st 2nd 3rd Last 3rd 2nd 1st
+520 1st 2nd 3rd Last 3rd 2nd 1st
+521 1st 2nd 3rd Last 3rd 2nd 1st
+522 1st 2nd 3rd Last 3rd 2nd 1st
+523 1st 2nd 3rd Last 3rd 2nd 1st
+524 1st 2nd 3rd Last 3rd 2nd 1st
+525 1st 2nd 3rd Last 3rd 2nd 1st
+526 1st 2nd 3rd Last 3rd 2nd 1st
+527 1st 2nd 3rd Last 3rd 2nd 1st
+528 1st 2nd 3rd Last 3rd 2nd 1st
+529 1st 2nd 3rd Last 3rd 2nd 1st
+530 1st 2nd 3rd Last 3rd 2nd 1st
+531 1st 2nd 3rd Last 3rd 2nd 1st
+532 1st 2nd 3rd Last 3rd 2nd 1st
+533 1st 2nd 3rd Last 3rd 2nd 1st
+534 1st 2nd 3rd Last 3rd 2nd 1st
+535 1st 2nd 3rd Last 3rd 2nd 1st
+536 1st 2nd 3rd Last 3rd 2nd 1st
+537 1st 2nd 3rd Last 3rd 2nd 1st
+538 1st 2nd 3rd Last 3rd 2nd 1st
+539 1st 2nd 3rd Last 3rd 2nd 1st
+540 1st 2nd 3rd Last 3rd 2nd 1st
+541 1st 2nd 3rd Last 3rd 2nd 1st
+542 1st 2nd 3rd Last 3rd 2nd 1st
+543 1st 2nd 3rd Last 3rd 2nd 1st
+544 1st 2nd 3rd Last 3rd 2nd 1st
+545 1st 2nd 3rd Last 3rd 2nd 1st
+546 1st 2nd 3rd Last 3rd 2nd 1st
+547 1st 2nd 3rd Last 3rd 2nd 1st
+548 1st 2nd 3rd Last 3rd 2nd 1st
+549 1st 2nd 3rd Last 3rd 2nd 1st
+550 1st 2nd 3rd Last 3rd 2nd 1st
+551 1st 2nd 3rd Last 3rd 2nd 1st
+552 1st 2nd 3rd Last 3rd 2nd 1st
+553 1st 2nd 3rd Last 3rd 2nd 1st
+554 1st 2nd 3rd Last 3rd 2nd 1st
+555 1st 2nd 3rd Last 3rd 2nd 1st
+556 1st 2nd 3rd Last 3rd 2nd 1st
+557 1st 2nd 3rd Last 3rd 2nd 1st
+558 1st 2nd 3rd Last 3rd 2nd 1st
+559 1st 2nd 3rd Last 3rd 2nd 1st
+560 1st 2nd 3rd Last 3rd 2nd 1st
+561 1st 2nd 3rd Last 3rd 2nd 1st
+562 1st 2nd 3rd Last 3rd 2nd 1st
+563 1st 2nd 3rd Last 3rd 2nd 1st
+564 1st 2nd 3rd Last 3rd 2nd 1st
+565 1st 2nd 3rd Last 3rd 2nd 1st
+566 1st 2nd 3rd Last 3rd 2nd 1st
+567 1st 2nd 3rd Last 3rd 2nd 1st
+568 1st 2nd 3rd Last 3rd 2nd 1st
+569 1st 2nd 3rd Last 3rd 2nd 1st
+570 1st 2nd 3rd Last 3rd 2nd 1st
+571 1st 2nd 3rd Last 3rd 2nd 1st
+572 1st 2nd 3rd Last 3rd 2nd 1st
+573 1st 2nd 3rd Last 3rd 2nd 1st
+574 1st 2nd 3rd Last 3rd 2nd 1st
+575 1st 2nd 3rd Last 3rd 2nd 1st
+576 1st 2nd 3rd Last 3rd 2nd 1st
+577 1st 2nd 3rd Last 3rd 2nd 1st
+578 1st 2nd 3rd Last 3rd 2nd 1st
+579 1st 2nd 3rd Last 3rd 2nd 1st
+580 1st 2nd 3rd Last 3rd 2nd 1st
+581 1st 2nd 3rd Last 3rd 2nd 1st
+582 1st 2nd 3rd Last 3rd 2nd 1st
+583 1st 2nd 3rd Last 3rd 2nd 1st
+584 1st 2nd 3rd Last 3rd 2nd 1st
+585 1st 2nd 3rd Last 3rd 2nd 1st
+586 1st 2nd 3rd Last 3rd 2nd 1st
+587 1st 2nd 3rd Last 3rd 2nd 1st
+588 1st 2nd 3rd Last 3rd 2nd 1st
+589 1st 2nd 3rd Last 3rd 2nd 1st
+590 1st 2nd 3rd Last 3rd 2nd 1st
+591 1st 2nd 3rd Last 3rd 2nd 1st
+592 1st 2nd 3rd Last 3rd 2nd 1st
+593 1st 2nd 3rd Last 3rd 2nd 1st
+594 1st 2nd 3rd Last 3rd 2nd 1st
+595 1st 2nd 3rd Last 3rd 2nd 1st
+596 1st 2nd 3rd Last 3rd 2nd 1st
+597 1st 2nd 3rd Last 3rd 2nd 1st
+598 1st 2nd 3rd Last 3rd 2nd 1st
+599 1st 2nd 3rd Last 3rd 2nd 1st
+600 1st 2nd 3rd Last 3rd 2nd 1st
+601 1st 2nd 3rd Last 3rd 2nd 1st
+602 1st 2nd 3rd Last 3rd 2nd 1st
+603 1st 2nd 3rd Last 3rd 2nd 1st
+604 1st 2nd 3rd Last 3rd 2nd 1st
+605 1st 2nd 3rd Last 3rd 2nd 1st
+606 1st 2nd 3rd Last 3rd 2nd 1st
+607 1st 2nd 3rd Last 3rd 2nd 1st
+608 1st 2nd 3rd Last 3rd 2nd 1st
+609 1st 2nd 3rd Last 3rd 2nd 1st
+610 1st 2nd 3rd Last 3rd 2nd 1st
+611 1st 2nd 3rd Last 3rd 2nd 1st
+612 1st 2nd 3rd Last 3rd 2nd 1st
+613 1st 2nd 3rd Last 3rd 2nd 1st
+614 1st 2nd 3rd Last 3rd 2nd 1st
+615 1st 2nd 3rd Last 3rd 2nd 1st
+616 1st 2nd 3rd Last 3rd 2nd 1st
+617 1st 2nd 3rd Last 3rd 2nd 1st
+618 1st 2nd 3rd Last 3rd 2nd 1st
+619 1st 2nd 3rd Last 3rd 2nd 1st
+620 1st 2nd 3rd Last 3rd 2nd 1st
+621 1st 2nd 3rd Last 3rd 2nd 1st
+622 1st 2nd 3rd Last 3rd 2nd 1st
+623 1st 2nd 3rd Last 3rd 2nd 1st
+624 1st 2nd 3rd Last 3rd 2nd 1st
+625 1st 2nd 3rd Last 3rd 2nd 1st
+626 1st 2nd 3rd Last 3rd 2nd 1st
+627 1st 2nd 3rd Last 3rd 2nd 1st
+628 1st 2nd 3rd Last 3rd 2nd 1st
+629 1st 2nd 3rd Last 3rd 2nd 1st
+630 1st 2nd 3rd Last 3rd 2nd 1st
+631 1st 2nd 3rd Last 3rd 2nd 1st
+632 1st 2nd 3rd Last 3rd 2nd 1st
+633 1st 2nd 3rd Last 3rd 2nd 1st
+634 1st 2nd 3rd Last 3rd 2nd 1st
+635 1st 2nd 3rd Last 3rd 2nd 1st
+636 1st 2nd 3rd Last 3rd 2nd 1st
+637 1st 2nd 3rd Last 3rd 2nd 1st
+638 1st 2nd 3rd Last 3rd 2nd 1st
+639 1st 2nd 3rd Last 3rd 2nd 1st
+640 1st 2nd 3rd Last 3rd 2nd 1st
+641 1st 2nd 3rd Last 3rd 2nd 1st
+642 1st 2nd 3rd Last 3rd 2nd 1st
+643 1st 2nd 3rd Last 3rd 2nd 1st
+644 1st 2nd 3rd Last 3rd 2nd 1st
+645 1st 2nd 3rd Last 3rd 2nd 1st
+646 1st 2nd 3rd Last 3rd 2nd 1st
+647 1st 2nd 3rd Last 3rd 2nd 1st
+648 1st 2nd 3rd Last 3rd 2nd 1st
+649 1st 2nd 3rd Last 3rd 2nd 1st
+650 1st 2nd 3rd Last 3rd 2nd 1st
+651 1st 2nd 3rd Last 3rd 2nd 1st
+652 1st 2nd 3rd Last 3rd 2nd 1st
+653 1st 2nd 3rd Last 3rd 2nd 1st
+654 1st 2nd 3rd Last 3rd 2nd 1st
+655 1st 2nd 3rd Last 3rd 2nd 1st
+656 1st 2nd 3rd Last 3rd 2nd 1st
+657 1st 2nd 3rd Last 3rd 2nd 1st
+658 1st 2nd 3rd Last 3rd 2nd 1st
+659 1st 2nd 3rd Last 3rd 2nd 1st
+660 1st 2nd 3rd Last 3rd 2nd 1st
+661 1st 2nd 3rd Last 3rd 2nd 1st
+662 1st 2nd 3rd Last 3rd 2nd 1st
+663 1st 2nd 3rd Last 3rd 2nd 1st
+664 1st 2nd 3rd Last 3rd 2nd 1st
+665 1st 2nd 3rd Last 3rd 2nd 1st
+666 1st 2nd 3rd Last 3rd 2nd 1st
+667 1st 2nd 3rd Last 3rd 2nd 1st
+668 1st 2nd 3rd Last 3rd 2nd 1st
+669 1st 2nd 3rd Last 3rd 2nd 1st
+670 1st 2nd 3rd Last 3rd 2nd 1st
+671 1st 2nd 3rd Last 3rd 2nd 1st
+672 1st 2nd 3rd Last 3rd 2nd 1st
+673 1st 2nd 3rd Last 3rd 2nd 1st
+674 1st 2nd 3rd Last 3rd 2nd 1st
+675 1st 2nd 3rd Last 3rd 2nd 1st
+676 1st 2nd 3rd Last 3rd 2nd 1st
+677 1st 2nd 3rd Last 3rd 2nd 1st
+678 1st 2nd 3rd Last 3rd 2nd 1st
+679 1st 2nd 3rd Last 3rd 2nd 1st
+680 1st 2nd 3rd Last 3rd 2nd 1st
+681 1st 2nd 3rd Last 3rd 2nd 1st
+682 1st 2nd 3rd Last 3rd 2nd 1st
+683 1st 2nd 3rd Last 3rd 2nd 1st
+684 1st 2nd 3rd Last 3rd 2nd 1st
+685 1st 2nd 3rd Last 3rd 2nd 1st
+686 1st 2nd 3rd Last 3rd 2nd 1st
+687 1st 2nd 3rd Last 3rd 2nd 1st
+688 1st 2nd 3rd Last 3rd 2nd 1st
+689 1st 2nd 3rd Last 3rd 2nd 1st
+690 1st 2nd 3rd Last 3rd 2nd 1st
+691 1st 2nd 3rd Last 3rd 2nd 1st
+692 1st 2nd 3rd Last 3rd 2nd 1st
+693 1st 2nd 3rd Last 3rd 2nd 1st
+694 1st 2nd 3rd Last 3rd 2nd 1st
+695 1st 2nd 3rd Last 3rd 2nd 1st
+696 1st 2nd 3rd Last 3rd 2nd 1st
+697 1st 2nd 3rd Last 3rd 2nd 1st
+698 1st 2nd 3rd Last 3rd 2nd 1st
+699 1st 2nd 3rd Last 3rd 2nd 1st
+700 1st 2nd 3rd Last 3rd 2nd 1st
+701 1st 2nd 3rd Last 3rd 2nd 1st
+702 1st 2nd 3rd Last 3rd 2nd 1st
+703 1st 2nd 3rd Last 3rd 2nd 1st
+704 1st 2nd 3rd Last 3rd 2nd 1st
+705 1st 2nd 3rd Last 3rd 2nd 1st
+706 1st 2nd 3rd Last 3rd 2nd 1st
+707 1st 2nd 3rd Last 3rd 2nd 1st
+708 1st 2nd 3rd Last 3rd 2nd 1st
+709 1st 2nd 3rd Last 3rd 2nd 1st
+710 1st 2nd 3rd Last 3rd 2nd 1st
+711 1st 2nd 3rd Last 3rd 2nd 1st
+712 1st 2nd 3rd Last 3rd 2nd 1st
+713 1st 2nd 3rd Last 3rd 2nd 1st
+714 1st 2nd 3rd Last 3rd 2nd 1st
+715 1st 2nd 3rd Last 3rd 2nd 1st
+716 1st 2nd 3rd Last 3rd 2nd 1st
+717 1st 2nd 3rd Last 3rd 2nd 1st
+718 1st 2nd 3rd Last 3rd 2nd 1st
+719 1st 2nd 3rd Last 3rd 2nd 1st
+720 1st 2nd 3rd Last 3rd 2nd 1st
+721 1st 2nd 3rd Last 3rd 2nd 1st
+722 1st 2nd 3rd Last 3rd 2nd 1st
+723 1st 2nd 3rd Last 3rd 2nd 1st
+724 1st 2nd 3rd Last 3rd 2nd 1st
+725 1st 2nd 3rd Last 3rd 2nd 1st
+726 1st 2nd 3rd Last 3rd 2nd 1st
+727 1st 2nd 3rd Last 3rd 2nd 1st
+728 1st 2nd 3rd Last 3rd 2nd 1st
+729 1st 2nd 3rd Last 3rd 2nd 1st
+730 1st 2nd 3rd Last 3rd 2nd 1st
+731 1st 2nd 3rd Last 3rd 2nd 1st
+732 1st 2nd 3rd Last 3rd 2nd 1st
+733 1st 2nd 3rd Last 3rd 2nd 1st
+734 1st 2nd 3rd Last 3rd 2nd 1st
+735 1st 2nd 3rd Last 3rd 2nd 1st
+736 1st 2nd 3rd Last 3rd 2nd 1st
+737 1st 2nd 3rd Last 3rd 2nd 1st
+738 1st 2nd 3rd Last 3rd 2nd 1st
+739 1st 2nd 3rd Last 3rd 2nd 1st
+740 1st 2nd 3rd Last 3rd 2nd 1st
+741 1st 2nd 3rd Last 3rd 2nd 1st
+742 1st 2nd 3rd Last 3rd 2nd 1st
+743 1st 2nd 3rd Last 3rd 2nd 1st
+744 1st 2nd 3rd Last 3rd 2nd 1st
+745 1st 2nd 3rd Last 3rd 2nd 1st
+746 1st 2nd 3rd Last 3rd 2nd 1st
+747 1st 2nd 3rd Last 3rd 2nd 1st
+748 1st 2nd 3rd Last 3rd 2nd 1st
+749 1st 2nd 3rd Last 3rd 2nd 1st
+750 1st 2nd 3rd Last 3rd 2nd 1st
+751 1st 2nd 3rd Last 3rd 2nd 1st
+752 1st 2nd 3rd Last 3rd 2nd 1st
+753 1st 2nd 3rd Last 3rd 2nd 1st
+754 1st 2nd 3rd Last 3rd 2nd 1st
+755 1st 2nd 3rd Last 3rd 2nd 1st
+756 1st 2nd 3rd Last 3rd 2nd 1st
+757 1st 2nd 3rd Last 3rd 2nd 1st
+758 1st 2nd 3rd Last 3rd 2nd 1st
+759 1st 2nd 3rd Last 3rd 2nd 1st
+760 1st 2nd 3rd Last 3rd 2nd 1st
+761 1st 2nd 3rd Last 3rd 2nd 1st
+762 1st 2nd 3rd Last 3rd 2nd 1st
+763 1st 2nd 3rd Last 3rd 2nd 1st
+764 1st 2nd 3rd Last 3rd 2nd 1st
+765 1st 2nd 3rd Last 3rd 2nd 1st
+766 1st 2nd 3rd Last 3rd 2nd 1st
+767 1st 2nd 3rd Last 3rd 2nd 1st
+768 1st 2nd 3rd Last 3rd 2nd 1st
+769 1st 2nd 3rd Last 3rd 2nd 1st
+770 1st 2nd 3rd Last 3rd 2nd 1st
+771 1st 2nd 3rd Last 3rd 2nd 1st
+772 1st 2nd 3rd Last 3rd 2nd 1st
+773 1st 2nd 3rd Last 3rd 2nd 1st
+774 1st 2nd 3rd Last 3rd 2nd 1st
+775 1st 2nd 3rd Last 3rd 2nd 1st
+776 1st 2nd 3rd Last 3rd 2nd 1st
+777 1st 2nd 3rd Last 3rd 2nd 1st
+778 1st 2nd 3rd Last 3rd 2nd 1st
+779 1st 2nd 3rd Last 3rd 2nd 1st
+780 1st 2nd 3rd Last 3rd 2nd 1st
+781 1st 2nd 3rd Last 3rd 2nd 1st
+782 1st 2nd 3rd Last 3rd 2nd 1st
+783 1st 2nd 3rd Last 3rd 2nd 1st
+784 1st 2nd 3rd Last 3rd 2nd 1st
+785 1st 2nd 3rd Last 3rd 2nd 1st
+786 1st 2nd 3rd Last 3rd 2nd 1st
+787 1st 2nd 3rd Last 3rd 2nd 1st
+788 1st 2nd 3rd Last 3rd 2nd 1st
+789 1st 2nd 3rd Last 3rd 2nd 1st
+790 1st 2nd 3rd Last 3rd 2nd 1st
+791 1st 2nd 3rd Last 3rd 2nd 1st
+792 1st 2nd 3rd Last 3rd 2nd 1st
+793 1st 2nd 3rd Last 3rd 2nd 1st
+794 1st 2nd 3rd Last 3rd 2nd 1st
+795 1st 2nd 3rd Last 3rd 2nd 1st
+796 1st 2nd 3rd Last 3rd 2nd 1st
+797 1st 2nd 3rd Last 3rd 2nd 1st
+798 1st 2nd 3rd Last 3rd 2nd 1st
+799 1st 2nd 3rd Last 3rd 2nd 1st
+800 1st 2nd 3rd Last 3rd 2nd 1st
+801 1st 2nd 3rd Last 3rd 2nd 1st
+802 1st 2nd 3rd Last 3rd 2nd 1st
+803 1st 2nd 3rd Last 3rd 2nd 1st
+804 1st 2nd 3rd Last 3rd 2nd 1st
+805 1st 2nd 3rd Last 3rd 2nd 1st
+806 1st 2nd 3rd Last 3rd 2nd 1st
+807 1st 2nd 3rd Last 3rd 2nd 1st
+808 1st 2nd 3rd Last 3rd 2nd 1st
+809 1st 2nd 3rd Last 3rd 2nd 1st
+810 1st 2nd 3rd Last 3rd 2nd 1st
+811 1st 2nd 3rd Last 3rd 2nd 1st
+812 1st 2nd 3rd Last 3rd 2nd 1st
+813 1st 2nd 3rd Last 3rd 2nd 1st
+814 1st 2nd 3rd Last 3rd 2nd 1st
+815 1st 2nd 3rd Last 3rd 2nd 1st
+816 1st 2nd 3rd Last 3rd 2nd 1st
+817 1st 2nd 3rd Last 3rd 2nd 1st
+818 1st 2nd 3rd Last 3rd 2nd 1st
+819 1st 2nd 3rd Last 3rd 2nd 1st
+820 1st 2nd 3rd Last 3rd 2nd 1st
+821 1st 2nd 3rd Last 3rd 2nd 1st
+822 1st 2nd 3rd Last 3rd 2nd 1st
+823 1st 2nd 3rd Last 3rd 2nd 1st
+824 1st 2nd 3rd Last 3rd 2nd 1st
+825 1st 2nd 3rd Last 3rd 2nd 1st
+826 1st 2nd 3rd Last 3rd 2nd 1st
+827 1st 2nd 3rd Last 3rd 2nd 1st
+828 1st 2nd 3rd Last 3rd 2nd 1st
+829 1st 2nd 3rd Last 3rd 2nd 1st
+830 1st 2nd 3rd Last 3rd 2nd 1st
+831 1st 2nd 3rd Last 3rd 2nd 1st
+832 1st 2nd 3rd Last 3rd 2nd 1st
+833 1st 2nd 3rd Last 3rd 2nd 1st
+834 1st 2nd 3rd Last 3rd 2nd 1st
+835 1st 2nd 3rd Last 3rd 2nd 1st
+836 1st 2nd 3rd Last 3rd 2nd 1st
+837 1st 2nd 3rd Last 3rd 2nd 1st
+838 1st 2nd 3rd Last 3rd 2nd 1st
+839 1st 2nd 3rd Last 3rd 2nd 1st
+840 1st 2nd 3rd Last 3rd 2nd 1st
+841 1st 2nd 3rd Last 3rd 2nd 1st
+842 1st 2nd 3rd Last 3rd 2nd 1st
+843 1st 2nd 3rd Last 3rd 2nd 1st
+844 1st 2nd 3rd Last 3rd 2nd 1st
+845 1st 2nd 3rd Last 3rd 2nd 1st
+846 1st 2nd 3rd Last 3rd 2nd 1st
+847 1st 2nd 3rd Last 3rd 2nd 1st
+848 1st 2nd 3rd Last 3rd 2nd 1st
+849 1st 2nd 3rd Last 3rd 2nd 1st
+850 1st 2nd 3rd Last 3rd 2nd 1st
+851 1st 2nd 3rd Last 3rd 2nd 1st
+852 1st 2nd 3rd Last 3rd 2nd 1st
+853 1st 2nd 3rd Last 3rd 2nd 1st
+854 1st 2nd 3rd Last 3rd 2nd 1st
+855 1st 2nd 3rd Last 3rd 2nd 1st
+856 1st 2nd 3rd Last 3rd 2nd 1st
+857 1st 2nd 3rd Last 3rd 2nd 1st
+858 1st 2nd 3rd Last 3rd 2nd 1st
+859 1st 2nd 3rd Last 3rd 2nd 1st
+860 1st 2nd 3rd Last 3rd 2nd 1st
+861 1st 2nd 3rd Last 3rd 2nd 1st
+862 1st 2nd 3rd Last 3rd 2nd 1st
+863 1st 2nd 3rd Last 3rd 2nd 1st
+864 1st 2nd 3rd Last 3rd 2nd 1st
+865 1st 2nd 3rd Last 3rd 2nd 1st
+866 1st 2nd 3rd Last 3rd 2nd 1st
+867 1st 2nd 3rd Last 3rd 2nd 1st
+868 1st 2nd 3rd Last 3rd 2nd 1st
+869 1st 2nd 3rd Last 3rd 2nd 1st
+870 1st 2nd 3rd Last 3rd 2nd 1st
+871 1st 2nd 3rd Last 3rd 2nd 1st
+872 1st 2nd 3rd Last 3rd 2nd 1st
+873 1st 2nd 3rd Last 3rd 2nd 1st
+874 1st 2nd 3rd Last 3rd 2nd 1st
+875 1st 2nd 3rd Last 3rd 2nd 1st
+876 1st 2nd 3rd Last 3rd 2nd 1st
+877 1st 2nd 3rd Last 3rd 2nd 1st
+878 1st 2nd 3rd Last 3rd 2nd 1st
+879 1st 2nd 3rd Last 3rd 2nd 1st
+880 1st 2nd 3rd Last 3rd 2nd 1st
+881 1st 2nd 3rd Last 3rd 2nd 1st
+882 1st 2nd 3rd Last 3rd 2nd 1st
+883 1st 2nd 3rd Last 3rd 2nd 1st
+884 1st 2nd 3rd Last 3rd 2nd 1st
+885 1st 2nd 3rd Last 3rd 2nd 1st
+886 1st 2nd 3rd Last 3rd 2nd 1st
+887 1st 2nd 3rd Last 3rd 2nd 1st
+888 1st 2nd 3rd Last 3rd 2nd 1st
+889 1st 2nd 3rd Last 3rd 2nd 1st
+890 1st 2nd 3rd Last 3rd 2nd 1st
+891 1st 2nd 3rd Last 3rd 2nd 1st
+892 1st 2nd 3rd Last 3rd 2nd 1st
+893 1st 2nd 3rd Last 3rd 2nd 1st
+894 1st 2nd 3rd Last 3rd 2nd 1st
+895 1st 2nd 3rd Last 3rd 2nd 1st
+896 1st 2nd 3rd Last 3rd 2nd 1st
+897 1st 2nd 3rd Last 3rd 2nd 1st
+898 1st 2nd 3rd Last 3rd 2nd 1st
+899 1st 2nd 3rd Last 3rd 2nd 1st
+900 1st 2nd 3rd Last 3rd 2nd 1st
+901 1st 2nd 3rd Last 3rd 2nd 1st
+902 1st 2nd 3rd Last 3rd 2nd 1st
+903 1st 2nd 3rd Last 3rd 2nd 1st
+904 1st 2nd 3rd Last 3rd 2nd 1st
+905 1st 2nd 3rd Last 3rd 2nd 1st
+906 1st 2nd 3rd Last 3rd 2nd 1st
+907 1st 2nd 3rd Last 3rd 2nd 1st
+908 1st 2nd 3rd Last 3rd 2nd 1st
+909 1st 2nd 3rd Last 3rd 2nd 1st
+910 1st 2nd 3rd Last 3rd 2nd 1st
+911 1st 2nd 3rd Last 3rd 2nd 1st
+912 1st 2nd 3rd Last 3rd 2nd 1st
+913 1st 2nd 3rd Last 3rd 2nd 1st
+914 1st 2nd 3rd Last 3rd 2nd 1st
+915 1st 2nd 3rd Last 3rd 2nd 1st
+916 1st 2nd 3rd Last 3rd 2nd 1st
+917 1st 2nd 3rd Last 3rd 2nd 1st
+918 1st 2nd 3rd Last 3rd 2nd 1st
+919 1st 2nd 3rd Last 3rd 2nd 1st
+920 1st 2nd 3rd Last 3rd 2nd 1st
+921 1st 2nd 3rd Last 3rd 2nd 1st
+922 1st 2nd 3rd Last 3rd 2nd 1st
+923 1st 2nd 3rd Last 3rd 2nd 1st
+924 1st 2nd 3rd Last 3rd 2nd 1st
+925 1st 2nd 3rd Last 3rd 2nd 1st
+926 1st 2nd 3rd Last 3rd 2nd 1st
+927 1st 2nd 3rd Last 3rd 2nd 1st
+928 1st 2nd 3rd Last 3rd 2nd 1st
+929 1st 2nd 3rd Last 3rd 2nd 1st
+930 1st 2nd 3rd Last 3rd 2nd 1st
+931 1st 2nd 3rd Last 3rd 2nd 1st
+932 1st 2nd 3rd Last 3rd 2nd 1st
+933 1st 2nd 3rd Last 3rd 2nd 1st
+934 1st 2nd 3rd Last 3rd 2nd 1st
+935 1st 2nd 3rd Last 3rd 2nd 1st
+936 1st 2nd 3rd Last 3rd 2nd 1st
+937 1st 2nd 3rd Last 3rd 2nd 1st
+938 1st 2nd 3rd Last 3rd 2nd 1st
+939 1st 2nd 3rd Last 3rd 2nd 1st
+940 1st 2nd 3rd Last 3rd 2nd 1st
+941 1st 2nd 3rd Last 3rd 2nd 1st
+942 1st 2nd 3rd Last 3rd 2nd 1st
+943 1st 2nd 3rd Last 3rd 2nd 1st
+944 1st 2nd 3rd Last 3rd 2nd 1st
+945 1st 2nd 3rd Last 3rd 2nd 1st
+946 1st 2nd 3rd Last 3rd 2nd 1st
+947 1st 2nd 3rd Last 3rd 2nd 1st
+948 1st 2nd 3rd Last 3rd 2nd 1st
+949 1st 2nd 3rd Last 3rd 2nd 1st
+950 1st 2nd 3rd Last 3rd 2nd 1st
+951 1st 2nd 3rd Last 3rd 2nd 1st
+952 1st 2nd 3rd Last 3rd 2nd 1st
+953 1st 2nd 3rd Last 3rd 2nd 1st
+954 1st 2nd 3rd Last 3rd 2nd 1st
+955 1st 2nd 3rd Last 3rd 2nd 1st
+956 1st 2nd 3rd Last 3rd 2nd 1st
+957 1st 2nd 3rd Last 3rd 2nd 1st
+958 1st 2nd 3rd Last 3rd 2nd 1st
+959 1st 2nd 3rd Last 3rd 2nd 1st
+960 1st 2nd 3rd Last 3rd 2nd 1st
+961 1st 2nd 3rd Last 3rd 2nd 1st
+962 1st 2nd 3rd Last 3rd 2nd 1st
+963 1st 2nd 3rd Last 3rd 2nd 1st
+964 1st 2nd 3rd Last 3rd 2nd 1st
+965 1st 2nd 3rd Last 3rd 2nd 1st
+966 1st 2nd 3rd Last 3rd 2nd 1st
+967 1st 2nd 3rd Last 3rd 2nd 1st
+968 1st 2nd 3rd Last 3rd 2nd 1st
+969 1st 2nd 3rd Last 3rd 2nd 1st
+970 1st 2nd 3rd Last 3rd 2nd 1st
+971 1st 2nd 3rd Last 3rd 2nd 1st
+972 1st 2nd 3rd Last 3rd 2nd 1st
+973 1st 2nd 3rd Last 3rd 2nd 1st
+974 1st 2nd 3rd Last 3rd 2nd 1st
+975 1st 2nd 3rd Last 3rd 2nd 1st
+976 1st 2nd 3rd Last 3rd 2nd 1st
+977 1st 2nd 3rd Last 3rd 2nd 1st
+978 1st 2nd 3rd Last 3rd 2nd 1st
+979 1st 2nd 3rd Last 3rd 2nd 1st
+980 1st 2nd 3rd Last 3rd 2nd 1st
+981 1st 2nd 3rd Last 3rd 2nd 1st
+982 1st 2nd 3rd Last 3rd 2nd 1st
+983 1st 2nd 3rd Last 3rd 2nd 1st
+984 1st 2nd 3rd Last 3rd 2nd 1st
+985 1st 2nd 3rd Last 3rd 2nd 1st
+986 1st 2nd 3rd Last 3rd 2nd 1st
+987 1st 2nd 3rd Last 3rd 2nd 1st
+988 1st 2nd 3rd Last 3rd 2nd 1st
+989 1st 2nd 3rd Last 3rd 2nd 1st
+990 1st 2nd 3rd Last 3rd 2nd 1st
+991 1st 2nd 3rd Last 3rd 2nd 1st
+992 1st 2nd 3rd Last 3rd 2nd 1st
+993 1st 2nd 3rd Last 3rd 2nd 1st
+994 1st 2nd 3rd Last 3rd 2nd 1st
+995 1st 2nd 3rd Last 3rd 2nd 1st
+996 1st 2nd 3rd Last 3rd 2nd 1st
+997 1st 2nd 3rd Last 3rd 2nd 1st
+998 1st 2nd 3rd Last 3rd 2nd 1st
+999 1st 2nd 3rd Last 3rd 2nd 1st
+1000 1st 2nd 3rd Last 3rd 2nd 1st
+1001 1st 2nd 3rd Last 3rd 2nd 1st
+1002 1st 2nd 3rd Last 3rd 2nd 1st
+1003 1st 2nd 3rd Last 3rd 2nd 1st
+1004 1st 2nd 3rd Last 3rd 2nd 1st
+1005 1st 2nd 3rd Last 3rd 2nd 1st
+1006 1st 2nd 3rd Last 3rd 2nd 1st
+1007 1st 2nd 3rd Last 3rd 2nd 1st
+1008 1st 2nd 3rd Last 3rd 2nd 1st
+1009 1st 2nd 3rd Last 3rd 2nd 1st
+1010 1st 2nd 3rd Last 3rd 2nd 1st
+1011 1st 2nd 3rd Last 3rd 2nd 1st
+1012 1st 2nd 3rd Last 3rd 2nd 1st
+1013 1st 2nd 3rd Last 3rd 2nd 1st
+1014 1st 2nd 3rd Last 3rd 2nd 1st
+1015 1st 2nd 3rd Last 3rd 2nd 1st
+1016 1st 2nd 3rd Last 3rd 2nd 1st
+1017 1st 2nd 3rd Last 3rd 2nd 1st
+1018 1st 2nd 3rd Last 3rd 2nd 1st
+1019 1st 2nd 3rd Last 3rd 2nd 1st
+1020 1st 2nd 3rd Last 3rd 2nd 1st
+1021 1st 2nd 3rd Last 3rd 2nd 1st
+1022 1st 2nd 3rd Last 3rd 2nd 1st
+1023 1st 2nd 3rd Last 3rd 2nd 1st
+1024 1st 2nd 3rd Last 3rd 2nd 1st
+1025 1st 2nd 3rd Last 3rd 2nd 1st
+1026 1st 2nd 3rd Last 3rd 2nd 1st
+1027 1st 2nd 3rd Last 3rd 2nd 1st
+1028 1st 2nd 3rd Last 3rd 2nd 1st
+1029 1st 2nd 3rd Last 3rd 2nd 1st
+1030 1st 2nd 3rd Last 3rd 2nd 1st
+1031 1st 2nd 3rd Last 3rd 2nd 1st
+1032 1st 2nd 3rd Last 3rd 2nd 1st
+1033 1st 2nd 3rd Last 3rd 2nd 1st
+1034 1st 2nd 3rd Last 3rd 2nd 1st
+1035 1st 2nd 3rd Last 3rd 2nd 1st
+1036 1st 2nd 3rd Last 3rd 2nd 1st
+1037 1st 2nd 3rd Last 3rd 2nd 1st
+1038 1st 2nd 3rd Last 3rd 2nd 1st
+1039 1st 2nd 3rd Last 3rd 2nd 1st
+1040 1st 2nd 3rd Last 3rd 2nd 1st
+1041 1st 2nd 3rd Last 3rd 2nd 1st
+1042 1st 2nd 3rd Last 3rd 2nd 1st
+1043 1st 2nd 3rd Last 3rd 2nd 1st
+1044 1st 2nd 3rd Last 3rd 2nd 1st
+1045 1st 2nd 3rd Last 3rd 2nd 1st
+1046 1st 2nd 3rd Last 3rd 2nd 1st
+1047 1st 2nd 3rd Last 3rd 2nd 1st
+1048 1st 2nd 3rd Last 3rd 2nd 1st
+1049 1st 2nd 3rd Last 3rd 2nd 1st
+1050 1st 2nd 3rd Last 3rd 2nd 1st
+1051 1st 2nd 3rd Last 3rd 2nd 1st
+1052 1st 2nd 3rd Last 3rd 2nd 1st
+1053 1st 2nd 3rd Last 3rd 2nd 1st
+1054 1st 2nd 3rd Last 3rd 2nd 1st
+1055 1st 2nd 3rd Last 3rd 2nd 1st
+1056 1st 2nd 3rd Last 3rd 2nd 1st
+1057 1st 2nd 3rd Last 3rd 2nd 1st
+1058 1st 2nd 3rd Last 3rd 2nd 1st
+1059 1st 2nd 3rd Last 3rd 2nd 1st
+1060 1st 2nd 3rd Last 3rd 2nd 1st
+1061 1st 2nd 3rd Last 3rd 2nd 1st
+1062 1st 2nd 3rd Last 3rd 2nd 1st
+1063 1st 2nd 3rd Last 3rd 2nd 1st
+1064 1st 2nd 3rd Last 3rd 2nd 1st
+1065 1st 2nd 3rd Last 3rd 2nd 1st
+1066 1st 2nd 3rd Last 3rd 2nd 1st
+1067 1st 2nd 3rd Last 3rd 2nd 1st
+1068 1st 2nd 3rd Last 3rd 2nd 1st
+1069 1st 2nd 3rd Last 3rd 2nd 1st
+1070 1st 2nd 3rd Last 3rd 2nd 1st
+1071 1st 2nd 3rd Last 3rd 2nd 1st
+1072 1st 2nd 3rd Last 3rd 2nd 1st
+1073 1st 2nd 3rd Last 3rd 2nd 1st
+1074 1st 2nd 3rd Last 3rd 2nd 1st
+1075 1st 2nd 3rd Last 3rd 2nd 1st
+1076 1st 2nd 3rd Last 3rd 2nd 1st
+1077 1st 2nd 3rd Last 3rd 2nd 1st
+1078 1st 2nd 3rd Last 3rd 2nd 1st
+1079 1st 2nd 3rd Last 3rd 2nd 1st
+1080 1st 2nd 3rd Last 3rd 2nd 1st
+1081 1st 2nd 3rd Last 3rd 2nd 1st
+1082 1st 2nd 3rd Last 3rd 2nd 1st
+1083 1st 2nd 3rd Last 3rd 2nd 1st
+1084 1st 2nd 3rd Last 3rd 2nd 1st
+1085 1st 2nd 3rd Last 3rd 2nd 1st
+1086 1st 2nd 3rd Last 3rd 2nd 1st
+1087 1st 2nd 3rd Last 3rd 2nd 1st
+1088 1st 2nd 3rd Last 3rd 2nd 1st
+1089 1st 2nd 3rd Last 3rd 2nd 1st
+1090 1st 2nd 3rd Last 3rd 2nd 1st
+1091 1st 2nd 3rd Last 3rd 2nd 1st
+1092 1st 2nd 3rd Last 3rd 2nd 1st
+1093 1st 2nd 3rd Last 3rd 2nd 1st
+1094 1st 2nd 3rd Last 3rd 2nd 1st
+1095 1st 2nd 3rd Last 3rd 2nd 1st
+1096 1st 2nd 3rd Last 3rd 2nd 1st
+1097 1st 2nd 3rd Last 3rd 2nd 1st
+1098 1st 2nd 3rd Last 3rd 2nd 1st
+1099 1st 2nd 3rd Last 3rd 2nd 1st
+1100 1st 2nd 3rd Last 3rd 2nd 1st
+1101 1st 2nd 3rd Last 3rd 2nd 1st
+1102 1st 2nd 3rd Last 3rd 2nd 1st
+1103 1st 2nd 3rd Last 3rd 2nd 1st
+1104 1st 2nd 3rd Last 3rd 2nd 1st
+1105 1st 2nd 3rd Last 3rd 2nd 1st
+1106 1st 2nd 3rd Last 3rd 2nd 1st
+1107 1st 2nd 3rd Last 3rd 2nd 1st
+1108 1st 2nd 3rd Last 3rd 2nd 1st
+1109 1st 2nd 3rd Last 3rd 2nd 1st
+1110 1st 2nd 3rd Last 3rd 2nd 1st
+1111 1st 2nd 3rd Last 3rd 2nd 1st
+1112 1st 2nd 3rd Last 3rd 2nd 1st
+1113 1st 2nd 3rd Last 3rd 2nd 1st
+1114 1st 2nd 3rd Last 3rd 2nd 1st
+1115 1st 2nd 3rd Last 3rd 2nd 1st
+1116 1st 2nd 3rd Last 3rd 2nd 1st
+1117 1st 2nd 3rd Last 3rd 2nd 1st
+1118 1st 2nd 3rd Last 3rd 2nd 1st
+1119 1st 2nd 3rd Last 3rd 2nd 1st
+1120 1st 2nd 3rd Last 3rd 2nd 1st
+1121 1st 2nd 3rd Last 3rd 2nd 1st
+1122 1st 2nd 3rd Last 3rd 2nd 1st
+1123 1st 2nd 3rd Last 3rd 2nd 1st
+1124 1st 2nd 3rd Last 3rd 2nd 1st
+1125 1st 2nd 3rd Last 3rd 2nd 1st
+1126 1st 2nd 3rd Last 3rd 2nd 1st
+1127 1st 2nd 3rd Last 3rd 2nd 1st
+1128 1st 2nd 3rd Last 3rd 2nd 1st
+1129 1st 2nd 3rd Last 3rd 2nd 1st
+1130 1st 2nd 3rd Last 3rd 2nd 1st
+1131 1st 2nd 3rd Last 3rd 2nd 1st
+1132 1st 2nd 3rd Last 3rd 2nd 1st
+1133 1st 2nd 3rd Last 3rd 2nd 1st
+1134 1st 2nd 3rd Last 3rd 2nd 1st
+1135 1st 2nd 3rd Last 3rd 2nd 1st
+1136 1st 2nd 3rd Last 3rd 2nd 1st
+1137 1st 2nd 3rd Last 3rd 2nd 1st
+1138 1st 2nd 3rd Last 3rd 2nd 1st
+1139 1st 2nd 3rd Last 3rd 2nd 1st
+1140 1st 2nd 3rd Last 3rd 2nd 1st
+1141 1st 2nd 3rd Last 3rd 2nd 1st
+1142 1st 2nd 3rd Last 3rd 2nd 1st
+1143 1st 2nd 3rd Last 3rd 2nd 1st
+1144 1st 2nd 3rd Last 3rd 2nd 1st
+1145 1st 2nd 3rd Last 3rd 2nd 1st
+1146 1st 2nd 3rd Last 3rd 2nd 1st
+1147 1st 2nd 3rd Last 3rd 2nd 1st
+1148 1st 2nd 3rd Last 3rd 2nd 1st
+1149 1st 2nd 3rd Last 3rd 2nd 1st
+1150 1st 2nd 3rd Last 3rd 2nd 1st
+1151 1st 2nd 3rd Last 3rd 2nd 1st
+1152 1st 2nd 3rd Last 3rd 2nd 1st
+1153 1st 2nd 3rd Last 3rd 2nd 1st
+1154 1st 2nd 3rd Last 3rd 2nd 1st
+1155 1st 2nd 3rd Last 3rd 2nd 1st
+1156 1st 2nd 3rd Last 3rd 2nd 1st
+1157 1st 2nd 3rd Last 3rd 2nd 1st
+1158 1st 2nd 3rd Last 3rd 2nd 1st
+1159 1st 2nd 3rd Last 3rd 2nd 1st
+1160 1st 2nd 3rd Last 3rd 2nd 1st
+1161 1st 2nd 3rd Last 3rd 2nd 1st
+1162 1st 2nd 3rd Last 3rd 2nd 1st
+1163 1st 2nd 3rd Last 3rd 2nd 1st
+1164 1st 2nd 3rd Last 3rd 2nd 1st
+1165 1st 2nd 3rd Last 3rd 2nd 1st
+1166 1st 2nd 3rd Last 3rd 2nd 1st
+1167 1st 2nd 3rd Last 3rd 2nd 1st
+1168 1st 2nd 3rd Last 3rd 2nd 1st
+1169 1st 2nd 3rd Last 3rd 2nd 1st
+1170 1st 2nd 3rd Last 3rd 2nd 1st
+1171 1st 2nd 3rd Last 3rd 2nd 1st
+1172 1st 2nd 3rd Last 3rd 2nd 1st
+1173 1st 2nd 3rd Last 3rd 2nd 1st
+1174 1st 2nd 3rd Last 3rd 2nd 1st
+1175 1st 2nd 3rd Last 3rd 2nd 1st
+1176 1st 2nd 3rd Last 3rd 2nd 1st
+1177 1st 2nd 3rd Last 3rd 2nd 1st
+1178 1st 2nd 3rd Last 3rd 2nd 1st
+1179 1st 2nd 3rd Last 3rd 2nd 1st
+1180 1st 2nd 3rd Last 3rd 2nd 1st
+1181 1st 2nd 3rd Last 3rd 2nd 1st
+1182 1st 2nd 3rd Last 3rd 2nd 1st
+1183 1st 2nd 3rd Last 3rd 2nd 1st
+1184 1st 2nd 3rd Last 3rd 2nd 1st
+1185 1st 2nd 3rd Last 3rd 2nd 1st
+1186 1st 2nd 3rd Last 3rd 2nd 1st
+1187 1st 2nd 3rd Last 3rd 2nd 1st
+1188 1st 2nd 3rd Last 3rd 2nd 1st
+1189 1st 2nd 3rd Last 3rd 2nd 1st
+1190 1st 2nd 3rd Last 3rd 2nd 1st
+1191 1st 2nd 3rd Last 3rd 2nd 1st
+1192 1st 2nd 3rd Last 3rd 2nd 1st
+1193 1st 2nd 3rd Last 3rd 2nd 1st
+1194 1st 2nd 3rd Last 3rd 2nd 1st
+1195 1st 2nd 3rd Last 3rd 2nd 1st
+1196 1st 2nd 3rd Last 3rd 2nd 1st
+1197 1st 2nd 3rd Last 3rd 2nd 1st
+1198 1st 2nd 3rd Last 3rd 2nd 1st
+1199 1st 2nd 3rd Last 3rd 2nd 1st
+1200 1st 2nd 3rd Last 3rd 2nd 1st
+1201 1st 2nd 3rd Last 3rd 2nd 1st
+1202 1st 2nd 3rd Last 3rd 2nd 1st
+1203 1st 2nd 3rd Last 3rd 2nd 1st
+1204 1st 2nd 3rd Last 3rd 2nd 1st
+1205 1st 2nd 3rd Last 3rd 2nd 1st
+1206 1st 2nd 3rd Last 3rd 2nd 1st
+1207 1st 2nd 3rd Last 3rd 2nd 1st
+1208 1st 2nd 3rd Last 3rd 2nd 1st
+1209 1st 2nd 3rd Last 3rd 2nd 1st
+1210 1st 2nd 3rd Last 3rd 2nd 1st
+1211 1st 2nd 3rd Last 3rd 2nd 1st
+1212 1st 2nd 3rd Last 3rd 2nd 1st
+1213 1st 2nd 3rd Last 3rd 2nd 1st
+1214 1st 2nd 3rd Last 3rd 2nd 1st
+1215 1st 2nd 3rd Last 3rd 2nd 1st
+1216 1st 2nd 3rd Last 3rd 2nd 1st
+1217 1st 2nd 3rd Last 3rd 2nd 1st
+1218 1st 2nd 3rd Last 3rd 2nd 1st
+1219 1st 2nd 3rd Last 3rd 2nd 1st
+1220 1st 2nd 3rd Last 3rd 2nd 1st
+1221 1st 2nd 3rd Last 3rd 2nd 1st
+1222 1st 2nd 3rd Last 3rd 2nd 1st
+1223 1st 2nd 3rd Last 3rd 2nd 1st
+1224 1st 2nd 3rd Last 3rd 2nd 1st
+1225 1st 2nd 3rd Last 3rd 2nd 1st
+1226 1st 2nd 3rd Last 3rd 2nd 1st
+1227 1st 2nd 3rd Last 3rd 2nd 1st
+1228 1st 2nd 3rd Last 3rd 2nd 1st
+1229 1st 2nd 3rd Last 3rd 2nd 1st
+1230 1st 2nd 3rd Last 3rd 2nd 1st
+1231 1st 2nd 3rd Last 3rd 2nd 1st
+1232 1st 2nd 3rd Last 3rd 2nd 1st
+1233 1st 2nd 3rd Last 3rd 2nd 1st
+1234 1st 2nd 3rd Last 3rd 2nd 1st
+1235 1st 2nd 3rd Last 3rd 2nd 1st
+1236 1st 2nd 3rd Last 3rd 2nd 1st
+1237 1st 2nd 3rd Last 3rd 2nd 1st
+1238 1st 2nd 3rd Last 3rd 2nd 1st
+1239 1st 2nd 3rd Last 3rd 2nd 1st
+1240 1st 2nd 3rd Last 3rd 2nd 1st
+1241 1st 2nd 3rd Last 3rd 2nd 1st
+1242 1st 2nd 3rd Last 3rd 2nd 1st
+1243 1st 2nd 3rd Last 3rd 2nd 1st
+1244 1st 2nd 3rd Last 3rd 2nd 1st
+1245 1st 2nd 3rd Last 3rd 2nd 1st
+1246 1st 2nd 3rd Last 3rd 2nd 1st
+1247 1st 2nd 3rd Last 3rd 2nd 1st
+1248 1st 2nd 3rd Last 3rd 2nd 1st
+1249 1st 2nd 3rd Last 3rd 2nd 1st
+1250 1st 2nd 3rd Last 3rd 2nd 1st
+1251 1st 2nd 3rd Last 3rd 2nd 1st
+1252 1st 2nd 3rd Last 3rd 2nd 1st
+1253 1st 2nd 3rd Last 3rd 2nd 1st
+1254 1st 2nd 3rd Last 3rd 2nd 1st
+1255 1st 2nd 3rd Last 3rd 2nd 1st
+1256 1st 2nd 3rd Last 3rd 2nd 1st
+1257 1st 2nd 3rd Last 3rd 2nd 1st
+1258 1st 2nd 3rd Last 3rd 2nd 1st
+1259 1st 2nd 3rd Last 3rd 2nd 1st
+1260 1st 2nd 3rd Last 3rd 2nd 1st
+1261 1st 2nd 3rd Last 3rd 2nd 1st
+1262 1st 2nd 3rd Last 3rd 2nd 1st
+1263 1st 2nd 3rd Last 3rd 2nd 1st
+1264 1st 2nd 3rd Last 3rd 2nd 1st
+1265 1st 2nd 3rd Last 3rd 2nd 1st
+1266 1st 2nd 3rd Last 3rd 2nd 1st
+1267 1st 2nd 3rd Last 3rd 2nd 1st
+1268 1st 2nd 3rd Last 3rd 2nd 1st
+1269 1st 2nd 3rd Last 3rd 2nd 1st
+1270 1st 2nd 3rd Last 3rd 2nd 1st
+1271 1st 2nd 3rd Last 3rd 2nd 1st
+1272 1st 2nd 3rd Last 3rd 2nd 1st
+1273 1st 2nd 3rd Last 3rd 2nd 1st
+1274 1st 2nd 3rd Last 3rd 2nd 1st
+1275 1st 2nd 3rd Last 3rd 2nd 1st
+1276 1st 2nd 3rd Last 3rd 2nd 1st
+1277 1st 2nd 3rd Last 3rd 2nd 1st
+1278 1st 2nd 3rd Last 3rd 2nd 1st
+1279 1st 2nd 3rd Last 3rd 2nd 1st
+1280 1st 2nd 3rd Last 3rd 2nd 1st
+1281 1st 2nd 3rd Last 3rd 2nd 1st
+1282 1st 2nd 3rd Last 3rd 2nd 1st
+1283 1st 2nd 3rd Last 3rd 2nd 1st
+1284 1st 2nd 3rd Last 3rd 2nd 1st
+1285 1st 2nd 3rd Last 3rd 2nd 1st
+1286 1st 2nd 3rd Last 3rd 2nd 1st
+1287 1st 2nd 3rd Last 3rd 2nd 1st
+1288 1st 2nd 3rd Last 3rd 2nd 1st
+1289 1st 2nd 3rd Last 3rd 2nd 1st
+1290 1st 2nd 3rd Last 3rd 2nd 1st
+1291 1st 2nd 3rd Last 3rd 2nd 1st
+1292 1st 2nd 3rd Last 3rd 2nd 1st
+1293 1st 2nd 3rd Last 3rd 2nd 1st
+1294 1st 2nd 3rd Last 3rd 2nd 1st
+1295 1st 2nd 3rd Last 3rd 2nd 1st
+1296 1st 2nd 3rd Last 3rd 2nd 1st
+1297 1st 2nd 3rd Last 3rd 2nd 1st
+1298 1st 2nd 3rd Last 3rd 2nd 1st
+1299 1st 2nd 3rd Last 3rd 2nd 1st
+1300 1st 2nd 3rd Last 3rd 2nd 1st
+1301 1st 2nd 3rd Last 3rd 2nd 1st
+1302 1st 2nd 3rd Last 3rd 2nd 1st
+1303 1st 2nd 3rd Last 3rd 2nd 1st
+1304 1st 2nd 3rd Last 3rd 2nd 1st
+1305 1st 2nd 3rd Last 3rd 2nd 1st
+1306 1st 2nd 3rd Last 3rd 2nd 1st
+1307 1st 2nd 3rd Last 3rd 2nd 1st
+1308 1st 2nd 3rd Last 3rd 2nd 1st
+1309 1st 2nd 3rd Last 3rd 2nd 1st
+1310 1st 2nd 3rd Last 3rd 2nd 1st
+1311 1st 2nd 3rd Last 3rd 2nd 1st
+1312 1st 2nd 3rd Last 3rd 2nd 1st
+1313 1st 2nd 3rd Last 3rd 2nd 1st
+1314 1st 2nd 3rd Last 3rd 2nd 1st
+1315 1st 2nd 3rd Last 3rd 2nd 1st
+1316 1st 2nd 3rd Last 3rd 2nd 1st
+1317 1st 2nd 3rd Last 3rd 2nd 1st
+1318 1st 2nd 3rd Last 3rd 2nd 1st
+1319 1st 2nd 3rd Last 3rd 2nd 1st
+1320 1st 2nd 3rd Last 3rd 2nd 1st
+1321 1st 2nd 3rd Last 3rd 2nd 1st
+1322 1st 2nd 3rd Last 3rd 2nd 1st
+1323 1st 2nd 3rd Last 3rd 2nd 1st
+1324 1st 2nd 3rd Last 3rd 2nd 1st
+1325 1st 2nd 3rd Last 3rd 2nd 1st
+1326 1st 2nd 3rd Last 3rd 2nd 1st
+1327 1st 2nd 3rd Last 3rd 2nd 1st
+1328 1st 2nd 3rd Last 3rd 2nd 1st
+1329 1st 2nd 3rd Last 3rd 2nd 1st
+1330 1st 2nd 3rd Last 3rd 2nd 1st
+1331 1st 2nd 3rd Last 3rd 2nd 1st
+1332 1st 2nd 3rd Last 3rd 2nd 1st
+1333 1st 2nd 3rd Last 3rd 2nd 1st
+1334 1st 2nd 3rd Last 3rd 2nd 1st
+1335 1st 2nd 3rd Last 3rd 2nd 1st
+1336 1st 2nd 3rd Last 3rd 2nd 1st
+1337 1st 2nd 3rd Last 3rd 2nd 1st
+1338 1st 2nd 3rd Last 3rd 2nd 1st
+1339 1st 2nd 3rd Last 3rd 2nd 1st
+1340 1st 2nd 3rd Last 3rd 2nd 1st
+1341 1st 2nd 3rd Last 3rd 2nd 1st
+1342 1st 2nd 3rd Last 3rd 2nd 1st
+1343 1st 2nd 3rd Last 3rd 2nd 1st
+1344 1st 2nd 3rd Last 3rd 2nd 1st
+1345 1st 2nd 3rd Last 3rd 2nd 1st
+1346 1st 2nd 3rd Last 3rd 2nd 1st
+1347 1st 2nd 3rd Last 3rd 2nd 1st
+1348 1st 2nd 3rd Last 3rd 2nd 1st
+1349 1st 2nd 3rd Last 3rd 2nd 1st
+1350 1st 2nd 3rd Last 3rd 2nd 1st
+1351 1st 2nd 3rd Last 3rd 2nd 1st
+1352 1st 2nd 3rd Last 3rd 2nd 1st
+1353 1st 2nd 3rd Last 3rd 2nd 1st
+1354 1st 2nd 3rd Last 3rd 2nd 1st
+1355 1st 2nd 3rd Last 3rd 2nd 1st
+1356 1st 2nd 3rd Last 3rd 2nd 1st
+1357 1st 2nd 3rd Last 3rd 2nd 1st
+1358 1st 2nd 3rd Last 3rd 2nd 1st
+1359 1st 2nd 3rd Last 3rd 2nd 1st
+1360 1st 2nd 3rd Last 3rd 2nd 1st
+1361 1st 2nd 3rd Last 3rd 2nd 1st
+1362 1st 2nd 3rd Last 3rd 2nd 1st
+1363 1st 2nd 3rd Last 3rd 2nd 1st
+1364 1st 2nd 3rd Last 3rd 2nd 1st
+1365 1st 2nd 3rd Last 3rd 2nd 1st
+1366 1st 2nd 3rd Last 3rd 2nd 1st
+1367 1st 2nd 3rd Last 3rd 2nd 1st
+1368 1st 2nd 3rd Last 3rd 2nd 1st
+1369 1st 2nd 3rd Last 3rd 2nd 1st
+1370 1st 2nd 3rd Last 3rd 2nd 1st
+1371 1st 2nd 3rd Last 3rd 2nd 1st
+1372 1st 2nd 3rd Last 3rd 2nd 1st
+1373 1st 2nd 3rd Last 3rd 2nd 1st
+1374 1st 2nd 3rd Last 3rd 2nd 1st
+1375 1st 2nd 3rd Last 3rd 2nd 1st
+1376 1st 2nd 3rd Last 3rd 2nd 1st
+1377 1st 2nd 3rd Last 3rd 2nd 1st
+1378 1st 2nd 3rd Last 3rd 2nd 1st
+1379 1st 2nd 3rd Last 3rd 2nd 1st
+1380 1st 2nd 3rd Last 3rd 2nd 1st
+1381 1st 2nd 3rd Last 3rd 2nd 1st
+1382 1st 2nd 3rd Last 3rd 2nd 1st
+1383 1st 2nd 3rd Last 3rd 2nd 1st
+1384 1st 2nd 3rd Last 3rd 2nd 1st
+1385 1st 2nd 3rd Last 3rd 2nd 1st
+1386 1st 2nd 3rd Last 3rd 2nd 1st
+1387 1st 2nd 3rd Last 3rd 2nd 1st
+1388 1st 2nd 3rd Last 3rd 2nd 1st
+1389 1st 2nd 3rd Last 3rd 2nd 1st
+1390 1st 2nd 3rd Last 3rd 2nd 1st
+1391 1st 2nd 3rd Last 3rd 2nd 1st
+1392 1st 2nd 3rd Last 3rd 2nd 1st
+1393 1st 2nd 3rd Last 3rd 2nd 1st
+1394 1st 2nd 3rd Last 3rd 2nd 1st
+1395 1st 2nd 3rd Last 3rd 2nd 1st
+1396 1st 2nd 3rd Last 3rd 2nd 1st
+1397 1st 2nd 3rd Last 3rd 2nd 1st
+1398 1st 2nd 3rd Last 3rd 2nd 1st
+1399 1st 2nd 3rd Last 3rd 2nd 1st
+1400 1st 2nd 3rd Last 3rd 2nd 1st
+1401 1st 2nd 3rd Last 3rd 2nd 1st
+1402 1st 2nd 3rd Last 3rd 2nd 1st
+1403 1st 2nd 3rd Last 3rd 2nd 1st
+1404 1st 2nd 3rd Last 3rd 2nd 1st
+1405 1st 2nd 3rd Last 3rd 2nd 1st
+1406 1st 2nd 3rd Last 3rd 2nd 1st
+1407 1st 2nd 3rd Last 3rd 2nd 1st
+1408 1st 2nd 3rd Last 3rd 2nd 1st
+1409 1st 2nd 3rd Last 3rd 2nd 1st
+1410 1st 2nd 3rd Last 3rd 2nd 1st
+1411 1st 2nd 3rd Last 3rd 2nd 1st
+1412 1st 2nd 3rd Last 3rd 2nd 1st
+1413 1st 2nd 3rd Last 3rd 2nd 1st
+1414 1st 2nd 3rd Last 3rd 2nd 1st
+1415 1st 2nd 3rd Last 3rd 2nd 1st
+1416 1st 2nd 3rd Last 3rd 2nd 1st
+1417 1st 2nd 3rd Last 3rd 2nd 1st
+1418 1st 2nd 3rd Last 3rd 2nd 1st
+1419 1st 2nd 3rd Last 3rd 2nd 1st
+1420 1st 2nd 3rd Last 3rd 2nd 1st
+1421 1st 2nd 3rd Last 3rd 2nd 1st
+1422 1st 2nd 3rd Last 3rd 2nd 1st
+1423 1st 2nd 3rd Last 3rd 2nd 1st
+1424 1st 2nd 3rd Last 3rd 2nd 1st
+1425 1st 2nd 3rd Last 3rd 2nd 1st
+1426 1st 2nd 3rd Last 3rd 2nd 1st
+1427 1st 2nd 3rd Last 3rd 2nd 1st
+1428 1st 2nd 3rd Last 3rd 2nd 1st
+1429 1st 2nd 3rd Last 3rd 2nd 1st
+1430 1st 2nd 3rd Last 3rd 2nd 1st
+1431 1st 2nd 3rd Last 3rd 2nd 1st
+1432 1st 2nd 3rd Last 3rd 2nd 1st
+1433 1st 2nd 3rd Last 3rd 2nd 1st
+1434 1st 2nd 3rd Last 3rd 2nd 1st
+1435 1st 2nd 3rd Last 3rd 2nd 1st
+1436 1st 2nd 3rd Last 3rd 2nd 1st
+1437 1st 2nd 3rd Last 3rd 2nd 1st
+1438 1st 2nd 3rd Last 3rd 2nd 1st
+1439 1st 2nd 3rd Last 3rd 2nd 1st
+1440 1st 2nd 3rd Last 3rd 2nd 1st
+1441 1st 2nd 3rd Last 3rd 2nd 1st
+1442 1st 2nd 3rd Last 3rd 2nd 1st
+1443 1st 2nd 3rd Last 3rd 2nd 1st
+1444 1st 2nd 3rd Last 3rd 2nd 1st
+1445 1st 2nd 3rd Last 3rd 2nd 1st
+1446 1st 2nd 3rd Last 3rd 2nd 1st
+1447 1st 2nd 3rd Last 3rd 2nd 1st
+1448 1st 2nd 3rd Last 3rd 2nd 1st
+1449 1st 2nd 3rd Last 3rd 2nd 1st
+1450 1st 2nd 3rd Last 3rd 2nd 1st
+1451 1st 2nd 3rd Last 3rd 2nd 1st
+1452 1st 2nd 3rd Last 3rd 2nd 1st
+1453 1st 2nd 3rd Last 3rd 2nd 1st
+1454 1st 2nd 3rd Last 3rd 2nd 1st
+1455 1st 2nd 3rd Last 3rd 2nd 1st
+1456 1st 2nd 3rd Last 3rd 2nd 1st
+1457 1st 2nd 3rd Last 3rd 2nd 1st
+1458 1st 2nd 3rd Last 3rd 2nd 1st
+1459 1st 2nd 3rd Last 3rd 2nd 1st
+1460 1st 2nd 3rd Last 3rd 2nd 1st
+1461 1st 2nd 3rd Last 3rd 2nd 1st
+1462 1st 2nd 3rd Last 3rd 2nd 1st
+1463 1st 2nd 3rd Last 3rd 2nd 1st
+1464 1st 2nd 3rd Last 3rd 2nd 1st
+1465 1st 2nd 3rd Last 3rd 2nd 1st
+1466 1st 2nd 3rd Last 3rd 2nd 1st
+1467 1st 2nd 3rd Last 3rd 2nd 1st
+1468 1st 2nd 3rd Last 3rd 2nd 1st
+1469 1st 2nd 3rd Last 3rd 2nd 1st
+1470 1st 2nd 3rd Last 3rd 2nd 1st
+1471 1st 2nd 3rd Last 3rd 2nd 1st
+1472 1st 2nd 3rd Last 3rd 2nd 1st
+1473 1st 2nd 3rd Last 3rd 2nd 1st
+1474 1st 2nd 3rd Last 3rd 2nd 1st
+1475 1st 2nd 3rd Last 3rd 2nd 1st
+1476 1st 2nd 3rd Last 3rd 2nd 1st
+1477 1st 2nd 3rd Last 3rd 2nd 1st
+1478 1st 2nd 3rd Last 3rd 2nd 1st
+1479 1st 2nd 3rd Last 3rd 2nd 1st
+1480 1st 2nd 3rd Last 3rd 2nd 1st
+1481 1st 2nd 3rd Last 3rd 2nd 1st
+1482 1st 2nd 3rd Last 3rd 2nd 1st
+1483 1st 2nd 3rd Last 3rd 2nd 1st
+1484 1st 2nd 3rd Last 3rd 2nd 1st
+1485 1st 2nd 3rd Last 3rd 2nd 1st
+1486 1st 2nd 3rd Last 3rd 2nd 1st
+1487 1st 2nd 3rd Last 3rd 2nd 1st
+1488 1st 2nd 3rd Last 3rd 2nd 1st
+1489 1st 2nd 3rd Last 3rd 2nd 1st
+1490 1st 2nd 3rd Last 3rd 2nd 1st
+1491 1st 2nd 3rd Last 3rd 2nd 1st
+1492 1st 2nd 3rd Last 3rd 2nd 1st
+1493 1st 2nd 3rd Last 3rd 2nd 1st
+1494 1st 2nd 3rd Last 3rd 2nd 1st
+1495 1st 2nd 3rd Last 3rd 2nd 1st
+1496 1st 2nd 3rd Last 3rd 2nd 1st
+1497 1st 2nd 3rd Last 3rd 2nd 1st
+1498 1st 2nd 3rd Last 3rd 2nd 1st
+1499 1st 2nd 3rd Last 3rd 2nd 1st
+1500 1st 2nd 3rd Last 3rd 2nd 1st
+1501 1st 2nd 3rd Last 3rd 2nd 1st
+1502 1st 2nd 3rd Last 3rd 2nd 1st
+1503 1st 2nd 3rd Last 3rd 2nd 1st
+1504 1st 2nd 3rd Last 3rd 2nd 1st
+1505 1st 2nd 3rd Last 3rd 2nd 1st
+1506 1st 2nd 3rd Last 3rd 2nd 1st
+1507 1st 2nd 3rd Last 3rd 2nd 1st
+1508 1st 2nd 3rd Last 3rd 2nd 1st
+1509 1st 2nd 3rd Last 3rd 2nd 1st
+1510 1st 2nd 3rd Last 3rd 2nd 1st
+1511 1st 2nd 3rd Last 3rd 2nd 1st
+1512 1st 2nd 3rd Last 3rd 2nd 1st
+1513 1st 2nd 3rd Last 3rd 2nd 1st
+1514 1st 2nd 3rd Last 3rd 2nd 1st
+1515 1st 2nd 3rd Last 3rd 2nd 1st
+1516 1st 2nd 3rd Last 3rd 2nd 1st
+1517 1st 2nd 3rd Last 3rd 2nd 1st
+1518 1st 2nd 3rd Last 3rd 2nd 1st
+1519 1st 2nd 3rd Last 3rd 2nd 1st
+1520 1st 2nd 3rd Last 3rd 2nd 1st
+1521 1st 2nd 3rd Last 3rd 2nd 1st
+1522 1st 2nd 3rd Last 3rd 2nd 1st
+1523 1st 2nd 3rd Last 3rd 2nd 1st
+1524 1st 2nd 3rd Last 3rd 2nd 1st
+1525 1st 2nd 3rd Last 3rd 2nd 1st
+1526 1st 2nd 3rd Last 3rd 2nd 1st
+1527 1st 2nd 3rd Last 3rd 2nd 1st
+1528 1st 2nd 3rd Last 3rd 2nd 1st
+1529 1st 2nd 3rd Last 3rd 2nd 1st
+1530 1st 2nd 3rd Last 3rd 2nd 1st
+1531 1st 2nd 3rd Last 3rd 2nd 1st
+1532 1st 2nd 3rd Last 3rd 2nd 1st
+1533 1st 2nd 3rd Last 3rd 2nd 1st
+1534 1st 2nd 3rd Last 3rd 2nd 1st
+1535 1st 2nd 3rd Last 3rd 2nd 1st
+1536 1st 2nd 3rd Last 3rd 2nd 1st
+1537 1st 2nd 3rd Last 3rd 2nd 1st
+1538 1st 2nd 3rd Last 3rd 2nd 1st
+1539 1st 2nd 3rd Last 3rd 2nd 1st
+1540 1st 2nd 3rd Last 3rd 2nd 1st
+1541 1st 2nd 3rd Last 3rd 2nd 1st
+1542 1st 2nd 3rd Last 3rd 2nd 1st
+1543 1st 2nd 3rd Last 3rd 2nd 1st
+1544 1st 2nd 3rd Last 3rd 2nd 1st
+1545 1st 2nd 3rd Last 3rd 2nd 1st
+1546 1st 2nd 3rd Last 3rd 2nd 1st
+1547 1st 2nd 3rd Last 3rd 2nd 1st
+1548 1st 2nd 3rd Last 3rd 2nd 1st
+1549 1st 2nd 3rd Last 3rd 2nd 1st
+1550 1st 2nd 3rd Last 3rd 2nd 1st
+1551 1st 2nd 3rd Last 3rd 2nd 1st
+1552 1st 2nd 3rd Last 3rd 2nd 1st
+1553 1st 2nd 3rd Last 3rd 2nd 1st
+1554 1st 2nd 3rd Last 3rd 2nd 1st
+1555 1st 2nd 3rd Last 3rd 2nd 1st
+1556 1st 2nd 3rd Last 3rd 2nd 1st
+1557 1st 2nd 3rd Last 3rd 2nd 1st
+1558 1st 2nd 3rd Last 3rd 2nd 1st
+1559 1st 2nd 3rd Last 3rd 2nd 1st
+1560 1st 2nd 3rd Last 3rd 2nd 1st
+1561 1st 2nd 3rd Last 3rd 2nd 1st
+1562 1st 2nd 3rd Last 3rd 2nd 1st
+1563 1st 2nd 3rd Last 3rd 2nd 1st
+1564 1st 2nd 3rd Last 3rd 2nd 1st
+1565 1st 2nd 3rd Last 3rd 2nd 1st
+1566 1st 2nd 3rd Last 3rd 2nd 1st
+1567 1st 2nd 3rd Last 3rd 2nd 1st
+1568 1st 2nd 3rd Last 3rd 2nd 1st
+1569 1st 2nd 3rd Last 3rd 2nd 1st
+1570 1st 2nd 3rd Last 3rd 2nd 1st
+1571 1st 2nd 3rd Last 3rd 2nd 1st
+1572 1st 2nd 3rd Last 3rd 2nd 1st
+1573 1st 2nd 3rd Last 3rd 2nd 1st
+1574 1st 2nd 3rd Last 3rd 2nd 1st
+1575 1st 2nd 3rd Last 3rd 2nd 1st
+1576 1st 2nd 3rd Last 3rd 2nd 1st
+1577 1st 2nd 3rd Last 3rd 2nd 1st
+1578 1st 2nd 3rd Last 3rd 2nd 1st
+1579 1st 2nd 3rd Last 3rd 2nd 1st
+1580 1st 2nd 3rd Last 3rd 2nd 1st
+1581 1st 2nd 3rd Last 3rd 2nd 1st
+1582 1st 2nd 3rd Last 3rd 2nd 1st
+1583 1st 2nd 3rd Last 3rd 2nd 1st
+1584 1st 2nd 3rd Last 3rd 2nd 1st
+1585 1st 2nd 3rd Last 3rd 2nd 1st
+1586 1st 2nd 3rd Last 3rd 2nd 1st
+1587 1st 2nd 3rd Last 3rd 2nd 1st
+1588 1st 2nd 3rd Last 3rd 2nd 1st
+1589 1st 2nd 3rd Last 3rd 2nd 1st
+1590 1st 2nd 3rd Last 3rd 2nd 1st
+1591 1st 2nd 3rd Last 3rd 2nd 1st
+1592 1st 2nd 3rd Last 3rd 2nd 1st
+1593 1st 2nd 3rd Last 3rd 2nd 1st
+1594 1st 2nd 3rd Last 3rd 2nd 1st
+1595 1st 2nd 3rd Last 3rd 2nd 1st
+1596 1st 2nd 3rd Last 3rd 2nd 1st
+1597 1st 2nd 3rd Last 3rd 2nd 1st
+1598 1st 2nd 3rd Last 3rd 2nd 1st
+1599 1st 2nd 3rd Last 3rd 2nd 1st
+1600 1st 2nd 3rd Last 3rd 2nd 1st
+1601 1st 2nd 3rd Last 3rd 2nd 1st
+1602 1st 2nd 3rd Last 3rd 2nd 1st
+1603 1st 2nd 3rd Last 3rd 2nd 1st
+1604 1st 2nd 3rd Last 3rd 2nd 1st
+1605 1st 2nd 3rd Last 3rd 2nd 1st
+1606 1st 2nd 3rd Last 3rd 2nd 1st
+1607 1st 2nd 3rd Last 3rd 2nd 1st
+1608 1st 2nd 3rd Last 3rd 2nd 1st
+1609 1st 2nd 3rd Last 3rd 2nd 1st
+1610 1st 2nd 3rd Last 3rd 2nd 1st
+1611 1st 2nd 3rd Last 3rd 2nd 1st
+1612 1st 2nd 3rd Last 3rd 2nd 1st
+1613 1st 2nd 3rd Last 3rd 2nd 1st
+1614 1st 2nd 3rd Last 3rd 2nd 1st
+1615 1st 2nd 3rd Last 3rd 2nd 1st
+1616 1st 2nd 3rd Last 3rd 2nd 1st
+1617 1st 2nd 3rd Last 3rd 2nd 1st
+1618 1st 2nd 3rd Last 3rd 2nd 1st
+1619 1st 2nd 3rd Last 3rd 2nd 1st
+1620 1st 2nd 3rd Last 3rd 2nd 1st
+1621 1st 2nd 3rd Last 3rd 2nd 1st
+1622 1st 2nd 3rd Last 3rd 2nd 1st
+1623 1st 2nd 3rd Last 3rd 2nd 1st
+1624 1st 2nd 3rd Last 3rd 2nd 1st
+1625 1st 2nd 3rd Last 3rd 2nd 1st
+1626 1st 2nd 3rd Last 3rd 2nd 1st
+1627 1st 2nd 3rd Last 3rd 2nd 1st
+1628 1st 2nd 3rd Last 3rd 2nd 1st
+1629 1st 2nd 3rd Last 3rd 2nd 1st
+1630 1st 2nd 3rd Last 3rd 2nd 1st
+1631 1st 2nd 3rd Last 3rd 2nd 1st
+1632 1st 2nd 3rd Last 3rd 2nd 1st
+1633 1st 2nd 3rd Last 3rd 2nd 1st
+1634 1st 2nd 3rd Last 3rd 2nd 1st
+1635 1st 2nd 3rd Last 3rd 2nd 1st
+1636 1st 2nd 3rd Last 3rd 2nd 1st
+1637 1st 2nd 3rd Last 3rd 2nd 1st
+1638 1st 2nd 3rd Last 3rd 2nd 1st
+1639 1st 2nd 3rd Last 3rd 2nd 1st
+1640 1st 2nd 3rd Last 3rd 2nd 1st
+1641 1st 2nd 3rd Last 3rd 2nd 1st
+1642 1st 2nd 3rd Last 3rd 2nd 1st
+1643 1st 2nd 3rd Last 3rd 2nd 1st
+1644 1st 2nd 3rd Last 3rd 2nd 1st
+1645 1st 2nd 3rd Last 3rd 2nd 1st
+1646 1st 2nd 3rd Last 3rd 2nd 1st
+1647 1st 2nd 3rd Last 3rd 2nd 1st
+1648 1st 2nd 3rd Last 3rd 2nd 1st
+1649 1st 2nd 3rd Last 3rd 2nd 1st
+1650 1st 2nd 3rd Last 3rd 2nd 1st
+1651 1st 2nd 3rd Last 3rd 2nd 1st
+1652 1st 2nd 3rd Last 3rd 2nd 1st
+1653 1st 2nd 3rd Last 3rd 2nd 1st
+1654 1st 2nd 3rd Last 3rd 2nd 1st
+1655 1st 2nd 3rd Last 3rd 2nd 1st
+1656 1st 2nd 3rd Last 3rd 2nd 1st
+1657 1st 2nd 3rd Last 3rd 2nd 1st
+1658 1st 2nd 3rd Last 3rd 2nd 1st
+1659 1st 2nd 3rd Last 3rd 2nd 1st
+1660 1st 2nd 3rd Last 3rd 2nd 1st
+1661 1st 2nd 3rd Last 3rd 2nd 1st
+1662 1st 2nd 3rd Last 3rd 2nd 1st
+1663 1st 2nd 3rd Last 3rd 2nd 1st
+1664 1st 2nd 3rd Last 3rd 2nd 1st
+1665 1st 2nd 3rd Last 3rd 2nd 1st
+1666 1st 2nd 3rd Last 3rd 2nd 1st
+1667 1st 2nd 3rd Last 3rd 2nd 1st
+1668 1st 2nd 3rd Last 3rd 2nd 1st
+1669 1st 2nd 3rd Last 3rd 2nd 1st
+1670 1st 2nd 3rd Last 3rd 2nd 1st
+1671 1st 2nd 3rd Last 3rd 2nd 1st
+1672 1st 2nd 3rd Last 3rd 2nd 1st
+1673 1st 2nd 3rd Last 3rd 2nd 1st
+1674 1st 2nd 3rd Last 3rd 2nd 1st
+1675 1st 2nd 3rd Last 3rd 2nd 1st
+1676 1st 2nd 3rd Last 3rd 2nd 1st
+1677 1st 2nd 3rd Last 3rd 2nd 1st
+1678 1st 2nd 3rd Last 3rd 2nd 1st
+1679 1st 2nd 3rd Last 3rd 2nd 1st
+1680 1st 2nd 3rd Last 3rd 2nd 1st
+1681 1st 2nd 3rd Last 3rd 2nd 1st
+1682 1st 2nd 3rd Last 3rd 2nd 1st
+1683 1st 2nd 3rd Last 3rd 2nd 1st
+1684 1st 2nd 3rd Last 3rd 2nd 1st
+1685 1st 2nd 3rd Last 3rd 2nd 1st
+1686 1st 2nd 3rd Last 3rd 2nd 1st
+1687 1st 2nd 3rd Last 3rd 2nd 1st
+1688 1st 2nd 3rd Last 3rd 2nd 1st
+1689 1st 2nd 3rd Last 3rd 2nd 1st
+1690 1st 2nd 3rd Last 3rd 2nd 1st
+1691 1st 2nd 3rd Last 3rd 2nd 1st
+1692 1st 2nd 3rd Last 3rd 2nd 1st
+1693 1st 2nd 3rd Last 3rd 2nd 1st
+1694 1st 2nd 3rd Last 3rd 2nd 1st
+1695 1st 2nd 3rd Last 3rd 2nd 1st
+1696 1st 2nd 3rd Last 3rd 2nd 1st
+1697 1st 2nd 3rd Last 3rd 2nd 1st
+1698 1st 2nd 3rd Last 3rd 2nd 1st
+1699 1st 2nd 3rd Last 3rd 2nd 1st
+1700 1st 2nd 3rd Last 3rd 2nd 1st
+1701 1st 2nd 3rd Last 3rd 2nd 1st
+1702 1st 2nd 3rd Last 3rd 2nd 1st
+1703 1st 2nd 3rd Last 3rd 2nd 1st
+1704 1st 2nd 3rd Last 3rd 2nd 1st
+1705 1st 2nd 3rd Last 3rd 2nd 1st
+1706 1st 2nd 3rd Last 3rd 2nd 1st
+1707 1st 2nd 3rd Last 3rd 2nd 1st
+1708 1st 2nd 3rd Last 3rd 2nd 1st
+1709 1st 2nd 3rd Last 3rd 2nd 1st
+1710 1st 2nd 3rd Last 3rd 2nd 1st
+1711 1st 2nd 3rd Last 3rd 2nd 1st
+1712 1st 2nd 3rd Last 3rd 2nd 1st
+1713 1st 2nd 3rd Last 3rd 2nd 1st
+1714 1st 2nd 3rd Last 3rd 2nd 1st
+1715 1st 2nd 3rd Last 3rd 2nd 1st
+1716 1st 2nd 3rd Last 3rd 2nd 1st
+1717 1st 2nd 3rd Last 3rd 2nd 1st
+1718 1st 2nd 3rd Last 3rd 2nd 1st
+1719 1st 2nd 3rd Last 3rd 2nd 1st
+1720 1st 2nd 3rd Last 3rd 2nd 1st
+1721 1st 2nd 3rd Last 3rd 2nd 1st
+1722 1st 2nd 3rd Last 3rd 2nd 1st
+1723 1st 2nd 3rd Last 3rd 2nd 1st
+1724 1st 2nd 3rd Last 3rd 2nd 1st
+1725 1st 2nd 3rd Last 3rd 2nd 1st
+1726 1st 2nd 3rd Last 3rd 2nd 1st
+1727 1st 2nd 3rd Last 3rd 2nd 1st
+1728 1st 2nd 3rd Last 3rd 2nd 1st
+1729 1st 2nd 3rd Last 3rd 2nd 1st
+1730 1st 2nd 3rd Last 3rd 2nd 1st
+1731 1st 2nd 3rd Last 3rd 2nd 1st
+1732 1st 2nd 3rd Last 3rd 2nd 1st
+1733 1st 2nd 3rd Last 3rd 2nd 1st
+1734 1st 2nd 3rd Last 3rd 2nd 1st
+1735 1st 2nd 3rd Last 3rd 2nd 1st
+1736 1st 2nd 3rd Last 3rd 2nd 1st
+1737 1st 2nd 3rd Last 3rd 2nd 1st
+1738 1st 2nd 3rd Last 3rd 2nd 1st
+1739 1st 2nd 3rd Last 3rd 2nd 1st
+1740 1st 2nd 3rd Last 3rd 2nd 1st
+1741 1st 2nd 3rd Last 3rd 2nd 1st
+1742 1st 2nd 3rd Last 3rd 2nd 1st
+1743 1st 2nd 3rd Last 3rd 2nd 1st
+1744 1st 2nd 3rd Last 3rd 2nd 1st
+1745 1st 2nd 3rd Last 3rd 2nd 1st
+1746 1st 2nd 3rd Last 3rd 2nd 1st
+1747 1st 2nd 3rd Last 3rd 2nd 1st
+1748 1st 2nd 3rd Last 3rd 2nd 1st
+1749 1st 2nd 3rd Last 3rd 2nd 1st
+1750 1st 2nd 3rd Last 3rd 2nd 1st
+1751 1st 2nd 3rd Last 3rd 2nd 1st
+1752 1st 2nd 3rd Last 3rd 2nd 1st
+1753 1st 2nd 3rd Last 3rd 2nd 1st
+1754 1st 2nd 3rd Last 3rd 2nd 1st
+1755 1st 2nd 3rd Last 3rd 2nd 1st
+1756 1st 2nd 3rd Last 3rd 2nd 1st
+1757 1st 2nd 3rd Last 3rd 2nd 1st
+1758 1st 2nd 3rd Last 3rd 2nd 1st
+1759 1st 2nd 3rd Last 3rd 2nd 1st
+1760 1st 2nd 3rd Last 3rd 2nd 1st
+1761 1st 2nd 3rd Last 3rd 2nd 1st
+1762 1st 2nd 3rd Last 3rd 2nd 1st
+1763 1st 2nd 3rd Last 3rd 2nd 1st
+1764 1st 2nd 3rd Last 3rd 2nd 1st
+1765 1st 2nd 3rd Last 3rd 2nd 1st
+1766 1st 2nd 3rd Last 3rd 2nd 1st
+1767 1st 2nd 3rd Last 3rd 2nd 1st
+1768 1st 2nd 3rd Last 3rd 2nd 1st
+1769 1st 2nd 3rd Last 3rd 2nd 1st
+1770 1st 2nd 3rd Last 3rd 2nd 1st
+1771 1st 2nd 3rd Last 3rd 2nd 1st
+1772 1st 2nd 3rd Last 3rd 2nd 1st
+1773 1st 2nd 3rd Last 3rd 2nd 1st
+1774 1st 2nd 3rd Last 3rd 2nd 1st
+1775 1st 2nd 3rd Last 3rd 2nd 1st
+1776 1st 2nd 3rd Last 3rd 2nd 1st
+1777 1st 2nd 3rd Last 3rd 2nd 1st
+1778 1st 2nd 3rd Last 3rd 2nd 1st
+1779 1st 2nd 3rd Last 3rd 2nd 1st
+1780 1st 2nd 3rd Last 3rd 2nd 1st
+1781 1st 2nd 3rd Last 3rd 2nd 1st
+1782 1st 2nd 3rd Last 3rd 2nd 1st
+1783 1st 2nd 3rd Last 3rd 2nd 1st
+1784 1st 2nd 3rd Last 3rd 2nd 1st
+1785 1st 2nd 3rd Last 3rd 2nd 1st
+1786 1st 2nd 3rd Last 3rd 2nd 1st
+1787 1st 2nd 3rd Last 3rd 2nd 1st
+1788 1st 2nd 3rd Last 3rd 2nd 1st
+1789 1st 2nd 3rd Last 3rd 2nd 1st
+1790 1st 2nd 3rd Last 3rd 2nd 1st
+1791 1st 2nd 3rd Last 3rd 2nd 1st
+1792 1st 2nd 3rd Last 3rd 2nd 1st
+1793 1st 2nd 3rd Last 3rd 2nd 1st
+1794 1st 2nd 3rd Last 3rd 2nd 1st
+1795 1st 2nd 3rd Last 3rd 2nd 1st
+1796 1st 2nd 3rd Last 3rd 2nd 1st
+1797 1st 2nd 3rd Last 3rd 2nd 1st
+1798 1st 2nd 3rd Last 3rd 2nd 1st
+1799 1st 2nd 3rd Last 3rd 2nd 1st
+1800 1st 2nd 3rd Last 3rd 2nd 1st
+1801 1st 2nd 3rd Last 3rd 2nd 1st
+1802 1st 2nd 3rd Last 3rd 2nd 1st
+1803 1st 2nd 3rd Last 3rd 2nd 1st
+1804 1st 2nd 3rd Last 3rd 2nd 1st
+1805 1st 2nd 3rd Last 3rd 2nd 1st
+1806 1st 2nd 3rd Last 3rd 2nd 1st
+1807 1st 2nd 3rd Last 3rd 2nd 1st
+1808 1st 2nd 3rd Last 3rd 2nd 1st
+1809 1st 2nd 3rd Last 3rd 2nd 1st
+1810 1st 2nd 3rd Last 3rd 2nd 1st
+1811 1st 2nd 3rd Last 3rd 2nd 1st
+1812 1st 2nd 3rd Last 3rd 2nd 1st
+1813 1st 2nd 3rd Last 3rd 2nd 1st
+1814 1st 2nd 3rd Last 3rd 2nd 1st
+1815 1st 2nd 3rd Last 3rd 2nd 1st
+1816 1st 2nd 3rd Last 3rd 2nd 1st
+1817 1st 2nd 3rd Last 3rd 2nd 1st
+1818 1st 2nd 3rd Last 3rd 2nd 1st
+1819 1st 2nd 3rd Last 3rd 2nd 1st
+1820 1st 2nd 3rd Last 3rd 2nd 1st
+1821 1st 2nd 3rd Last 3rd 2nd 1st
+1822 1st 2nd 3rd Last 3rd 2nd 1st
+1823 1st 2nd 3rd Last 3rd 2nd 1st
+1824 1st 2nd 3rd Last 3rd 2nd 1st
+1825 1st 2nd 3rd Last 3rd 2nd 1st
+1826 1st 2nd 3rd Last 3rd 2nd 1st
+1827 1st 2nd 3rd Last 3rd 2nd 1st
+1828 1st 2nd 3rd Last 3rd 2nd 1st
+1829 1st 2nd 3rd Last 3rd 2nd 1st
+1830 1st 2nd 3rd Last 3rd 2nd 1st
+1831 1st 2nd 3rd Last 3rd 2nd 1st
+1832 1st 2nd 3rd Last 3rd 2nd 1st
+1833 1st 2nd 3rd Last 3rd 2nd 1st
+1834 1st 2nd 3rd Last 3rd 2nd 1st
+1835 1st 2nd 3rd Last 3rd 2nd 1st
+1836 1st 2nd 3rd Last 3rd 2nd 1st
+1837 1st 2nd 3rd Last 3rd 2nd 1st
+1838 1st 2nd 3rd Last 3rd 2nd 1st
+1839 1st 2nd 3rd Last 3rd 2nd 1st
+1840 1st 2nd 3rd Last 3rd 2nd 1st
+1841 1st 2nd 3rd Last 3rd 2nd 1st
+1842 1st 2nd 3rd Last 3rd 2nd 1st
+1843 1st 2nd 3rd Last 3rd 2nd 1st
+1844 1st 2nd 3rd Last 3rd 2nd 1st
+1845 1st 2nd 3rd Last 3rd 2nd 1st
+1846 1st 2nd 3rd Last 3rd 2nd 1st
+1847 1st 2nd 3rd Last 3rd 2nd 1st
+1848 1st 2nd 3rd Last 3rd 2nd 1st
+1849 1st 2nd 3rd Last 3rd 2nd 1st
+1850 1st 2nd 3rd Last 3rd 2nd 1st
+1851 1st 2nd 3rd Last 3rd 2nd 1st
+1852 1st 2nd 3rd Last 3rd 2nd 1st
+1853 1st 2nd 3rd Last 3rd 2nd 1st
+1854 1st 2nd 3rd Last 3rd 2nd 1st
+1855 1st 2nd 3rd Last 3rd 2nd 1st
+1856 1st 2nd 3rd Last 3rd 2nd 1st
+1857 1st 2nd 3rd Last 3rd 2nd 1st
+1858 1st 2nd 3rd Last 3rd 2nd 1st
+1859 1st 2nd 3rd Last 3rd 2nd 1st
+1860 1st 2nd 3rd Last 3rd 2nd 1st
+1861 1st 2nd 3rd Last 3rd 2nd 1st
+1862 1st 2nd 3rd Last 3rd 2nd 1st
+1863 1st 2nd 3rd Last 3rd 2nd 1st
+1864 1st 2nd 3rd Last 3rd 2nd 1st
+1865 1st 2nd 3rd Last 3rd 2nd 1st
+1866 1st 2nd 3rd Last 3rd 2nd 1st
+1867 1st 2nd 3rd Last 3rd 2nd 1st
+1868 1st 2nd 3rd Last 3rd 2nd 1st
+1869 1st 2nd 3rd Last 3rd 2nd 1st
+1870 1st 2nd 3rd Last 3rd 2nd 1st
+1871 1st 2nd 3rd Last 3rd 2nd 1st
+1872 1st 2nd 3rd Last 3rd 2nd 1st
+1873 1st 2nd 3rd Last 3rd 2nd 1st
+1874 1st 2nd 3rd Last 3rd 2nd 1st
+1875 1st 2nd 3rd Last 3rd 2nd 1st
+1876 1st 2nd 3rd Last 3rd 2nd 1st
+1877 1st 2nd 3rd Last 3rd 2nd 1st
+1878 1st 2nd 3rd Last 3rd 2nd 1st
+1879 1st 2nd 3rd Last 3rd 2nd 1st
+1880 1st 2nd 3rd Last 3rd 2nd 1st
+1881 1st 2nd 3rd Last 3rd 2nd 1st
+1882 1st 2nd 3rd Last 3rd 2nd 1st
+1883 1st 2nd 3rd Last 3rd 2nd 1st
+1884 1st 2nd 3rd Last 3rd 2nd 1st
+1885 1st 2nd 3rd Last 3rd 2nd 1st
+1886 1st 2nd 3rd Last 3rd 2nd 1st
+1887 1st 2nd 3rd Last 3rd 2nd 1st
+1888 1st 2nd 3rd Last 3rd 2nd 1st
+1889 1st 2nd 3rd Last 3rd 2nd 1st
+1890 1st 2nd 3rd Last 3rd 2nd 1st
+1891 1st 2nd 3rd Last 3rd 2nd 1st
+1892 1st 2nd 3rd Last 3rd 2nd 1st
+1893 1st 2nd 3rd Last 3rd 2nd 1st
+1894 1st 2nd 3rd Last 3rd 2nd 1st
+1895 1st 2nd 3rd Last 3rd 2nd 1st
+1896 1st 2nd 3rd Last 3rd 2nd 1st
+1897 1st 2nd 3rd Last 3rd 2nd 1st
+1898 1st 2nd 3rd Last 3rd 2nd 1st
+1899 1st 2nd 3rd Last 3rd 2nd 1st
+1900 1st 2nd 3rd Last 3rd 2nd 1st
+1901 1st 2nd 3rd Last 3rd 2nd 1st
+1902 1st 2nd 3rd Last 3rd 2nd 1st
+1903 1st 2nd 3rd Last 3rd 2nd 1st
+1904 1st 2nd 3rd Last 3rd 2nd 1st
+1905 1st 2nd 3rd Last 3rd 2nd 1st
+1906 1st 2nd 3rd Last 3rd 2nd 1st
+1907 1st 2nd 3rd Last 3rd 2nd 1st
+1908 1st 2nd 3rd Last 3rd 2nd 1st
+1909 1st 2nd 3rd Last 3rd 2nd 1st
+1910 1st 2nd 3rd Last 3rd 2nd 1st
+1911 1st 2nd 3rd Last 3rd 2nd 1st
+1912 1st 2nd 3rd Last 3rd 2nd 1st
+1913 1st 2nd 3rd Last 3rd 2nd 1st
+1914 1st 2nd 3rd Last 3rd 2nd 1st
+1915 1st 2nd 3rd Last 3rd 2nd 1st
+1916 1st 2nd 3rd Last 3rd 2nd 1st
+1917 1st 2nd 3rd Last 3rd 2nd 1st
+1918 1st 2nd 3rd Last 3rd 2nd 1st
+1919 1st 2nd 3rd Last 3rd 2nd 1st
+1920 1st 2nd 3rd Last 3rd 2nd 1st
+1921 1st 2nd 3rd Last 3rd 2nd 1st
+1922 1st 2nd 3rd Last 3rd 2nd 1st
+1923 1st 2nd 3rd Last 3rd 2nd 1st
+1924 1st 2nd 3rd Last 3rd 2nd 1st
+1925 1st 2nd 3rd Last 3rd 2nd 1st
+1926 1st 2nd 3rd Last 3rd 2nd 1st
+1927 1st 2nd 3rd Last 3rd 2nd 1st
+1928 1st 2nd 3rd Last 3rd 2nd 1st
+1929 1st 2nd 3rd Last 3rd 2nd 1st
+1930 1st 2nd 3rd Last 3rd 2nd 1st
+1931 1st 2nd 3rd Last 3rd 2nd 1st
+1932 1st 2nd 3rd Last 3rd 2nd 1st
+1933 1st 2nd 3rd Last 3rd 2nd 1st
+1934 1st 2nd 3rd Last 3rd 2nd 1st
+1935 1st 2nd 3rd Last 3rd 2nd 1st
+1936 1st 2nd 3rd Last 3rd 2nd 1st
+1937 1st 2nd 3rd Last 3rd 2nd 1st
+1938 1st 2nd 3rd Last 3rd 2nd 1st
+1939 1st 2nd 3rd Last 3rd 2nd 1st
+1940 1st 2nd 3rd Last 3rd 2nd 1st
+1941 1st 2nd 3rd Last 3rd 2nd 1st
+1942 1st 2nd 3rd Last 3rd 2nd 1st
+1943 1st 2nd 3rd Last 3rd 2nd 1st
+1944 1st 2nd 3rd Last 3rd 2nd 1st
+1945 1st 2nd 3rd Last 3rd 2nd 1st
+1946 1st 2nd 3rd Last 3rd 2nd 1st
+1947 1st 2nd 3rd Last 3rd 2nd 1st
+1948 1st 2nd 3rd Last 3rd 2nd 1st
+1949 1st 2nd 3rd Last 3rd 2nd 1st
+1950 1st 2nd 3rd Last 3rd 2nd 1st
+1951 1st 2nd 3rd Last 3rd 2nd 1st
+1952 1st 2nd 3rd Last 3rd 2nd 1st
+1953 1st 2nd 3rd Last 3rd 2nd 1st
+1954 1st 2nd 3rd Last 3rd 2nd 1st
+1955 1st 2nd 3rd Last 3rd 2nd 1st
+1956 1st 2nd 3rd Last 3rd 2nd 1st
+1957 1st 2nd 3rd Last 3rd 2nd 1st
+1958 1st 2nd 3rd Last 3rd 2nd 1st
+1959 1st 2nd 3rd Last 3rd 2nd 1st
+1960 1st 2nd 3rd Last 3rd 2nd 1st
+1961 1st 2nd 3rd Last 3rd 2nd 1st
+1962 1st 2nd 3rd Last 3rd 2nd 1st
+1963 1st 2nd 3rd Last 3rd 2nd 1st
+1964 1st 2nd 3rd Last 3rd 2nd 1st
+1965 1st 2nd 3rd Last 3rd 2nd 1st
+1966 1st 2nd 3rd Last 3rd 2nd 1st
+1967 1st 2nd 3rd Last 3rd 2nd 1st
+1968 1st 2nd 3rd Last 3rd 2nd 1st
+1969 1st 2nd 3rd Last 3rd 2nd 1st
+1970 1st 2nd 3rd Last 3rd 2nd 1st
+1971 1st 2nd 3rd Last 3rd 2nd 1st
+1972 1st 2nd 3rd Last 3rd 2nd 1st
+1973 1st 2nd 3rd Last 3rd 2nd 1st
+1974 1st 2nd 3rd Last 3rd 2nd 1st
+1975 1st 2nd 3rd Last 3rd 2nd 1st
+1976 1st 2nd 3rd Last 3rd 2nd 1st
+1977 1st 2nd 3rd Last 3rd 2nd 1st
+1978 1st 2nd 3rd Last 3rd 2nd 1st
+1979 1st 2nd 3rd Last 3rd 2nd 1st
+1980 1st 2nd 3rd Last 3rd 2nd 1st
+1981 1st 2nd 3rd Last 3rd 2nd 1st
+1982 1st 2nd 3rd Last 3rd 2nd 1st
+1983 1st 2nd 3rd Last 3rd 2nd 1st
+1984 1st 2nd 3rd Last 3rd 2nd 1st
+1985 1st 2nd 3rd Last 3rd 2nd 1st
+1986 1st 2nd 3rd Last 3rd 2nd 1st
+1987 1st 2nd 3rd Last 3rd 2nd 1st
+1988 1st 2nd 3rd Last 3rd 2nd 1st
+1989 1st 2nd 3rd Last 3rd 2nd 1st
+1990 1st 2nd 3rd Last 3rd 2nd 1st
+1991 1st 2nd 3rd Last 3rd 2nd 1st
+1992 1st 2nd 3rd Last 3rd 2nd 1st
+1993 1st 2nd 3rd Last 3rd 2nd 1st
+1994 1st 2nd 3rd Last 3rd 2nd 1st
+1995 1st 2nd 3rd Last 3rd 2nd 1st
+1996 1st 2nd 3rd Last 3rd 2nd 1st
+1997 1st 2nd 3rd Last 3rd 2nd 1st
+1998 1st 2nd 3rd Last 3rd 2nd 1st
+1999 1st 2nd 3rd Last 3rd 2nd 1st
+2000 1st 2nd 3rd Last 3rd 2nd 1st
+2001 1st 2nd 3rd Last 3rd 2nd 1st
+2002 1st 2nd 3rd Last 3rd 2nd 1st
+2003 1st 2nd 3rd Last 3rd 2nd 1st
+2004 1st 2nd 3rd Last 3rd 2nd 1st
+2005 1st 2nd 3rd Last 3rd 2nd 1st
+2006 1st 2nd 3rd Last 3rd 2nd 1st
+2007 1st 2nd 3rd Last 3rd 2nd 1st
+2008 1st 2nd 3rd Last 3rd 2nd 1st
+2009 1st 2nd 3rd Last 3rd 2nd 1st
+2010 1st 2nd 3rd Last 3rd 2nd 1st
+2011 1st 2nd 3rd Last 3rd 2nd 1st
+2012 1st 2nd 3rd Last 3rd 2nd 1st
+2013 1st 2nd 3rd Last 3rd 2nd 1st
+2014 1st 2nd 3rd Last 3rd 2nd 1st
+2015 1st 2nd 3rd Last 3rd 2nd 1st
+2016 1st 2nd 3rd Last 3rd 2nd 1st
+2017 1st 2nd 3rd Last 3rd 2nd 1st
+2018 1st 2nd 3rd Last 3rd 2nd 1st
+2019 1st 2nd 3rd Last 3rd 2nd 1st
+2020 1st 2nd 3rd Last 3rd 2nd 1st
+2021 1st 2nd 3rd Last 3rd 2nd 1st
+2022 1st 2nd 3rd Last 3rd 2nd 1st
+2023 1st 2nd 3rd Last 3rd 2nd 1st
+2024 1st 2nd 3rd Last 3rd 2nd 1st
+2025 1st 2nd 3rd Last 3rd 2nd 1st
+2026 1st 2nd 3rd Last 3rd 2nd 1st
+2027 1st 2nd 3rd Last 3rd 2nd 1st
+2028 1st 2nd 3rd Last 3rd 2nd 1st
+2029 1st 2nd 3rd Last 3rd 2nd 1st
+2030 1st 2nd 3rd Last 3rd 2nd 1st
+2031 1st 2nd 3rd Last 3rd 2nd 1st
+2032 1st 2nd 3rd Last 3rd 2nd 1st
+2033 1st 2nd 3rd Last 3rd 2nd 1st
+2034 1st 2nd 3rd Last 3rd 2nd 1st
+2035 1st 2nd 3rd Last 3rd 2nd 1st
+2036 1st 2nd 3rd Last 3rd 2nd 1st
+2037 1st 2nd 3rd Last 3rd 2nd 1st
+2038 1st 2nd 3rd Last 3rd 2nd 1st
+2039 1st 2nd 3rd Last 3rd 2nd 1st
+2040 1st 2nd 3rd Last 3rd 2nd 1st
+2041 1st 2nd 3rd Last 3rd 2nd 1st
+2042 1st 2nd 3rd Last 3rd 2nd 1st
+2043 1st 2nd 3rd Last 3rd 2nd 1st
+2044 1st 2nd 3rd Last 3rd 2nd 1st
+2045 1st 2nd 3rd Last 3rd 2nd 1st
+2046 1st 2nd 3rd Last 3rd 2nd 1st
+2047 1st 2nd 3rd Last 3rd 2nd 1st
+2048 1st 2nd 3rd Last 3rd 2nd 1st
+2049 1st 2nd 3rd Last 3rd 2nd 1st
+2050 1st 2nd 3rd Last 3rd 2nd 1st
+2051 1st 2nd 3rd Last 3rd 2nd 1st
+2052 1st 2nd 3rd Last 3rd 2nd 1st
+2053 1st 2nd 3rd Last 3rd 2nd 1st
+2054 1st 2nd 3rd Last 3rd 2nd 1st
+2055 1st 2nd 3rd Last 3rd 2nd 1st
+2056 1st 2nd 3rd Last 3rd 2nd 1st
+2057 1st 2nd 3rd Last 3rd 2nd 1st
+2058 1st 2nd 3rd Last 3rd 2nd 1st
+2059 1st 2nd 3rd Last 3rd 2nd 1st
+2060 1st 2nd 3rd Last 3rd 2nd 1st
+2061 1st 2nd 3rd Last 3rd 2nd 1st
+2062 1st 2nd 3rd Last 3rd 2nd 1st
+2063 1st 2nd 3rd Last 3rd 2nd 1st
+2064 1st 2nd 3rd Last 3rd 2nd 1st
+2065 1st 2nd 3rd Last 3rd 2nd 1st
+2066 1st 2nd 3rd Last 3rd 2nd 1st
+2067 1st 2nd 3rd Last 3rd 2nd 1st
+2068 1st 2nd 3rd Last 3rd 2nd 1st
+2069 1st 2nd 3rd Last 3rd 2nd 1st
+2070 1st 2nd 3rd Last 3rd 2nd 1st
+2071 1st 2nd 3rd Last 3rd 2nd 1st
+2072 1st 2nd 3rd Last 3rd 2nd 1st
+2073 1st 2nd 3rd Last 3rd 2nd 1st
+2074 1st 2nd 3rd Last 3rd 2nd 1st
+2075 1st 2nd 3rd Last 3rd 2nd 1st
+2076 1st 2nd 3rd Last 3rd 2nd 1st
+2077 1st 2nd 3rd Last 3rd 2nd 1st
+2078 1st 2nd 3rd Last 3rd 2nd 1st
+2079 1st 2nd 3rd Last 3rd 2nd 1st
+2080 1st 2nd 3rd Last 3rd 2nd 1st
+2081 1st 2nd 3rd Last 3rd 2nd 1st
+2082 1st 2nd 3rd Last 3rd 2nd 1st
+2083 1st 2nd 3rd Last 3rd 2nd 1st
+2084 1st 2nd 3rd Last 3rd 2nd 1st
+2085 1st 2nd 3rd Last 3rd 2nd 1st
+2086 1st 2nd 3rd Last 3rd 2nd 1st
+2087 1st 2nd 3rd Last 3rd 2nd 1st
+2088 1st 2nd 3rd Last 3rd 2nd 1st
+2089 1st 2nd 3rd Last 3rd 2nd 1st
+2090 1st 2nd 3rd Last 3rd 2nd 1st
+2091 1st 2nd 3rd Last 3rd 2nd 1st
+2092 1st 2nd 3rd Last 3rd 2nd 1st
+2093 1st 2nd 3rd Last 3rd 2nd 1st
+2094 1st 2nd 3rd Last 3rd 2nd 1st
+2095 1st 2nd 3rd Last 3rd 2nd 1st
+2096 1st 2nd 3rd Last 3rd 2nd 1st
+2097 1st 2nd 3rd Last 3rd 2nd 1st
+2098 1st 2nd 3rd Last 3rd 2nd 1st
+2099 1st 2nd 3rd Last 3rd 2nd 1st
+2100 1st 2nd 3rd Last 3rd 2nd 1st
+2101 1st 2nd 3rd Last 3rd 2nd 1st
+2102 1st 2nd 3rd Last 3rd 2nd 1st
+2103 1st 2nd 3rd Last 3rd 2nd 1st
+2104 1st 2nd 3rd Last 3rd 2nd 1st
+2105 1st 2nd 3rd Last 3rd 2nd 1st
+2106 1st 2nd 3rd Last 3rd 2nd 1st
+2107 1st 2nd 3rd Last 3rd 2nd 1st
+2108 1st 2nd 3rd Last 3rd 2nd 1st
+2109 1st 2nd 3rd Last 3rd 2nd 1st
+2110 1st 2nd 3rd Last 3rd 2nd 1st
+2111 1st 2nd 3rd Last 3rd 2nd 1st
+2112 1st 2nd 3rd Last 3rd 2nd 1st
+2113 1st 2nd 3rd Last 3rd 2nd 1st
+2114 1st 2nd 3rd Last 3rd 2nd 1st
+2115 1st 2nd 3rd Last 3rd 2nd 1st
+2116 1st 2nd 3rd Last 3rd 2nd 1st
+2117 1st 2nd 3rd Last 3rd 2nd 1st
+2118 1st 2nd 3rd Last 3rd 2nd 1st
+2119 1st 2nd 3rd Last 3rd 2nd 1st
+2120 1st 2nd 3rd Last 3rd 2nd 1st
+2121 1st 2nd 3rd Last 3rd 2nd 1st
+2122 1st 2nd 3rd Last 3rd 2nd 1st
+2123 1st 2nd 3rd Last 3rd 2nd 1st
+2124 1st 2nd 3rd Last 3rd 2nd 1st
+2125 1st 2nd 3rd Last 3rd 2nd 1st
+2126 1st 2nd 3rd Last 3rd 2nd 1st
+2127 1st 2nd 3rd Last 3rd 2nd 1st
+2128 1st 2nd 3rd Last 3rd 2nd 1st
+2129 1st 2nd 3rd Last 3rd 2nd 1st
+2130 1st 2nd 3rd Last 3rd 2nd 1st
+2131 1st 2nd 3rd Last 3rd 2nd 1st
+2132 1st 2nd 3rd Last 3rd 2nd 1st
+2133 1st 2nd 3rd Last 3rd 2nd 1st
+2134 1st 2nd 3rd Last 3rd 2nd 1st
+2135 1st 2nd 3rd Last 3rd 2nd 1st
+2136 1st 2nd 3rd Last 3rd 2nd 1st
+2137 1st 2nd 3rd Last 3rd 2nd 1st
+2138 1st 2nd 3rd Last 3rd 2nd 1st
+2139 1st 2nd 3rd Last 3rd 2nd 1st
+2140 1st 2nd 3rd Last 3rd 2nd 1st
+2141 1st 2nd 3rd Last 3rd 2nd 1st
+2142 1st 2nd 3rd Last 3rd 2nd 1st
+2143 1st 2nd 3rd Last 3rd 2nd 1st
+2144 1st 2nd 3rd Last 3rd 2nd 1st
+2145 1st 2nd 3rd Last 3rd 2nd 1st
+2146 1st 2nd 3rd Last 3rd 2nd 1st
+2147 1st 2nd 3rd Last 3rd 2nd 1st
+2148 1st 2nd 3rd Last 3rd 2nd 1st
+2149 1st 2nd 3rd Last 3rd 2nd 1st
+2150 1st 2nd 3rd Last 3rd 2nd 1st
+2151 1st 2nd 3rd Last 3rd 2nd 1st
+2152 1st 2nd 3rd Last 3rd 2nd 1st
+2153 1st 2nd 3rd Last 3rd 2nd 1st
+2154 1st 2nd 3rd Last 3rd 2nd 1st
+2155 1st 2nd 3rd Last 3rd 2nd 1st
+2156 1st 2nd 3rd Last 3rd 2nd 1st
+2157 1st 2nd 3rd Last 3rd 2nd 1st
+2158 1st 2nd 3rd Last 3rd 2nd 1st
+2159 1st 2nd 3rd Last 3rd 2nd 1st
+2160 1st 2nd 3rd Last 3rd 2nd 1st
+2161 1st 2nd 3rd Last 3rd 2nd 1st
+2162 1st 2nd 3rd Last 3rd 2nd 1st
+2163 1st 2nd 3rd Last 3rd 2nd 1st
+2164 1st 2nd 3rd Last 3rd 2nd 1st
+2165 1st 2nd 3rd Last 3rd 2nd 1st
+2166 1st 2nd 3rd Last 3rd 2nd 1st
+2167 1st 2nd 3rd Last 3rd 2nd 1st
+2168 1st 2nd 3rd Last 3rd 2nd 1st
+2169 1st 2nd 3rd Last 3rd 2nd 1st
+2170 1st 2nd 3rd Last 3rd 2nd 1st
+2171 1st 2nd 3rd Last 3rd 2nd 1st
+2172 1st 2nd 3rd Last 3rd 2nd 1st
+2173 1st 2nd 3rd Last 3rd 2nd 1st
+2174 1st 2nd 3rd Last 3rd 2nd 1st
+2175 1st 2nd 3rd Last 3rd 2nd 1st
+2176 1st 2nd 3rd Last 3rd 2nd 1st
+2177 1st 2nd 3rd Last 3rd 2nd 1st
+2178 1st 2nd 3rd Last 3rd 2nd 1st
+2179 1st 2nd 3rd Last 3rd 2nd 1st
+2180 1st 2nd 3rd Last 3rd 2nd 1st
+2181 1st 2nd 3rd Last 3rd 2nd 1st
+2182 1st 2nd 3rd Last 3rd 2nd 1st
+2183 1st 2nd 3rd Last 3rd 2nd 1st
+2184 1st 2nd 3rd Last 3rd 2nd 1st
+2185 1st 2nd 3rd Last 3rd 2nd 1st
+2186 1st 2nd 3rd Last 3rd 2nd 1st
+2187 1st 2nd 3rd Last 3rd 2nd 1st
+2188 1st 2nd 3rd Last 3rd 2nd 1st
+2189 1st 2nd 3rd Last 3rd 2nd 1st
+2190 1st 2nd 3rd Last 3rd 2nd 1st
+2191 1st 2nd 3rd Last 3rd 2nd 1st
+2192 1st 2nd 3rd Last 3rd 2nd 1st
+2193 1st 2nd 3rd Last 3rd 2nd 1st
+2194 1st 2nd 3rd Last 3rd 2nd 1st
+2195 1st 2nd 3rd Last 3rd 2nd 1st
+2196 1st 2nd 3rd Last 3rd 2nd 1st
+2197 1st 2nd 3rd Last 3rd 2nd 1st
+2198 1st 2nd 3rd Last 3rd 2nd 1st
+2199 1st 2nd 3rd Last 3rd 2nd 1st
+2200 1st 2nd 3rd Last 3rd 2nd 1st
+2201 1st 2nd 3rd Last 3rd 2nd 1st
+2202 1st 2nd 3rd Last 3rd 2nd 1st
+2203 1st 2nd 3rd Last 3rd 2nd 1st
+2204 1st 2nd 3rd Last 3rd 2nd 1st
+2205 1st 2nd 3rd Last 3rd 2nd 1st
+2206 1st 2nd 3rd Last 3rd 2nd 1st
+2207 1st 2nd 3rd Last 3rd 2nd 1st
+2208 1st 2nd 3rd Last 3rd 2nd 1st
+2209 1st 2nd 3rd Last 3rd 2nd 1st
+2210 1st 2nd 3rd Last 3rd 2nd 1st
+2211 1st 2nd 3rd Last 3rd 2nd 1st
+2212 1st 2nd 3rd Last 3rd 2nd 1st
+2213 1st 2nd 3rd Last 3rd 2nd 1st
+2214 1st 2nd 3rd Last 3rd 2nd 1st
+2215 1st 2nd 3rd Last 3rd 2nd 1st
+2216 1st 2nd 3rd Last 3rd 2nd 1st
+2217 1st 2nd 3rd Last 3rd 2nd 1st
+2218 1st 2nd 3rd Last 3rd 2nd 1st
+2219 1st 2nd 3rd Last 3rd 2nd 1st
+2220 1st 2nd 3rd Last 3rd 2nd 1st
+2221 1st 2nd 3rd Last 3rd 2nd 1st
+2222 1st 2nd 3rd Last 3rd 2nd 1st
+2223 1st 2nd 3rd Last 3rd 2nd 1st
+2224 1st 2nd 3rd Last 3rd 2nd 1st
+2225 1st 2nd 3rd Last 3rd 2nd 1st
+2226 1st 2nd 3rd Last 3rd 2nd 1st
+2227 1st 2nd 3rd Last 3rd 2nd 1st
+2228 1st 2nd 3rd Last 3rd 2nd 1st
+2229 1st 2nd 3rd Last 3rd 2nd 1st
+2230 1st 2nd 3rd Last 3rd 2nd 1st
+2231 1st 2nd 3rd Last 3rd 2nd 1st
+2232 1st 2nd 3rd Last 3rd 2nd 1st
+2233 1st 2nd 3rd Last 3rd 2nd 1st
+2234 1st 2nd 3rd Last 3rd 2nd 1st
+2235 1st 2nd 3rd Last 3rd 2nd 1st
+2236 1st 2nd 3rd Last 3rd 2nd 1st
+2237 1st 2nd 3rd Last 3rd 2nd 1st
+2238 1st 2nd 3rd Last 3rd 2nd 1st
+2239 1st 2nd 3rd Last 3rd 2nd 1st
+2240 1st 2nd 3rd Last 3rd 2nd 1st
+2241 1st 2nd 3rd Last 3rd 2nd 1st
+2242 1st 2nd 3rd Last 3rd 2nd 1st
+2243 1st 2nd 3rd Last 3rd 2nd 1st
+2244 1st 2nd 3rd Last 3rd 2nd 1st
+2245 1st 2nd 3rd Last 3rd 2nd 1st
+2246 1st 2nd 3rd Last 3rd 2nd 1st
+2247 1st 2nd 3rd Last 3rd 2nd 1st
+2248 1st 2nd 3rd Last 3rd 2nd 1st
+2249 1st 2nd 3rd Last 3rd 2nd 1st
+2250 1st 2nd 3rd Last 3rd 2nd 1st
+2251 1st 2nd 3rd Last 3rd 2nd 1st
+2252 1st 2nd 3rd Last 3rd 2nd 1st
+2253 1st 2nd 3rd Last 3rd 2nd 1st
+2254 1st 2nd 3rd Last 3rd 2nd 1st
+2255 1st 2nd 3rd Last 3rd 2nd 1st
+2256 1st 2nd 3rd Last 3rd 2nd 1st
+2257 1st 2nd 3rd Last 3rd 2nd 1st
+2258 1st 2nd 3rd Last 3rd 2nd 1st
+2259 1st 2nd 3rd Last 3rd 2nd 1st
+2260 1st 2nd 3rd Last 3rd 2nd 1st
+2261 1st 2nd 3rd Last 3rd 2nd 1st
+2262 1st 2nd 3rd Last 3rd 2nd 1st
+2263 1st 2nd 3rd Last 3rd 2nd 1st
+2264 1st 2nd 3rd Last 3rd 2nd 1st
+2265 1st 2nd 3rd Last 3rd 2nd 1st
+2266 1st 2nd 3rd Last 3rd 2nd 1st
+2267 1st 2nd 3rd Last 3rd 2nd 1st
+2268 1st 2nd 3rd Last 3rd 2nd 1st
+2269 1st 2nd 3rd Last 3rd 2nd 1st
+2270 1st 2nd 3rd Last 3rd 2nd 1st
+2271 1st 2nd 3rd Last 3rd 2nd 1st
+2272 1st 2nd 3rd Last 3rd 2nd 1st
+2273 1st 2nd 3rd Last 3rd 2nd 1st
+2274 1st 2nd 3rd Last 3rd 2nd 1st
+2275 1st 2nd 3rd Last 3rd 2nd 1st
+2276 1st 2nd 3rd Last 3rd 2nd 1st
+2277 1st 2nd 3rd Last 3rd 2nd 1st
+2278 1st 2nd 3rd Last 3rd 2nd 1st
+2279 1st 2nd 3rd Last 3rd 2nd 1st
+2280 1st 2nd 3rd Last 3rd 2nd 1st
+2281 1st 2nd 3rd Last 3rd 2nd 1st
+2282 1st 2nd 3rd Last 3rd 2nd 1st
+2283 1st 2nd 3rd Last 3rd 2nd 1st
+2284 1st 2nd 3rd Last 3rd 2nd 1st
+2285 1st 2nd 3rd Last 3rd 2nd 1st
+2286 1st 2nd 3rd Last 3rd 2nd 1st
+2287 1st 2nd 3rd Last 3rd 2nd 1st
+2288 1st 2nd 3rd Last 3rd 2nd 1st
+2289 1st 2nd 3rd Last 3rd 2nd 1st
+2290 1st 2nd 3rd Last 3rd 2nd 1st
+2291 1st 2nd 3rd Last 3rd 2nd 1st
+2292 1st 2nd 3rd Last 3rd 2nd 1st
+2293 1st 2nd 3rd Last 3rd 2nd 1st
+2294 1st 2nd 3rd Last 3rd 2nd 1st
+2295 1st 2nd 3rd Last 3rd 2nd 1st
+2296 1st 2nd 3rd Last 3rd 2nd 1st
+2297 1st 2nd 3rd Last 3rd 2nd 1st
+2298 1st 2nd 3rd Last 3rd 2nd 1st
+2299 1st 2nd 3rd Last 3rd 2nd 1st
+2300 1st 2nd 3rd Last 3rd 2nd 1st
+2301 1st 2nd 3rd Last 3rd 2nd 1st
+2302 1st 2nd 3rd Last 3rd 2nd 1st
+2303 1st 2nd 3rd Last 3rd 2nd 1st
+2304 1st 2nd 3rd Last 3rd 2nd 1st
+2305 1st 2nd 3rd Last 3rd 2nd 1st
+2306 1st 2nd 3rd Last 3rd 2nd 1st
+2307 1st 2nd 3rd Last 3rd 2nd 1st
+2308 1st 2nd 3rd Last 3rd 2nd 1st
+2309 1st 2nd 3rd Last 3rd 2nd 1st
+2310 1st 2nd 3rd Last 3rd 2nd 1st
+2311 1st 2nd 3rd Last 3rd 2nd 1st
+2312 1st 2nd 3rd Last 3rd 2nd 1st
+2313 1st 2nd 3rd Last 3rd 2nd 1st
+2314 1st 2nd 3rd Last 3rd 2nd 1st
+2315 1st 2nd 3rd Last 3rd 2nd 1st
+2316 1st 2nd 3rd Last 3rd 2nd 1st
+2317 1st 2nd 3rd Last 3rd 2nd 1st
+2318 1st 2nd 3rd Last 3rd 2nd 1st
+2319 1st 2nd 3rd Last 3rd 2nd 1st
+2320 1st 2nd 3rd Last 3rd 2nd 1st
+2321 1st 2nd 3rd Last 3rd 2nd 1st
+2322 1st 2nd 3rd Last 3rd 2nd 1st
+2323 1st 2nd 3rd Last 3rd 2nd 1st
+2324 1st 2nd 3rd Last 3rd 2nd 1st
+2325 1st 2nd 3rd Last 3rd 2nd 1st
+2326 1st 2nd 3rd Last 3rd 2nd 1st
+2327 1st 2nd 3rd Last 3rd 2nd 1st
+2328 1st 2nd 3rd Last 3rd 2nd 1st
+2329 1st 2nd 3rd Last 3rd 2nd 1st
+2330 1st 2nd 3rd Last 3rd 2nd 1st
+2331 1st 2nd 3rd Last 3rd 2nd 1st
+2332 1st 2nd 3rd Last 3rd 2nd 1st
+2333 1st 2nd 3rd Last 3rd 2nd 1st
+2334 1st 2nd 3rd Last 3rd 2nd 1st
+2335 1st 2nd 3rd Last 3rd 2nd 1st
+2336 1st 2nd 3rd Last 3rd 2nd 1st
+2337 1st 2nd 3rd Last 3rd 2nd 1st
+2338 1st 2nd 3rd Last 3rd 2nd 1st
+2339 1st 2nd 3rd Last 3rd 2nd 1st
+2340 1st 2nd 3rd Last 3rd 2nd 1st
+2341 1st 2nd 3rd Last 3rd 2nd 1st
+2342 1st 2nd 3rd Last 3rd 2nd 1st
+2343 1st 2nd 3rd Last 3rd 2nd 1st
+2344 1st 2nd 3rd Last 3rd 2nd 1st
+2345 1st 2nd 3rd Last 3rd 2nd 1st
+2346 1st 2nd 3rd Last 3rd 2nd 1st
+2347 1st 2nd 3rd Last 3rd 2nd 1st
+2348 1st 2nd 3rd Last 3rd 2nd 1st
+2349 1st 2nd 3rd Last 3rd 2nd 1st
+2350 1st 2nd 3rd Last 3rd 2nd 1st
+2351 1st 2nd 3rd Last 3rd 2nd 1st
+2352 1st 2nd 3rd Last 3rd 2nd 1st
+2353 1st 2nd 3rd Last 3rd 2nd 1st
+2354 1st 2nd 3rd Last 3rd 2nd 1st
+2355 1st 2nd 3rd Last 3rd 2nd 1st
+2356 1st 2nd 3rd Last 3rd 2nd 1st
+2357 1st 2nd 3rd Last 3rd 2nd 1st
+2358 1st 2nd 3rd Last 3rd 2nd 1st
+2359 1st 2nd 3rd Last 3rd 2nd 1st
+2360 1st 2nd 3rd Last 3rd 2nd 1st
+2361 1st 2nd 3rd Last 3rd 2nd 1st
+2362 1st 2nd 3rd Last 3rd 2nd 1st
+2363 1st 2nd 3rd Last 3rd 2nd 1st
+2364 1st 2nd 3rd Last 3rd 2nd 1st
+2365 1st 2nd 3rd Last 3rd 2nd 1st
+2366 1st 2nd 3rd Last 3rd 2nd 1st
+2367 1st 2nd 3rd Last 3rd 2nd 1st
+2368 1st 2nd 3rd Last 3rd 2nd 1st
+2369 1st 2nd 3rd Last 3rd 2nd 1st
+2370 1st 2nd 3rd Last 3rd 2nd 1st
+2371 1st 2nd 3rd Last 3rd 2nd 1st
+2372 1st 2nd 3rd Last 3rd 2nd 1st
+2373 1st 2nd 3rd Last 3rd 2nd 1st
+2374 1st 2nd 3rd Last 3rd 2nd 1st
+2375 1st 2nd 3rd Last 3rd 2nd 1st
+2376 1st 2nd 3rd Last 3rd 2nd 1st
+2377 1st 2nd 3rd Last 3rd 2nd 1st
+2378 1st 2nd 3rd Last 3rd 2nd 1st
+2379 1st 2nd 3rd Last 3rd 2nd 1st
+2380 1st 2nd 3rd Last 3rd 2nd 1st
+2381 1st 2nd 3rd Last 3rd 2nd 1st
+2382 1st 2nd 3rd Last 3rd 2nd 1st
+2383 1st 2nd 3rd Last 3rd 2nd 1st
+2384 1st 2nd 3rd Last 3rd 2nd 1st
+2385 1st 2nd 3rd Last 3rd 2nd 1st
+2386 1st 2nd 3rd Last 3rd 2nd 1st
+2387 1st 2nd 3rd Last 3rd 2nd 1st
+2388 1st 2nd 3rd Last 3rd 2nd 1st
+2389 1st 2nd 3rd Last 3rd 2nd 1st
+2390 1st 2nd 3rd Last 3rd 2nd 1st
+2391 1st 2nd 3rd Last 3rd 2nd 1st
+2392 1st 2nd 3rd Last 3rd 2nd 1st
+2393 1st 2nd 3rd Last 3rd 2nd 1st
+2394 1st 2nd 3rd Last 3rd 2nd 1st
+2395 1st 2nd 3rd Last 3rd 2nd 1st
+2396 1st 2nd 3rd Last 3rd 2nd 1st
+2397 1st 2nd 3rd Last 3rd 2nd 1st
+2398 1st 2nd 3rd Last 3rd 2nd 1st
+2399 1st 2nd 3rd Last 3rd 2nd 1st
+2400 1st 2nd 3rd Last 3rd 2nd 1st
+2401 1st 2nd 3rd Last 3rd 2nd 1st
+2402 1st 2nd 3rd Last 3rd 2nd 1st
+2403 1st 2nd 3rd Last 3rd 2nd 1st
+2404 1st 2nd 3rd Last 3rd 2nd 1st
+2405 1st 2nd 3rd Last 3rd 2nd 1st
+2406 1st 2nd 3rd Last 3rd 2nd 1st
+2407 1st 2nd 3rd Last 3rd 2nd 1st
+2408 1st 2nd 3rd Last 3rd 2nd 1st
+2409 1st 2nd 3rd Last 3rd 2nd 1st
+2410 1st 2nd 3rd Last 3rd 2nd 1st
+2411 1st 2nd 3rd Last 3rd 2nd 1st
+2412 1st 2nd 3rd Last 3rd 2nd 1st
+2413 1st 2nd 3rd Last 3rd 2nd 1st
+2414 1st 2nd 3rd Last 3rd 2nd 1st
+2415 1st 2nd 3rd Last 3rd 2nd 1st
+2416 1st 2nd 3rd Last 3rd 2nd 1st
+2417 1st 2nd 3rd Last 3rd 2nd 1st
+2418 1st 2nd 3rd Last 3rd 2nd 1st
+2419 1st 2nd 3rd Last 3rd 2nd 1st
+2420 1st 2nd 3rd Last 3rd 2nd 1st
+2421 1st 2nd 3rd Last 3rd 2nd 1st
+2422 1st 2nd 3rd Last 3rd 2nd 1st
+2423 1st 2nd 3rd Last 3rd 2nd 1st
+2424 1st 2nd 3rd Last 3rd 2nd 1st
+2425 1st 2nd 3rd Last 3rd 2nd 1st
+2426 1st 2nd 3rd Last 3rd 2nd 1st
+2427 1st 2nd 3rd Last 3rd 2nd 1st
+2428 1st 2nd 3rd Last 3rd 2nd 1st
+2429 1st 2nd 3rd Last 3rd 2nd 1st
+2430 1st 2nd 3rd Last 3rd 2nd 1st
+2431 1st 2nd 3rd Last 3rd 2nd 1st
+2432 1st 2nd 3rd Last 3rd 2nd 1st
+2433 1st 2nd 3rd Last 3rd 2nd 1st
+2434 1st 2nd 3rd Last 3rd 2nd 1st
+2435 1st 2nd 3rd Last 3rd 2nd 1st
+2436 1st 2nd 3rd Last 3rd 2nd 1st
+2437 1st 2nd 3rd Last 3rd 2nd 1st
+2438 1st 2nd 3rd Last 3rd 2nd 1st
+2439 1st 2nd 3rd Last 3rd 2nd 1st
+2440 1st 2nd 3rd Last 3rd 2nd 1st
+2441 1st 2nd 3rd Last 3rd 2nd 1st
+2442 1st 2nd 3rd Last 3rd 2nd 1st
+2443 1st 2nd 3rd Last 3rd 2nd 1st
+2444 1st 2nd 3rd Last 3rd 2nd 1st
+2445 1st 2nd 3rd Last 3rd 2nd 1st
+2446 1st 2nd 3rd Last 3rd 2nd 1st
+2447 1st 2nd 3rd Last 3rd 2nd 1st
+2448 1st 2nd 3rd Last 3rd 2nd 1st
+2449 1st 2nd 3rd Last 3rd 2nd 1st
+2450 1st 2nd 3rd Last 3rd 2nd 1st
+2451 1st 2nd 3rd Last 3rd 2nd 1st
+2452 1st 2nd 3rd Last 3rd 2nd 1st
+2453 1st 2nd 3rd Last 3rd 2nd 1st
+2454 1st 2nd 3rd Last 3rd 2nd 1st
+2455 1st 2nd 3rd Last 3rd 2nd 1st
+2456 1st 2nd 3rd Last 3rd 2nd 1st
+2457 1st 2nd 3rd Last 3rd 2nd 1st
+2458 1st 2nd 3rd Last 3rd 2nd 1st
+2459 1st 2nd 3rd Last 3rd 2nd 1st
+2460 1st 2nd 3rd Last 3rd 2nd 1st
+2461 1st 2nd 3rd Last 3rd 2nd 1st
+2462 1st 2nd 3rd Last 3rd 2nd 1st
+2463 1st 2nd 3rd Last 3rd 2nd 1st
+2464 1st 2nd 3rd Last 3rd 2nd 1st
+2465 1st 2nd 3rd Last 3rd 2nd 1st
+2466 1st 2nd 3rd Last 3rd 2nd 1st
+2467 1st 2nd 3rd Last 3rd 2nd 1st
+2468 1st 2nd 3rd Last 3rd 2nd 1st
+2469 1st 2nd 3rd Last 3rd 2nd 1st
+2470 1st 2nd 3rd Last 3rd 2nd 1st
+2471 1st 2nd 3rd Last 3rd 2nd 1st
+2472 1st 2nd 3rd Last 3rd 2nd 1st
+2473 1st 2nd 3rd Last 3rd 2nd 1st
+2474 1st 2nd 3rd Last 3rd 2nd 1st
+2475 1st 2nd 3rd Last 3rd 2nd 1st
+2476 1st 2nd 3rd Last 3rd 2nd 1st
+2477 1st 2nd 3rd Last 3rd 2nd 1st
+2478 1st 2nd 3rd Last 3rd 2nd 1st
+2479 1st 2nd 3rd Last 3rd 2nd 1st
+2480 1st 2nd 3rd Last 3rd 2nd 1st
+2481 1st 2nd 3rd Last 3rd 2nd 1st
+2482 1st 2nd 3rd Last 3rd 2nd 1st
+2483 1st 2nd 3rd Last 3rd 2nd 1st
+2484 1st 2nd 3rd Last 3rd 2nd 1st
+2485 1st 2nd 3rd Last 3rd 2nd 1st
+2486 1st 2nd 3rd Last 3rd 2nd 1st
+2487 1st 2nd 3rd Last 3rd 2nd 1st
+2488 1st 2nd 3rd Last 3rd 2nd 1st
+2489 1st 2nd 3rd Last 3rd 2nd 1st
+2490 1st 2nd 3rd Last 3rd 2nd 1st
+2491 1st 2nd 3rd Last 3rd 2nd 1st
+2492 1st 2nd 3rd Last 3rd 2nd 1st
+2493 1st 2nd 3rd Last 3rd 2nd 1st
+2494 1st 2nd 3rd Last 3rd 2nd 1st
+2495 1st 2nd 3rd Last 3rd 2nd 1st
+2496 1st 2nd 3rd Last 3rd 2nd 1st
+2497 1st 2nd 3rd Last 3rd 2nd 1st
+2498 1st 2nd 3rd Last 3rd 2nd 1st
+2499 1st 2nd 3rd Last 3rd 2nd 1st
+2500 1st 2nd 3rd Last 3rd 2nd 1st
+2501 1st 2nd 3rd Last 3rd 2nd 1st
+2502 1st 2nd 3rd Last 3rd 2nd 1st
+2503 1st 2nd 3rd Last 3rd 2nd 1st
+2504 1st 2nd 3rd Last 3rd 2nd 1st
+2505 1st 2nd 3rd Last 3rd 2nd 1st
+2506 1st 2nd 3rd Last 3rd 2nd 1st
+2507 1st 2nd 3rd Last 3rd 2nd 1st
+2508 1st 2nd 3rd Last 3rd 2nd 1st
+2509 1st 2nd 3rd Last 3rd 2nd 1st
+2510 1st 2nd 3rd Last 3rd 2nd 1st
+2511 1st 2nd 3rd Last 3rd 2nd 1st
+2512 1st 2nd 3rd Last 3rd 2nd 1st
+2513 1st 2nd 3rd Last 3rd 2nd 1st
+2514 1st 2nd 3rd Last 3rd 2nd 1st
+2515 1st 2nd 3rd Last 3rd 2nd 1st
+2516 1st 2nd 3rd Last 3rd 2nd 1st
+2517 1st 2nd 3rd Last 3rd 2nd 1st
+2518 1st 2nd 3rd Last 3rd 2nd 1st
+2519 1st 2nd 3rd Last 3rd 2nd 1st
+2520 1st 2nd 3rd Last 3rd 2nd 1st
+2521 1st 2nd 3rd Last 3rd 2nd 1st
+2522 1st 2nd 3rd Last 3rd 2nd 1st
+2523 1st 2nd 3rd Last 3rd 2nd 1st
+2524 1st 2nd 3rd Last 3rd 2nd 1st
+2525 1st 2nd 3rd Last 3rd 2nd 1st
+2526 1st 2nd 3rd Last 3rd 2nd 1st
+2527 1st 2nd 3rd Last 3rd 2nd 1st
+2528 1st 2nd 3rd Last 3rd 2nd 1st
+2529 1st 2nd 3rd Last 3rd 2nd 1st
+2530 1st 2nd 3rd Last 3rd 2nd 1st
+2531 1st 2nd 3rd Last 3rd 2nd 1st
+2532 1st 2nd 3rd Last 3rd 2nd 1st
+2533 1st 2nd 3rd Last 3rd 2nd 1st
+2534 1st 2nd 3rd Last 3rd 2nd 1st
+2535 1st 2nd 3rd Last 3rd 2nd 1st
+2536 1st 2nd 3rd Last 3rd 2nd 1st
+2537 1st 2nd 3rd Last 3rd 2nd 1st
+2538 1st 2nd 3rd Last 3rd 2nd 1st
+2539 1st 2nd 3rd Last 3rd 2nd 1st
+2540 1st 2nd 3rd Last 3rd 2nd 1st
+2541 1st 2nd 3rd Last 3rd 2nd 1st
+2542 1st 2nd 3rd Last 3rd 2nd 1st
+2543 1st 2nd 3rd Last 3rd 2nd 1st
+2544 1st 2nd 3rd Last 3rd 2nd 1st
+2545 1st 2nd 3rd Last 3rd 2nd 1st
+2546 1st 2nd 3rd Last 3rd 2nd 1st
+2547 1st 2nd 3rd Last 3rd 2nd 1st
+2548 1st 2nd 3rd Last 3rd 2nd 1st
+2549 1st 2nd 3rd Last 3rd 2nd 1st
+2550 1st 2nd 3rd Last 3rd 2nd 1st
+2551 1st 2nd 3rd Last 3rd 2nd 1st
+2552 1st 2nd 3rd Last 3rd 2nd 1st
+2553 1st 2nd 3rd Last 3rd 2nd 1st
+2554 1st 2nd 3rd Last 3rd 2nd 1st
+2555 1st 2nd 3rd Last 3rd 2nd 1st
+2556 1st 2nd 3rd Last 3rd 2nd 1st
+2557 1st 2nd 3rd Last 3rd 2nd 1st
+2558 1st 2nd 3rd Last 3rd 2nd 1st
+2559 1st 2nd 3rd Last 3rd 2nd 1st
+2560 1st 2nd 3rd Last 3rd 2nd 1st
+2561 1st 2nd 3rd Last 3rd 2nd 1st
+2562 1st 2nd 3rd Last 3rd 2nd 1st
+2563 1st 2nd 3rd Last 3rd 2nd 1st
+2564 1st 2nd 3rd Last 3rd 2nd 1st
+2565 1st 2nd 3rd Last 3rd 2nd 1st
+2566 1st 2nd 3rd Last 3rd 2nd 1st
+2567 1st 2nd 3rd Last 3rd 2nd 1st
+2568 1st 2nd 3rd Last 3rd 2nd 1st
+2569 1st 2nd 3rd Last 3rd 2nd 1st
+2570 1st 2nd 3rd Last 3rd 2nd 1st
+2571 1st 2nd 3rd Last 3rd 2nd 1st
+2572 1st 2nd 3rd Last 3rd 2nd 1st
+2573 1st 2nd 3rd Last 3rd 2nd 1st
+2574 1st 2nd 3rd Last 3rd 2nd 1st
+2575 1st 2nd 3rd Last 3rd 2nd 1st
+2576 1st 2nd 3rd Last 3rd 2nd 1st
+2577 1st 2nd 3rd Last 3rd 2nd 1st
+2578 1st 2nd 3rd Last 3rd 2nd 1st
+2579 1st 2nd 3rd Last 3rd 2nd 1st
+2580 1st 2nd 3rd Last 3rd 2nd 1st
+2581 1st 2nd 3rd Last 3rd 2nd 1st
+2582 1st 2nd 3rd Last 3rd 2nd 1st
+2583 1st 2nd 3rd Last 3rd 2nd 1st
+2584 1st 2nd 3rd Last 3rd 2nd 1st
+2585 1st 2nd 3rd Last 3rd 2nd 1st
+2586 1st 2nd 3rd Last 3rd 2nd 1st
+2587 1st 2nd 3rd Last 3rd 2nd 1st
+2588 1st 2nd 3rd Last 3rd 2nd 1st
+2589 1st 2nd 3rd Last 3rd 2nd 1st
+2590 1st 2nd 3rd Last 3rd 2nd 1st
+2591 1st 2nd 3rd Last 3rd 2nd 1st
+2592 1st 2nd 3rd Last 3rd 2nd 1st
+2593 1st 2nd 3rd Last 3rd 2nd 1st
+2594 1st 2nd 3rd Last 3rd 2nd 1st
+2595 1st 2nd 3rd Last 3rd 2nd 1st
+2596 1st 2nd 3rd Last 3rd 2nd 1st
+2597 1st 2nd 3rd Last 3rd 2nd 1st
+2598 1st 2nd 3rd Last 3rd 2nd 1st
+2599 1st 2nd 3rd Last 3rd 2nd 1st
+2600 1st 2nd 3rd Last 3rd 2nd 1st
+2601 1st 2nd 3rd Last 3rd 2nd 1st
+2602 1st 2nd 3rd Last 3rd 2nd 1st
+2603 1st 2nd 3rd Last 3rd 2nd 1st
+2604 1st 2nd 3rd Last 3rd 2nd 1st
+2605 1st 2nd 3rd Last 3rd 2nd 1st
+2606 1st 2nd 3rd Last 3rd 2nd 1st
+2607 1st 2nd 3rd Last 3rd 2nd 1st
+2608 1st 2nd 3rd Last 3rd 2nd 1st
+2609 1st 2nd 3rd Last 3rd 2nd 1st
+2610 1st 2nd 3rd Last 3rd 2nd 1st
+2611 1st 2nd 3rd Last 3rd 2nd 1st
+2612 1st 2nd 3rd Last 3rd 2nd 1st
+2613 1st 2nd 3rd Last 3rd 2nd 1st
+2614 1st 2nd 3rd Last 3rd 2nd 1st
+2615 1st 2nd 3rd Last 3rd 2nd 1st
+2616 1st 2nd 3rd Last 3rd 2nd 1st
+2617 1st 2nd 3rd Last 3rd 2nd 1st
+2618 1st 2nd 3rd Last 3rd 2nd 1st
+2619 1st 2nd 3rd Last 3rd 2nd 1st
+2620 1st 2nd 3rd Last 3rd 2nd 1st
+2621 1st 2nd 3rd Last 3rd 2nd 1st
+2622 1st 2nd 3rd Last 3rd 2nd 1st
+2623 1st 2nd 3rd Last 3rd 2nd 1st
+2624 1st 2nd 3rd Last 3rd 2nd 1st
+2625 1st 2nd 3rd Last 3rd 2nd 1st
+2626 1st 2nd 3rd Last 3rd 2nd 1st
+2627 1st 2nd 3rd Last 3rd 2nd 1st
+2628 1st 2nd 3rd Last 3rd 2nd 1st
+2629 1st 2nd 3rd Last 3rd 2nd 1st
+2630 1st 2nd 3rd Last 3rd 2nd 1st
+2631 1st 2nd 3rd Last 3rd 2nd 1st
+2632 1st 2nd 3rd Last 3rd 2nd 1st
+2633 1st 2nd 3rd Last 3rd 2nd 1st
+2634 1st 2nd 3rd Last 3rd 2nd 1st
+2635 1st 2nd 3rd Last 3rd 2nd 1st
+2636 1st 2nd 3rd Last 3rd 2nd 1st
+2637 1st 2nd 3rd Last 3rd 2nd 1st
+2638 1st 2nd 3rd Last 3rd 2nd 1st
+2639 1st 2nd 3rd Last 3rd 2nd 1st
+2640 1st 2nd 3rd Last 3rd 2nd 1st
+2641 1st 2nd 3rd Last 3rd 2nd 1st
+2642 1st 2nd 3rd Last 3rd 2nd 1st
+2643 1st 2nd 3rd Last 3rd 2nd 1st
+2644 1st 2nd 3rd Last 3rd 2nd 1st
+2645 1st 2nd 3rd Last 3rd 2nd 1st
+2646 1st 2nd 3rd Last 3rd 2nd 1st
+2647 1st 2nd 3rd Last 3rd 2nd 1st
+2648 1st 2nd 3rd Last 3rd 2nd 1st
+2649 1st 2nd 3rd Last 3rd 2nd 1st
+2650 1st 2nd 3rd Last 3rd 2nd 1st
+2651 1st 2nd 3rd Last 3rd 2nd 1st
+2652 1st 2nd 3rd Last 3rd 2nd 1st
+2653 1st 2nd 3rd Last 3rd 2nd 1st
+2654 1st 2nd 3rd Last 3rd 2nd 1st
+2655 1st 2nd 3rd Last 3rd 2nd 1st
+2656 1st 2nd 3rd Last 3rd 2nd 1st
+2657 1st 2nd 3rd Last 3rd 2nd 1st
+2658 1st 2nd 3rd Last 3rd 2nd 1st
+2659 1st 2nd 3rd Last 3rd 2nd 1st
+2660 1st 2nd 3rd Last 3rd 2nd 1st
+2661 1st 2nd 3rd Last 3rd 2nd 1st
+2662 1st 2nd 3rd Last 3rd 2nd 1st
+2663 1st 2nd 3rd Last 3rd 2nd 1st
+2664 1st 2nd 3rd Last 3rd 2nd 1st
+2665 1st 2nd 3rd Last 3rd 2nd 1st
+2666 1st 2nd 3rd Last 3rd 2nd 1st
+2667 1st 2nd 3rd Last 3rd 2nd 1st
+2668 1st 2nd 3rd Last 3rd 2nd 1st
+2669 1st 2nd 3rd Last 3rd 2nd 1st
+2670 1st 2nd 3rd Last 3rd 2nd 1st
+2671 1st 2nd 3rd Last 3rd 2nd 1st
+2672 1st 2nd 3rd Last 3rd 2nd 1st
+2673 1st 2nd 3rd Last 3rd 2nd 1st
+2674 1st 2nd 3rd Last 3rd 2nd 1st
+2675 1st 2nd 3rd Last 3rd 2nd 1st
+2676 1st 2nd 3rd Last 3rd 2nd 1st
+2677 1st 2nd 3rd Last 3rd 2nd 1st
+2678 1st 2nd 3rd Last 3rd 2nd 1st
+2679 1st 2nd 3rd Last 3rd 2nd 1st
+2680 1st 2nd 3rd Last 3rd 2nd 1st
+2681 1st 2nd 3rd Last 3rd 2nd 1st
+2682 1st 2nd 3rd Last 3rd 2nd 1st
+2683 1st 2nd 3rd Last 3rd 2nd 1st
+2684 1st 2nd 3rd Last 3rd 2nd 1st
+2685 1st 2nd 3rd Last 3rd 2nd 1st
+2686 1st 2nd 3rd Last 3rd 2nd 1st
+2687 1st 2nd 3rd Last 3rd 2nd 1st
+2688 1st 2nd 3rd Last 3rd 2nd 1st
+2689 1st 2nd 3rd Last 3rd 2nd 1st
+2690 1st 2nd 3rd Last 3rd 2nd 1st
+2691 1st 2nd 3rd Last 3rd 2nd 1st
+2692 1st 2nd 3rd Last 3rd 2nd 1st
+2693 1st 2nd 3rd Last 3rd 2nd 1st
+2694 1st 2nd 3rd Last 3rd 2nd 1st
+2695 1st 2nd 3rd Last 3rd 2nd 1st
+2696 1st 2nd 3rd Last 3rd 2nd 1st
+2697 1st 2nd 3rd Last 3rd 2nd 1st
+2698 1st 2nd 3rd Last 3rd 2nd 1st
+2699 1st 2nd 3rd Last 3rd 2nd 1st
+2700 1st 2nd 3rd Last 3rd 2nd 1st
+2701 1st 2nd 3rd Last 3rd 2nd 1st
+2702 1st 2nd 3rd Last 3rd 2nd 1st
+2703 1st 2nd 3rd Last 3rd 2nd 1st
+2704 1st 2nd 3rd Last 3rd 2nd 1st
+2705 1st 2nd 3rd Last 3rd 2nd 1st
+2706 1st 2nd 3rd Last 3rd 2nd 1st
+2707 1st 2nd 3rd Last 3rd 2nd 1st
+2708 1st 2nd 3rd Last 3rd 2nd 1st
+2709 1st 2nd 3rd Last 3rd 2nd 1st
+2710 1st 2nd 3rd Last 3rd 2nd 1st
+2711 1st 2nd 3rd Last 3rd 2nd 1st
+2712 1st 2nd 3rd Last 3rd 2nd 1st
+2713 1st 2nd 3rd Last 3rd 2nd 1st
+2714 1st 2nd 3rd Last 3rd 2nd 1st
+2715 1st 2nd 3rd Last 3rd 2nd 1st
+2716 1st 2nd 3rd Last 3rd 2nd 1st
+2717 1st 2nd 3rd Last 3rd 2nd 1st
+2718 1st 2nd 3rd Last 3rd 2nd 1st
+2719 1st 2nd 3rd Last 3rd 2nd 1st
+2720 1st 2nd 3rd Last 3rd 2nd 1st
+2721 1st 2nd 3rd Last 3rd 2nd 1st
+2722 1st 2nd 3rd Last 3rd 2nd 1st
+2723 1st 2nd 3rd Last 3rd 2nd 1st
+2724 1st 2nd 3rd Last 3rd 2nd 1st
+2725 1st 2nd 3rd Last 3rd 2nd 1st
+2726 1st 2nd 3rd Last 3rd 2nd 1st
+2727 1st 2nd 3rd Last 3rd 2nd 1st
+2728 1st 2nd 3rd Last 3rd 2nd 1st
+2729 1st 2nd 3rd Last 3rd 2nd 1st
+2730 1st 2nd 3rd Last 3rd 2nd 1st
+2731 1st 2nd 3rd Last 3rd 2nd 1st
+2732 1st 2nd 3rd Last 3rd 2nd 1st
+2733 1st 2nd 3rd Last 3rd 2nd 1st
+2734 1st 2nd 3rd Last 3rd 2nd 1st
+2735 1st 2nd 3rd Last 3rd 2nd 1st
+2736 1st 2nd 3rd Last 3rd 2nd 1st
+2737 1st 2nd 3rd Last 3rd 2nd 1st
+2738 1st 2nd 3rd Last 3rd 2nd 1st
+2739 1st 2nd 3rd Last 3rd 2nd 1st
+2740 1st 2nd 3rd Last 3rd 2nd 1st
+2741 1st 2nd 3rd Last 3rd 2nd 1st
+2742 1st 2nd 3rd Last 3rd 2nd 1st
+2743 1st 2nd 3rd Last 3rd 2nd 1st
+2744 1st 2nd 3rd Last 3rd 2nd 1st
+2745 1st 2nd 3rd Last 3rd 2nd 1st
+2746 1st 2nd 3rd Last 3rd 2nd 1st
+2747 1st 2nd 3rd Last 3rd 2nd 1st
+2748 1st 2nd 3rd Last 3rd 2nd 1st
+2749 1st 2nd 3rd Last 3rd 2nd 1st
+2750 1st 2nd 3rd Last 3rd 2nd 1st
+2751 1st 2nd 3rd Last 3rd 2nd 1st
+2752 1st 2nd 3rd Last 3rd 2nd 1st
+2753 1st 2nd 3rd Last 3rd 2nd 1st
+2754 1st 2nd 3rd Last 3rd 2nd 1st
+2755 1st 2nd 3rd Last 3rd 2nd 1st
+2756 1st 2nd 3rd Last 3rd 2nd 1st
+2757 1st 2nd 3rd Last 3rd 2nd 1st
+2758 1st 2nd 3rd Last 3rd 2nd 1st
+2759 1st 2nd 3rd Last 3rd 2nd 1st
+2760 1st 2nd 3rd Last 3rd 2nd 1st
+2761 1st 2nd 3rd Last 3rd 2nd 1st
+2762 1st 2nd 3rd Last 3rd 2nd 1st
+2763 1st 2nd 3rd Last 3rd 2nd 1st
+2764 1st 2nd 3rd Last 3rd 2nd 1st
+2765 1st 2nd 3rd Last 3rd 2nd 1st
+2766 1st 2nd 3rd Last 3rd 2nd 1st
+2767 1st 2nd 3rd Last 3rd 2nd 1st
+2768 1st 2nd 3rd Last 3rd 2nd 1st
+2769 1st 2nd 3rd Last 3rd 2nd 1st
+2770 1st 2nd 3rd Last 3rd 2nd 1st
+2771 1st 2nd 3rd Last 3rd 2nd 1st
+2772 1st 2nd 3rd Last 3rd 2nd 1st
+2773 1st 2nd 3rd Last 3rd 2nd 1st
+2774 1st 2nd 3rd Last 3rd 2nd 1st
+2775 1st 2nd 3rd Last 3rd 2nd 1st
+2776 1st 2nd 3rd Last 3rd 2nd 1st
+2777 1st 2nd 3rd Last 3rd 2nd 1st
+2778 1st 2nd 3rd Last 3rd 2nd 1st
+2779 1st 2nd 3rd Last 3rd 2nd 1st
+2780 1st 2nd 3rd Last 3rd 2nd 1st
+2781 1st 2nd 3rd Last 3rd 2nd 1st
+2782 1st 2nd 3rd Last 3rd 2nd 1st
+2783 1st 2nd 3rd Last 3rd 2nd 1st
+2784 1st 2nd 3rd Last 3rd 2nd 1st
+2785 1st 2nd 3rd Last 3rd 2nd 1st
+2786 1st 2nd 3rd Last 3rd 2nd 1st
+2787 1st 2nd 3rd Last 3rd 2nd 1st
+2788 1st 2nd 3rd Last 3rd 2nd 1st
+2789 1st 2nd 3rd Last 3rd 2nd 1st
+2790 1st 2nd 3rd Last 3rd 2nd 1st
+2791 1st 2nd 3rd Last 3rd 2nd 1st
+2792 1st 2nd 3rd Last 3rd 2nd 1st
+2793 1st 2nd 3rd Last 3rd 2nd 1st
+2794 1st 2nd 3rd Last 3rd 2nd 1st
+2795 1st 2nd 3rd Last 3rd 2nd 1st
+2796 1st 2nd 3rd Last 3rd 2nd 1st
+2797 1st 2nd 3rd Last 3rd 2nd 1st
+2798 1st 2nd 3rd Last 3rd 2nd 1st
+2799 1st 2nd 3rd Last 3rd 2nd 1st
+2800 1st 2nd 3rd Last 3rd 2nd 1st
+2801 1st 2nd 3rd Last 3rd 2nd 1st
+2802 1st 2nd 3rd Last 3rd 2nd 1st
+2803 1st 2nd 3rd Last 3rd 2nd 1st
+2804 1st 2nd 3rd Last 3rd 2nd 1st
+2805 1st 2nd 3rd Last 3rd 2nd 1st
+2806 1st 2nd 3rd Last 3rd 2nd 1st
+2807 1st 2nd 3rd Last 3rd 2nd 1st
+2808 1st 2nd 3rd Last 3rd 2nd 1st
+2809 1st 2nd 3rd Last 3rd 2nd 1st
+2810 1st 2nd 3rd Last 3rd 2nd 1st
+2811 1st 2nd 3rd Last 3rd 2nd 1st
+2812 1st 2nd 3rd Last 3rd 2nd 1st
+2813 1st 2nd 3rd Last 3rd 2nd 1st
+2814 1st 2nd 3rd Last 3rd 2nd 1st
+2815 1st 2nd 3rd Last 3rd 2nd 1st
+2816 1st 2nd 3rd Last 3rd 2nd 1st
+2817 1st 2nd 3rd Last 3rd 2nd 1st
+2818 1st 2nd 3rd Last 3rd 2nd 1st
+2819 1st 2nd 3rd Last 3rd 2nd 1st
+2820 1st 2nd 3rd Last 3rd 2nd 1st
+2821 1st 2nd 3rd Last 3rd 2nd 1st
+2822 1st 2nd 3rd Last 3rd 2nd 1st
+2823 1st 2nd 3rd Last 3rd 2nd 1st
+2824 1st 2nd 3rd Last 3rd 2nd 1st
+2825 1st 2nd 3rd Last 3rd 2nd 1st
+2826 1st 2nd 3rd Last 3rd 2nd 1st
+2827 1st 2nd 3rd Last 3rd 2nd 1st
+2828 1st 2nd 3rd Last 3rd 2nd 1st
+2829 1st 2nd 3rd Last 3rd 2nd 1st
+2830 1st 2nd 3rd Last 3rd 2nd 1st
+2831 1st 2nd 3rd Last 3rd 2nd 1st
+2832 1st 2nd 3rd Last 3rd 2nd 1st
+2833 1st 2nd 3rd Last 3rd 2nd 1st
+2834 1st 2nd 3rd Last 3rd 2nd 1st
+2835 1st 2nd 3rd Last 3rd 2nd 1st
+2836 1st 2nd 3rd Last 3rd 2nd 1st
+2837 1st 2nd 3rd Last 3rd 2nd 1st
+2838 1st 2nd 3rd Last 3rd 2nd 1st
+2839 1st 2nd 3rd Last 3rd 2nd 1st
+2840 1st 2nd 3rd Last 3rd 2nd 1st
+2841 1st 2nd 3rd Last 3rd 2nd 1st
+2842 1st 2nd 3rd Last 3rd 2nd 1st
+2843 1st 2nd 3rd Last 3rd 2nd 1st
+2844 1st 2nd 3rd Last 3rd 2nd 1st
+2845 1st 2nd 3rd Last 3rd 2nd 1st
+2846 1st 2nd 3rd Last 3rd 2nd 1st
+2847 1st 2nd 3rd Last 3rd 2nd 1st
+2848 1st 2nd 3rd Last 3rd 2nd 1st
+2849 1st 2nd 3rd Last 3rd 2nd 1st
+2850 1st 2nd 3rd Last 3rd 2nd 1st
+2851 1st 2nd 3rd Last 3rd 2nd 1st
+2852 1st 2nd 3rd Last 3rd 2nd 1st
+2853 1st 2nd 3rd Last 3rd 2nd 1st
+2854 1st 2nd 3rd Last 3rd 2nd 1st
+2855 1st 2nd 3rd Last 3rd 2nd 1st
+2856 1st 2nd 3rd Last 3rd 2nd 1st
+2857 1st 2nd 3rd Last 3rd 2nd 1st
+2858 1st 2nd 3rd Last 3rd 2nd 1st
+2859 1st 2nd 3rd Last 3rd 2nd 1st
+2860 1st 2nd 3rd Last 3rd 2nd 1st
+2861 1st 2nd 3rd Last 3rd 2nd 1st
+2862 1st 2nd 3rd Last 3rd 2nd 1st
+2863 1st 2nd 3rd Last 3rd 2nd 1st
+2864 1st 2nd 3rd Last 3rd 2nd 1st
+2865 1st 2nd 3rd Last 3rd 2nd 1st
+2866 1st 2nd 3rd Last 3rd 2nd 1st
+2867 1st 2nd 3rd Last 3rd 2nd 1st
+2868 1st 2nd 3rd Last 3rd 2nd 1st
+2869 1st 2nd 3rd Last 3rd 2nd 1st
+2870 1st 2nd 3rd Last 3rd 2nd 1st
+2871 1st 2nd 3rd Last 3rd 2nd 1st
+2872 1st 2nd 3rd Last 3rd 2nd 1st
+2873 1st 2nd 3rd Last 3rd 2nd 1st
+2874 1st 2nd 3rd Last 3rd 2nd 1st
+2875 1st 2nd 3rd Last 3rd 2nd 1st
+2876 1st 2nd 3rd Last 3rd 2nd 1st
+2877 1st 2nd 3rd Last 3rd 2nd 1st
+2878 1st 2nd 3rd Last 3rd 2nd 1st
+2879 1st 2nd 3rd Last 3rd 2nd 1st
+2880 1st 2nd 3rd Last 3rd 2nd 1st
+2881 1st 2nd 3rd Last 3rd 2nd 1st
+2882 1st 2nd 3rd Last 3rd 2nd 1st
+2883 1st 2nd 3rd Last 3rd 2nd 1st
+2884 1st 2nd 3rd Last 3rd 2nd 1st
+2885 1st 2nd 3rd Last 3rd 2nd 1st
+2886 1st 2nd 3rd Last 3rd 2nd 1st
+2887 1st 2nd 3rd Last 3rd 2nd 1st
+2888 1st 2nd 3rd Last 3rd 2nd 1st
+2889 1st 2nd 3rd Last 3rd 2nd 1st
+2890 1st 2nd 3rd Last 3rd 2nd 1st
+2891 1st 2nd 3rd Last 3rd 2nd 1st
+2892 1st 2nd 3rd Last 3rd 2nd 1st
+2893 1st 2nd 3rd Last 3rd 2nd 1st
+2894 1st 2nd 3rd Last 3rd 2nd 1st
+2895 1st 2nd 3rd Last 3rd 2nd 1st
+2896 1st 2nd 3rd Last 3rd 2nd 1st
+2897 1st 2nd 3rd Last 3rd 2nd 1st
+2898 1st 2nd 3rd Last 3rd 2nd 1st
+2899 1st 2nd 3rd Last 3rd 2nd 1st
+2900 1st 2nd 3rd Last 3rd 2nd 1st
+2901 1st 2nd 3rd Last 3rd 2nd 1st
+2902 1st 2nd 3rd Last 3rd 2nd 1st
+2903 1st 2nd 3rd Last 3rd 2nd 1st
+2904 1st 2nd 3rd Last 3rd 2nd 1st
+2905 1st 2nd 3rd Last 3rd 2nd 1st
+2906 1st 2nd 3rd Last 3rd 2nd 1st
+2907 1st 2nd 3rd Last 3rd 2nd 1st
+2908 1st 2nd 3rd Last 3rd 2nd 1st
+2909 1st 2nd 3rd Last 3rd 2nd 1st
+2910 1st 2nd 3rd Last 3rd 2nd 1st
+2911 1st 2nd 3rd Last 3rd 2nd 1st
+2912 1st 2nd 3rd Last 3rd 2nd 1st
+2913 1st 2nd 3rd Last 3rd 2nd 1st
+2914 1st 2nd 3rd Last 3rd 2nd 1st
+2915 1st 2nd 3rd Last 3rd 2nd 1st
+2916 1st 2nd 3rd Last 3rd 2nd 1st
+2917 1st 2nd 3rd Last 3rd 2nd 1st
+2918 1st 2nd 3rd Last 3rd 2nd 1st
+2919 1st 2nd 3rd Last 3rd 2nd 1st
+2920 1st 2nd 3rd Last 3rd 2nd 1st
+2921 1st 2nd 3rd Last 3rd 2nd 1st
+2922 1st 2nd 3rd Last 3rd 2nd 1st
+2923 1st 2nd 3rd Last 3rd 2nd 1st
+2924 1st 2nd 3rd Last 3rd 2nd 1st
+2925 1st 2nd 3rd Last 3rd 2nd 1st
+2926 1st 2nd 3rd Last 3rd 2nd 1st
+2927 1st 2nd 3rd Last 3rd 2nd 1st
+2928 1st 2nd 3rd Last 3rd 2nd 1st
+2929 1st 2nd 3rd Last 3rd 2nd 1st
+2930 1st 2nd 3rd Last 3rd 2nd 1st
+2931 1st 2nd 3rd Last 3rd 2nd 1st
+2932 1st 2nd 3rd Last 3rd 2nd 1st
+2933 1st 2nd 3rd Last 3rd 2nd 1st
+2934 1st 2nd 3rd Last 3rd 2nd 1st
+2935 1st 2nd 3rd Last 3rd 2nd 1st
+2936 1st 2nd 3rd Last 3rd 2nd 1st
+2937 1st 2nd 3rd Last 3rd 2nd 1st
+2938 1st 2nd 3rd Last 3rd 2nd 1st
+2939 1st 2nd 3rd Last 3rd 2nd 1st
+2940 1st 2nd 3rd Last 3rd 2nd 1st
+2941 1st 2nd 3rd Last 3rd 2nd 1st
+2942 1st 2nd 3rd Last 3rd 2nd 1st
+2943 1st 2nd 3rd Last 3rd 2nd 1st
+2944 1st 2nd 3rd Last 3rd 2nd 1st
+2945 1st 2nd 3rd Last 3rd 2nd 1st
+2946 1st 2nd 3rd Last 3rd 2nd 1st
+2947 1st 2nd 3rd Last 3rd 2nd 1st
+2948 1st 2nd 3rd Last 3rd 2nd 1st
+2949 1st 2nd 3rd Last 3rd 2nd 1st
+2950 1st 2nd 3rd Last 3rd 2nd 1st
+2951 1st 2nd 3rd Last 3rd 2nd 1st
+2952 1st 2nd 3rd Last 3rd 2nd 1st
+2953 1st 2nd 3rd Last 3rd 2nd 1st
+2954 1st 2nd 3rd Last 3rd 2nd 1st
+2955 1st 2nd 3rd Last 3rd 2nd 1st
+2956 1st 2nd 3rd Last 3rd 2nd 1st
+2957 1st 2nd 3rd Last 3rd 2nd 1st
+2958 1st 2nd 3rd Last 3rd 2nd 1st
+2959 1st 2nd 3rd Last 3rd 2nd 1st
+2960 1st 2nd 3rd Last 3rd 2nd 1st
+2961 1st 2nd 3rd Last 3rd 2nd 1st
+2962 1st 2nd 3rd Last 3rd 2nd 1st
+2963 1st 2nd 3rd Last 3rd 2nd 1st
+2964 1st 2nd 3rd Last 3rd 2nd 1st
+2965 1st 2nd 3rd Last 3rd 2nd 1st
+2966 1st 2nd 3rd Last 3rd 2nd 1st
+2967 1st 2nd 3rd Last 3rd 2nd 1st
+2968 1st 2nd 3rd Last 3rd 2nd 1st
+2969 1st 2nd 3rd Last 3rd 2nd 1st
+2970 1st 2nd 3rd Last 3rd 2nd 1st
+2971 1st 2nd 3rd Last 3rd 2nd 1st
+2972 1st 2nd 3rd Last 3rd 2nd 1st
+2973 1st 2nd 3rd Last 3rd 2nd 1st
+2974 1st 2nd 3rd Last 3rd 2nd 1st
+2975 1st 2nd 3rd Last 3rd 2nd 1st
+2976 1st 2nd 3rd Last 3rd 2nd 1st
+2977 1st 2nd 3rd Last 3rd 2nd 1st
+2978 1st 2nd 3rd Last 3rd 2nd 1st
+2979 1st 2nd 3rd Last 3rd 2nd 1st
+2980 1st 2nd 3rd Last 3rd 2nd 1st
+2981 1st 2nd 3rd Last 3rd 2nd 1st
+2982 1st 2nd 3rd Last 3rd 2nd 1st
+2983 1st 2nd 3rd Last 3rd 2nd 1st
+2984 1st 2nd 3rd Last 3rd 2nd 1st
+2985 1st 2nd 3rd Last 3rd 2nd 1st
+2986 1st 2nd 3rd Last 3rd 2nd 1st
+2987 1st 2nd 3rd Last 3rd 2nd 1st
+2988 1st 2nd 3rd Last 3rd 2nd 1st
+2989 1st 2nd 3rd Last 3rd 2nd 1st
+2990 1st 2nd 3rd Last 3rd 2nd 1st
+2991 1st 2nd 3rd Last 3rd 2nd 1st
+2992 1st 2nd 3rd Last 3rd 2nd 1st
+2993 1st 2nd 3rd Last 3rd 2nd 1st
+2994 1st 2nd 3rd Last 3rd 2nd 1st
+2995 1st 2nd 3rd Last 3rd 2nd 1st
+2996 1st 2nd 3rd Last 3rd 2nd 1st
+2997 1st 2nd 3rd Last 3rd 2nd 1st
+2998 1st 2nd 3rd Last 3rd 2nd 1st
+2999 1st 2nd 3rd Last 3rd 2nd 1st
+3000 1st 2nd 3rd Last 3rd 2nd 1st
+3001 1st 2nd 3rd Last 3rd 2nd 1st
+3002 1st 2nd 3rd Last 3rd 2nd 1st
+3003 1st 2nd 3rd Last 3rd 2nd 1st
+3004 1st 2nd 3rd Last 3rd 2nd 1st
+3005 1st 2nd 3rd Last 3rd 2nd 1st
+3006 1st 2nd 3rd Last 3rd 2nd 1st
+3007 1st 2nd 3rd Last 3rd 2nd 1st
+3008 1st 2nd 3rd Last 3rd 2nd 1st
+3009 1st 2nd 3rd Last 3rd 2nd 1st
+3010 1st 2nd 3rd Last 3rd 2nd 1st
+3011 1st 2nd 3rd Last 3rd 2nd 1st
+3012 1st 2nd 3rd Last 3rd 2nd 1st
+3013 1st 2nd 3rd Last 3rd 2nd 1st
+3014 1st 2nd 3rd Last 3rd 2nd 1st
+3015 1st 2nd 3rd Last 3rd 2nd 1st
+3016 1st 2nd 3rd Last 3rd 2nd 1st
+3017 1st 2nd 3rd Last 3rd 2nd 1st
+3018 1st 2nd 3rd Last 3rd 2nd 1st
+3019 1st 2nd 3rd Last 3rd 2nd 1st
+3020 1st 2nd 3rd Last 3rd 2nd 1st
+3021 1st 2nd 3rd Last 3rd 2nd 1st
+3022 1st 2nd 3rd Last 3rd 2nd 1st
+3023 1st 2nd 3rd Last 3rd 2nd 1st
+3024 1st 2nd 3rd Last 3rd 2nd 1st
+3025 1st 2nd 3rd Last 3rd 2nd 1st
+3026 1st 2nd 3rd Last 3rd 2nd 1st
+3027 1st 2nd 3rd Last 3rd 2nd 1st
+3028 1st 2nd 3rd Last 3rd 2nd 1st
+3029 1st 2nd 3rd Last 3rd 2nd 1st
+3030 1st 2nd 3rd Last 3rd 2nd 1st
+3031 1st 2nd 3rd Last 3rd 2nd 1st
+3032 1st 2nd 3rd Last 3rd 2nd 1st
+3033 1st 2nd 3rd Last 3rd 2nd 1st
+3034 1st 2nd 3rd Last 3rd 2nd 1st
+3035 1st 2nd 3rd Last 3rd 2nd 1st
+3036 1st 2nd 3rd Last 3rd 2nd 1st
+3037 1st 2nd 3rd Last 3rd 2nd 1st
+3038 1st 2nd 3rd Last 3rd 2nd 1st
+3039 1st 2nd 3rd Last 3rd 2nd 1st
+3040 1st 2nd 3rd Last 3rd 2nd 1st
+3041 1st 2nd 3rd Last 3rd 2nd 1st
+3042 1st 2nd 3rd Last 3rd 2nd 1st
+3043 1st 2nd 3rd Last 3rd 2nd 1st
+3044 1st 2nd 3rd Last 3rd 2nd 1st
+3045 1st 2nd 3rd Last 3rd 2nd 1st
+3046 1st 2nd 3rd Last 3rd 2nd 1st
+3047 1st 2nd 3rd Last 3rd 2nd 1st
+3048 1st 2nd 3rd Last 3rd 2nd 1st
+3049 1st 2nd 3rd Last 3rd 2nd 1st
+3050 1st 2nd 3rd Last 3rd 2nd 1st
+3051 1st 2nd 3rd Last 3rd 2nd 1st
+3052 1st 2nd 3rd Last 3rd 2nd 1st
+3053 1st 2nd 3rd Last 3rd 2nd 1st
+3054 1st 2nd 3rd Last 3rd 2nd 1st
+3055 1st 2nd 3rd Last 3rd 2nd 1st
+3056 1st 2nd 3rd Last 3rd 2nd 1st
+3057 1st 2nd 3rd Last 3rd 2nd 1st
+3058 1st 2nd 3rd Last 3rd 2nd 1st
+3059 1st 2nd 3rd Last 3rd 2nd 1st
+3060 1st 2nd 3rd Last 3rd 2nd 1st
+3061 1st 2nd 3rd Last 3rd 2nd 1st
+3062 1st 2nd 3rd Last 3rd 2nd 1st
+3063 1st 2nd 3rd Last 3rd 2nd 1st
+3064 1st 2nd 3rd Last 3rd 2nd 1st
+3065 1st 2nd 3rd Last 3rd 2nd 1st
+3066 1st 2nd 3rd Last 3rd 2nd 1st
+3067 1st 2nd 3rd Last 3rd 2nd 1st
+3068 1st 2nd 3rd Last 3rd 2nd 1st
+3069 1st 2nd 3rd Last 3rd 2nd 1st
+3070 1st 2nd 3rd Last 3rd 2nd 1st
+3071 1st 2nd 3rd Last 3rd 2nd 1st
+3072 1st 2nd 3rd Last 3rd 2nd 1st
+3073 1st 2nd 3rd Last 3rd 2nd 1st
+3074 1st 2nd 3rd Last 3rd 2nd 1st
+3075 1st 2nd 3rd Last 3rd 2nd 1st
+3076 1st 2nd 3rd Last 3rd 2nd 1st
+3077 1st 2nd 3rd Last 3rd 2nd 1st
+3078 1st 2nd 3rd Last 3rd 2nd 1st
+3079 1st 2nd 3rd Last 3rd 2nd 1st
+3080 1st 2nd 3rd Last 3rd 2nd 1st
+3081 1st 2nd 3rd Last 3rd 2nd 1st
+3082 1st 2nd 3rd Last 3rd 2nd 1st
+3083 1st 2nd 3rd Last 3rd 2nd 1st
+3084 1st 2nd 3rd Last 3rd 2nd 1st
+3085 1st 2nd 3rd Last 3rd 2nd 1st
+3086 1st 2nd 3rd Last 3rd 2nd 1st
+3087 1st 2nd 3rd Last 3rd 2nd 1st
+3088 1st 2nd 3rd Last 3rd 2nd 1st
+3089 1st 2nd 3rd Last 3rd 2nd 1st
+3090 1st 2nd 3rd Last 3rd 2nd 1st
+3091 1st 2nd 3rd Last 3rd 2nd 1st
+3092 1st 2nd 3rd Last 3rd 2nd 1st
+3093 1st 2nd 3rd Last 3rd 2nd 1st
+3094 1st 2nd 3rd Last 3rd 2nd 1st
+3095 1st 2nd 3rd Last 3rd 2nd 1st
+3096 1st 2nd 3rd Last 3rd 2nd 1st
+3097 1st 2nd 3rd Last 3rd 2nd 1st
+3098 1st 2nd 3rd Last 3rd 2nd 1st
+3099 1st 2nd 3rd Last 3rd 2nd 1st
+3100 1st 2nd 3rd Last 3rd 2nd 1st
+3101 1st 2nd 3rd Last 3rd 2nd 1st
+3102 1st 2nd 3rd Last 3rd 2nd 1st
+3103 1st 2nd 3rd Last 3rd 2nd 1st
+3104 1st 2nd 3rd Last 3rd 2nd 1st
+3105 1st 2nd 3rd Last 3rd 2nd 1st
+3106 1st 2nd 3rd Last 3rd 2nd 1st
+3107 1st 2nd 3rd Last 3rd 2nd 1st
+3108 1st 2nd 3rd Last 3rd 2nd 1st
+3109 1st 2nd 3rd Last 3rd 2nd 1st
+3110 1st 2nd 3rd Last 3rd 2nd 1st
+3111 1st 2nd 3rd Last 3rd 2nd 1st
+3112 1st 2nd 3rd Last 3rd 2nd 1st
+3113 1st 2nd 3rd Last 3rd 2nd 1st
+3114 1st 2nd 3rd Last 3rd 2nd 1st
+3115 1st 2nd 3rd Last 3rd 2nd 1st
+3116 1st 2nd 3rd Last 3rd 2nd 1st
+3117 1st 2nd 3rd Last 3rd 2nd 1st
+3118 1st 2nd 3rd Last 3rd 2nd 1st
+3119 1st 2nd 3rd Last 3rd 2nd 1st
+3120 1st 2nd 3rd Last 3rd 2nd 1st
+3121 1st 2nd 3rd Last 3rd 2nd 1st
+3122 1st 2nd 3rd Last 3rd 2nd 1st
+3123 1st 2nd 3rd Last 3rd 2nd 1st
+3124 1st 2nd 3rd Last 3rd 2nd 1st
+3125 1st 2nd 3rd Last 3rd 2nd 1st
+3126 1st 2nd 3rd Last 3rd 2nd 1st
+3127 1st 2nd 3rd Last 3rd 2nd 1st
+3128 1st 2nd 3rd Last 3rd 2nd 1st
+3129 1st 2nd 3rd Last 3rd 2nd 1st
+3130 1st 2nd 3rd Last 3rd 2nd 1st
+3131 1st 2nd 3rd Last 3rd 2nd 1st
+3132 1st 2nd 3rd Last 3rd 2nd 1st
+3133 1st 2nd 3rd Last 3rd 2nd 1st
+3134 1st 2nd 3rd Last 3rd 2nd 1st
+3135 1st 2nd 3rd Last 3rd 2nd 1st
+3136 1st 2nd 3rd Last 3rd 2nd 1st
+3137 1st 2nd 3rd Last 3rd 2nd 1st
+3138 1st 2nd 3rd Last 3rd 2nd 1st
+3139 1st 2nd 3rd Last 3rd 2nd 1st
+3140 1st 2nd 3rd Last 3rd 2nd 1st
+3141 1st 2nd 3rd Last 3rd 2nd 1st
+3142 1st 2nd 3rd Last 3rd 2nd 1st
+3143 1st 2nd 3rd Last 3rd 2nd 1st
+3144 1st 2nd 3rd Last 3rd 2nd 1st
+3145 1st 2nd 3rd Last 3rd 2nd 1st
+3146 1st 2nd 3rd Last 3rd 2nd 1st
+3147 1st 2nd 3rd Last 3rd 2nd 1st
+3148 1st 2nd 3rd Last 3rd 2nd 1st
+3149 1st 2nd 3rd Last 3rd 2nd 1st
+3150 1st 2nd 3rd Last 3rd 2nd 1st
+3151 1st 2nd 3rd Last 3rd 2nd 1st
+3152 1st 2nd 3rd Last 3rd 2nd 1st
+3153 1st 2nd 3rd Last 3rd 2nd 1st
+3154 1st 2nd 3rd Last 3rd 2nd 1st
+3155 1st 2nd 3rd Last 3rd 2nd 1st
+3156 1st 2nd 3rd Last 3rd 2nd 1st
+3157 1st 2nd 3rd Last 3rd 2nd 1st
+3158 1st 2nd 3rd Last 3rd 2nd 1st
+3159 1st 2nd 3rd Last 3rd 2nd 1st
+3160 1st 2nd 3rd Last 3rd 2nd 1st
+3161 1st 2nd 3rd Last 3rd 2nd 1st
+3162 1st 2nd 3rd Last 3rd 2nd 1st
+3163 1st 2nd 3rd Last 3rd 2nd 1st
+3164 1st 2nd 3rd Last 3rd 2nd 1st
+3165 1st 2nd 3rd Last 3rd 2nd 1st
+3166 1st 2nd 3rd Last 3rd 2nd 1st
+3167 1st 2nd 3rd Last 3rd 2nd 1st
+3168 1st 2nd 3rd Last 3rd 2nd 1st
+3169 1st 2nd 3rd Last 3rd 2nd 1st
+3170 1st 2nd 3rd Last 3rd 2nd 1st
+3171 1st 2nd 3rd Last 3rd 2nd 1st
+3172 1st 2nd 3rd Last 3rd 2nd 1st
+3173 1st 2nd 3rd Last 3rd 2nd 1st
+3174 1st 2nd 3rd Last 3rd 2nd 1st
+3175 1st 2nd 3rd Last 3rd 2nd 1st
+3176 1st 2nd 3rd Last 3rd 2nd 1st
+3177 1st 2nd 3rd Last 3rd 2nd 1st
+3178 1st 2nd 3rd Last 3rd 2nd 1st
+3179 1st 2nd 3rd Last 3rd 2nd 1st
+3180 1st 2nd 3rd Last 3rd 2nd 1st
+3181 1st 2nd 3rd Last 3rd 2nd 1st
+3182 1st 2nd 3rd Last 3rd 2nd 1st
+3183 1st 2nd 3rd Last 3rd 2nd 1st
+3184 1st 2nd 3rd Last 3rd 2nd 1st
+3185 1st 2nd 3rd Last 3rd 2nd 1st
+3186 1st 2nd 3rd Last 3rd 2nd 1st
+3187 1st 2nd 3rd Last 3rd 2nd 1st
+3188 1st 2nd 3rd Last 3rd 2nd 1st
+3189 1st 2nd 3rd Last 3rd 2nd 1st
+3190 1st 2nd 3rd Last 3rd 2nd 1st
+3191 1st 2nd 3rd Last 3rd 2nd 1st
+3192 1st 2nd 3rd Last 3rd 2nd 1st
+3193 1st 2nd 3rd Last 3rd 2nd 1st
+3194 1st 2nd 3rd Last 3rd 2nd 1st
+3195 1st 2nd 3rd Last 3rd 2nd 1st
+3196 1st 2nd 3rd Last 3rd 2nd 1st
+3197 1st 2nd 3rd Last 3rd 2nd 1st
+3198 1st 2nd 3rd Last 3rd 2nd 1st
+3199 1st 2nd 3rd Last 3rd 2nd 1st
+3200 1st 2nd 3rd Last 3rd 2nd 1st
+3201 1st 2nd 3rd Last 3rd 2nd 1st
+3202 1st 2nd 3rd Last 3rd 2nd 1st
+3203 1st 2nd 3rd Last 3rd 2nd 1st
+3204 1st 2nd 3rd Last 3rd 2nd 1st
+3205 1st 2nd 3rd Last 3rd 2nd 1st
+3206 1st 2nd 3rd Last 3rd 2nd 1st
+3207 1st 2nd 3rd Last 3rd 2nd 1st
+3208 1st 2nd 3rd Last 3rd 2nd 1st
+3209 1st 2nd 3rd Last 3rd 2nd 1st
+3210 1st 2nd 3rd Last 3rd 2nd 1st
+3211 1st 2nd 3rd Last 3rd 2nd 1st
+3212 1st 2nd 3rd Last 3rd 2nd 1st
+3213 1st 2nd 3rd Last 3rd 2nd 1st
+3214 1st 2nd 3rd Last 3rd 2nd 1st
+3215 1st 2nd 3rd Last 3rd 2nd 1st
+3216 1st 2nd 3rd Last 3rd 2nd 1st
+3217 1st 2nd 3rd Last 3rd 2nd 1st
+3218 1st 2nd 3rd Last 3rd 2nd 1st
+3219 1st 2nd 3rd Last 3rd 2nd 1st
+3220 1st 2nd 3rd Last 3rd 2nd 1st
+3221 1st 2nd 3rd Last 3rd 2nd 1st
+3222 1st 2nd 3rd Last 3rd 2nd 1st
+3223 1st 2nd 3rd Last 3rd 2nd 1st
+3224 1st 2nd 3rd Last 3rd 2nd 1st
+3225 1st 2nd 3rd Last 3rd 2nd 1st
+3226 1st 2nd 3rd Last 3rd 2nd 1st
+3227 1st 2nd 3rd Last 3rd 2nd 1st
+3228 1st 2nd 3rd Last 3rd 2nd 1st
+3229 1st 2nd 3rd Last 3rd 2nd 1st
+3230 1st 2nd 3rd Last 3rd 2nd 1st
+3231 1st 2nd 3rd Last 3rd 2nd 1st
+3232 1st 2nd 3rd Last 3rd 2nd 1st
+3233 1st 2nd 3rd Last 3rd 2nd 1st
+3234 1st 2nd 3rd Last 3rd 2nd 1st
+3235 1st 2nd 3rd Last 3rd 2nd 1st
+3236 1st 2nd 3rd Last 3rd 2nd 1st
+3237 1st 2nd 3rd Last 3rd 2nd 1st
+3238 1st 2nd 3rd Last 3rd 2nd 1st
+3239 1st 2nd 3rd Last 3rd 2nd 1st
+3240 1st 2nd 3rd Last 3rd 2nd 1st
+3241 1st 2nd 3rd Last 3rd 2nd 1st
+3242 1st 2nd 3rd Last 3rd 2nd 1st
+3243 1st 2nd 3rd Last 3rd 2nd 1st
+3244 1st 2nd 3rd Last 3rd 2nd 1st
+3245 1st 2nd 3rd Last 3rd 2nd 1st
+3246 1st 2nd 3rd Last 3rd 2nd 1st
+3247 1st 2nd 3rd Last 3rd 2nd 1st
+3248 1st 2nd 3rd Last 3rd 2nd 1st
+3249 1st 2nd 3rd Last 3rd 2nd 1st
+3250 1st 2nd 3rd Last 3rd 2nd 1st
+3251 1st 2nd 3rd Last 3rd 2nd 1st
+3252 1st 2nd 3rd Last 3rd 2nd 1st
+3253 1st 2nd 3rd Last 3rd 2nd 1st
+3254 1st 2nd 3rd Last 3rd 2nd 1st
+3255 1st 2nd 3rd Last 3rd 2nd 1st
+3256 1st 2nd 3rd Last 3rd 2nd 1st
+3257 1st 2nd 3rd Last 3rd 2nd 1st
+3258 1st 2nd 3rd Last 3rd 2nd 1st
+3259 1st 2nd 3rd Last 3rd 2nd 1st
+3260 1st 2nd 3rd Last 3rd 2nd 1st
+3261 1st 2nd 3rd Last 3rd 2nd 1st
+3262 1st 2nd 3rd Last 3rd 2nd 1st
+3263 1st 2nd 3rd Last 3rd 2nd 1st
+3264 1st 2nd 3rd Last 3rd 2nd 1st
+3265 1st 2nd 3rd Last 3rd 2nd 1st
+3266 1st 2nd 3rd Last 3rd 2nd 1st
+3267 1st 2nd 3rd Last 3rd 2nd 1st
+3268 1st 2nd 3rd Last 3rd 2nd 1st
+3269 1st 2nd 3rd Last 3rd 2nd 1st
+3270 1st 2nd 3rd Last 3rd 2nd 1st
+3271 1st 2nd 3rd Last 3rd 2nd 1st
+3272 1st 2nd 3rd Last 3rd 2nd 1st
+3273 1st 2nd 3rd Last 3rd 2nd 1st
+3274 1st 2nd 3rd Last 3rd 2nd 1st
+3275 1st 2nd 3rd Last 3rd 2nd 1st
+3276 1st 2nd 3rd Last 3rd 2nd 1st
+3277 1st 2nd 3rd Last 3rd 2nd 1st
+3278 1st 2nd 3rd Last 3rd 2nd 1st
+3279 1st 2nd 3rd Last 3rd 2nd 1st
+3280 1st 2nd 3rd Last 3rd 2nd 1st
+3281 1st 2nd 3rd Last 3rd 2nd 1st
+3282 1st 2nd 3rd Last 3rd 2nd 1st
+3283 1st 2nd 3rd Last 3rd 2nd 1st
+3284 1st 2nd 3rd Last 3rd 2nd 1st
+3285 1st 2nd 3rd Last 3rd 2nd 1st
+3286 1st 2nd 3rd Last 3rd 2nd 1st
+3287 1st 2nd 3rd Last 3rd 2nd 1st
+3288 1st 2nd 3rd Last 3rd 2nd 1st
+3289 1st 2nd 3rd Last 3rd 2nd 1st
+3290 1st 2nd 3rd Last 3rd 2nd 1st
+3291 1st 2nd 3rd Last 3rd 2nd 1st
+3292 1st 2nd 3rd Last 3rd 2nd 1st
+3293 1st 2nd 3rd Last 3rd 2nd 1st
+3294 1st 2nd 3rd Last 3rd 2nd 1st
+3295 1st 2nd 3rd Last 3rd 2nd 1st
+3296 1st 2nd 3rd Last 3rd 2nd 1st
+3297 1st 2nd 3rd Last 3rd 2nd 1st
+3298 1st 2nd 3rd Last 3rd 2nd 1st
+3299 1st 2nd 3rd Last 3rd 2nd 1st
+3300 1st 2nd 3rd Last 3rd 2nd 1st
+3301 1st 2nd 3rd Last 3rd 2nd 1st
+3302 1st 2nd 3rd Last 3rd 2nd 1st
+3303 1st 2nd 3rd Last 3rd 2nd 1st
+3304 1st 2nd 3rd Last 3rd 2nd 1st
+3305 1st 2nd 3rd Last 3rd 2nd 1st
+3306 1st 2nd 3rd Last 3rd 2nd 1st
+3307 1st 2nd 3rd Last 3rd 2nd 1st
+3308 1st 2nd 3rd Last 3rd 2nd 1st
+3309 1st 2nd 3rd Last 3rd 2nd 1st
+3310 1st 2nd 3rd Last 3rd 2nd 1st
+3311 1st 2nd 3rd Last 3rd 2nd 1st
+3312 1st 2nd 3rd Last 3rd 2nd 1st
+3313 1st 2nd 3rd Last 3rd 2nd 1st
+3314 1st 2nd 3rd Last 3rd 2nd 1st
+3315 1st 2nd 3rd Last 3rd 2nd 1st
+3316 1st 2nd 3rd Last 3rd 2nd 1st
+3317 1st 2nd 3rd Last 3rd 2nd 1st
+3318 1st 2nd 3rd Last 3rd 2nd 1st
+3319 1st 2nd 3rd Last 3rd 2nd 1st
+3320 1st 2nd 3rd Last 3rd 2nd 1st
+3321 1st 2nd 3rd Last 3rd 2nd 1st
+3322 1st 2nd 3rd Last 3rd 2nd 1st
+3323 1st 2nd 3rd Last 3rd 2nd 1st
+3324 1st 2nd 3rd Last 3rd 2nd 1st
+3325 1st 2nd 3rd Last 3rd 2nd 1st
+3326 1st 2nd 3rd Last 3rd 2nd 1st
+3327 1st 2nd 3rd Last 3rd 2nd 1st
+3328 1st 2nd 3rd Last 3rd 2nd 1st
+3329 1st 2nd 3rd Last 3rd 2nd 1st
+3330 1st 2nd 3rd Last 3rd 2nd 1st
+3331 1st 2nd 3rd Last 3rd 2nd 1st
+3332 1st 2nd 3rd Last 3rd 2nd 1st
+3333 1st 2nd 3rd Last 3rd 2nd 1st
+3334 1st 2nd 3rd Last 3rd 2nd 1st
+3335 1st 2nd 3rd Last 3rd 2nd 1st
+3336 1st 2nd 3rd Last 3rd 2nd 1st
+3337 1st 2nd 3rd Last 3rd 2nd 1st
+3338 1st 2nd 3rd Last 3rd 2nd 1st
+3339 1st 2nd 3rd Last 3rd 2nd 1st
+3340 1st 2nd 3rd Last 3rd 2nd 1st
+3341 1st 2nd 3rd Last 3rd 2nd 1st
+3342 1st 2nd 3rd Last 3rd 2nd 1st
+3343 1st 2nd 3rd Last 3rd 2nd 1st
+3344 1st 2nd 3rd Last 3rd 2nd 1st
+3345 1st 2nd 3rd Last 3rd 2nd 1st
+3346 1st 2nd 3rd Last 3rd 2nd 1st
+3347 1st 2nd 3rd Last 3rd 2nd 1st
+3348 1st 2nd 3rd Last 3rd 2nd 1st
+3349 1st 2nd 3rd Last 3rd 2nd 1st
+3350 1st 2nd 3rd Last 3rd 2nd 1st
+3351 1st 2nd 3rd Last 3rd 2nd 1st
+3352 1st 2nd 3rd Last 3rd 2nd 1st
+3353 1st 2nd 3rd Last 3rd 2nd 1st
+3354 1st 2nd 3rd Last 3rd 2nd 1st
+3355 1st 2nd 3rd Last 3rd 2nd 1st
+3356 1st 2nd 3rd Last 3rd 2nd 1st
+3357 1st 2nd 3rd Last 3rd 2nd 1st
+3358 1st 2nd 3rd Last 3rd 2nd 1st
+3359 1st 2nd 3rd Last 3rd 2nd 1st
+3360 1st 2nd 3rd Last 3rd 2nd 1st
+3361 1st 2nd 3rd Last 3rd 2nd 1st
+3362 1st 2nd 3rd Last 3rd 2nd 1st
+3363 1st 2nd 3rd Last 3rd 2nd 1st
+3364 1st 2nd 3rd Last 3rd 2nd 1st
+3365 1st 2nd 3rd Last 3rd 2nd 1st
+3366 1st 2nd 3rd Last 3rd 2nd 1st
+3367 1st 2nd 3rd Last 3rd 2nd 1st
+3368 1st 2nd 3rd Last 3rd 2nd 1st
+3369 1st 2nd 3rd Last 3rd 2nd 1st
+3370 1st 2nd 3rd Last 3rd 2nd 1st
+3371 1st 2nd 3rd Last 3rd 2nd 1st
+3372 1st 2nd 3rd Last 3rd 2nd 1st
+3373 1st 2nd 3rd Last 3rd 2nd 1st
+3374 1st 2nd 3rd Last 3rd 2nd 1st
+3375 1st 2nd 3rd Last 3rd 2nd 1st
+3376 1st 2nd 3rd Last 3rd 2nd 1st
+3377 1st 2nd 3rd Last 3rd 2nd 1st
+3378 1st 2nd 3rd Last 3rd 2nd 1st
+3379 1st 2nd 3rd Last 3rd 2nd 1st
+3380 1st 2nd 3rd Last 3rd 2nd 1st
+3381 1st 2nd 3rd Last 3rd 2nd 1st
+3382 1st 2nd 3rd Last 3rd 2nd 1st
+3383 1st 2nd 3rd Last 3rd 2nd 1st
+3384 1st 2nd 3rd Last 3rd 2nd 1st
+3385 1st 2nd 3rd Last 3rd 2nd 1st
+3386 1st 2nd 3rd Last 3rd 2nd 1st
+3387 1st 2nd 3rd Last 3rd 2nd 1st
+3388 1st 2nd 3rd Last 3rd 2nd 1st
+3389 1st 2nd 3rd Last 3rd 2nd 1st
+3390 1st 2nd 3rd Last 3rd 2nd 1st
+3391 1st 2nd 3rd Last 3rd 2nd 1st
+3392 1st 2nd 3rd Last 3rd 2nd 1st
+3393 1st 2nd 3rd Last 3rd 2nd 1st
+3394 1st 2nd 3rd Last 3rd 2nd 1st
+3395 1st 2nd 3rd Last 3rd 2nd 1st
+3396 1st 2nd 3rd Last 3rd 2nd 1st
+3397 1st 2nd 3rd Last 3rd 2nd 1st
+3398 1st 2nd 3rd Last 3rd 2nd 1st
+3399 1st 2nd 3rd Last 3rd 2nd 1st
+3400 1st 2nd 3rd Last 3rd 2nd 1st
+3401 1st 2nd 3rd Last 3rd 2nd 1st
+3402 1st 2nd 3rd Last 3rd 2nd 1st
+3403 1st 2nd 3rd Last 3rd 2nd 1st
+3404 1st 2nd 3rd Last 3rd 2nd 1st
+3405 1st 2nd 3rd Last 3rd 2nd 1st
+3406 1st 2nd 3rd Last 3rd 2nd 1st
+3407 1st 2nd 3rd Last 3rd 2nd 1st
+3408 1st 2nd 3rd Last 3rd 2nd 1st
+3409 1st 2nd 3rd Last 3rd 2nd 1st
+3410 1st 2nd 3rd Last 3rd 2nd 1st
+3411 1st 2nd 3rd Last 3rd 2nd 1st
+3412 1st 2nd 3rd Last 3rd 2nd 1st
+3413 1st 2nd 3rd Last 3rd 2nd 1st
+3414 1st 2nd 3rd Last 3rd 2nd 1st
+3415 1st 2nd 3rd Last 3rd 2nd 1st
+3416 1st 2nd 3rd Last 3rd 2nd 1st
+3417 1st 2nd 3rd Last 3rd 2nd 1st
+3418 1st 2nd 3rd Last 3rd 2nd 1st
+3419 1st 2nd 3rd Last 3rd 2nd 1st
+3420 1st 2nd 3rd Last 3rd 2nd 1st
+3421 1st 2nd 3rd Last 3rd 2nd 1st
+3422 1st 2nd 3rd Last 3rd 2nd 1st
+3423 1st 2nd 3rd Last 3rd 2nd 1st
+3424 1st 2nd 3rd Last 3rd 2nd 1st
+3425 1st 2nd 3rd Last 3rd 2nd 1st
+3426 1st 2nd 3rd Last 3rd 2nd 1st
+3427 1st 2nd 3rd Last 3rd 2nd 1st
+3428 1st 2nd 3rd Last 3rd 2nd 1st
+3429 1st 2nd 3rd Last 3rd 2nd 1st
+3430 1st 2nd 3rd Last 3rd 2nd 1st
+3431 1st 2nd 3rd Last 3rd 2nd 1st
+3432 1st 2nd 3rd Last 3rd 2nd 1st
+3433 1st 2nd 3rd Last 3rd 2nd 1st
+3434 1st 2nd 3rd Last 3rd 2nd 1st
+3435 1st 2nd 3rd Last 3rd 2nd 1st
+3436 1st 2nd 3rd Last 3rd 2nd 1st
+3437 1st 2nd 3rd Last 3rd 2nd 1st
+3438 1st 2nd 3rd Last 3rd 2nd 1st
+3439 1st 2nd 3rd Last 3rd 2nd 1st
+3440 1st 2nd 3rd Last 3rd 2nd 1st
+3441 1st 2nd 3rd Last 3rd 2nd 1st
+3442 1st 2nd 3rd Last 3rd 2nd 1st
+3443 1st 2nd 3rd Last 3rd 2nd 1st
+3444 1st 2nd 3rd Last 3rd 2nd 1st
+3445 1st 2nd 3rd Last 3rd 2nd 1st
+3446 1st 2nd 3rd Last 3rd 2nd 1st
+3447 1st 2nd 3rd Last 3rd 2nd 1st
+3448 1st 2nd 3rd Last 3rd 2nd 1st
+3449 1st 2nd 3rd Last 3rd 2nd 1st
+3450 1st 2nd 3rd Last 3rd 2nd 1st
+3451 1st 2nd 3rd Last 3rd 2nd 1st
+3452 1st 2nd 3rd Last 3rd 2nd 1st
+3453 1st 2nd 3rd Last 3rd 2nd 1st
+3454 1st 2nd 3rd Last 3rd 2nd 1st
+3455 1st 2nd 3rd Last 3rd 2nd 1st
+3456 1st 2nd 3rd Last 3rd 2nd 1st
+3457 1st 2nd 3rd Last 3rd 2nd 1st
+3458 1st 2nd 3rd Last 3rd 2nd 1st
+3459 1st 2nd 3rd Last 3rd 2nd 1st
+3460 1st 2nd 3rd Last 3rd 2nd 1st
+3461 1st 2nd 3rd Last 3rd 2nd 1st
+3462 1st 2nd 3rd Last 3rd 2nd 1st
+3463 1st 2nd 3rd Last 3rd 2nd 1st
+3464 1st 2nd 3rd Last 3rd 2nd 1st
+3465 1st 2nd 3rd Last 3rd 2nd 1st
+3466 1st 2nd 3rd Last 3rd 2nd 1st
+3467 1st 2nd 3rd Last 3rd 2nd 1st
+3468 1st 2nd 3rd Last 3rd 2nd 1st
+3469 1st 2nd 3rd Last 3rd 2nd 1st
+3470 1st 2nd 3rd Last 3rd 2nd 1st
+3471 1st 2nd 3rd Last 3rd 2nd 1st
+3472 1st 2nd 3rd Last 3rd 2nd 1st
+3473 1st 2nd 3rd Last 3rd 2nd 1st
+3474 1st 2nd 3rd Last 3rd 2nd 1st
+3475 1st 2nd 3rd Last 3rd 2nd 1st
+3476 1st 2nd 3rd Last 3rd 2nd 1st
+3477 1st 2nd 3rd Last 3rd 2nd 1st
+3478 1st 2nd 3rd Last 3rd 2nd 1st
+3479 1st 2nd 3rd Last 3rd 2nd 1st
+3480 1st 2nd 3rd Last 3rd 2nd 1st
+3481 1st 2nd 3rd Last 3rd 2nd 1st
+3482 1st 2nd 3rd Last 3rd 2nd 1st
+3483 1st 2nd 3rd Last 3rd 2nd 1st
+3484 1st 2nd 3rd Last 3rd 2nd 1st
+3485 1st 2nd 3rd Last 3rd 2nd 1st
+3486 1st 2nd 3rd Last 3rd 2nd 1st
+3487 1st 2nd 3rd Last 3rd 2nd 1st
+3488 1st 2nd 3rd Last 3rd 2nd 1st
+3489 1st 2nd 3rd Last 3rd 2nd 1st
+3490 1st 2nd 3rd Last 3rd 2nd 1st
+3491 1st 2nd 3rd Last 3rd 2nd 1st
+3492 1st 2nd 3rd Last 3rd 2nd 1st
+3493 1st 2nd 3rd Last 3rd 2nd 1st
+3494 1st 2nd 3rd Last 3rd 2nd 1st
+3495 1st 2nd 3rd Last 3rd 2nd 1st
+3496 1st 2nd 3rd Last 3rd 2nd 1st
+3497 1st 2nd 3rd Last 3rd 2nd 1st
+3498 1st 2nd 3rd Last 3rd 2nd 1st
+3499 1st 2nd 3rd Last 3rd 2nd 1st
+3500 1st 2nd 3rd Last 3rd 2nd 1st
+3501 1st 2nd 3rd Last 3rd 2nd 1st
+3502 1st 2nd 3rd Last 3rd 2nd 1st
+3503 1st 2nd 3rd Last 3rd 2nd 1st
+3504 1st 2nd 3rd Last 3rd 2nd 1st
+3505 1st 2nd 3rd Last 3rd 2nd 1st
+3506 1st 2nd 3rd Last 3rd 2nd 1st
+3507 1st 2nd 3rd Last 3rd 2nd 1st
+3508 1st 2nd 3rd Last 3rd 2nd 1st
+3509 1st 2nd 3rd Last 3rd 2nd 1st
+3510 1st 2nd 3rd Last 3rd 2nd 1st
+3511 1st 2nd 3rd Last 3rd 2nd 1st
+3512 1st 2nd 3rd Last 3rd 2nd 1st
+3513 1st 2nd 3rd Last 3rd 2nd 1st
+3514 1st 2nd 3rd Last 3rd 2nd 1st
+3515 1st 2nd 3rd Last 3rd 2nd 1st
+3516 1st 2nd 3rd Last 3rd 2nd 1st
+3517 1st 2nd 3rd Last 3rd 2nd 1st
+3518 1st 2nd 3rd Last 3rd 2nd 1st
+3519 1st 2nd 3rd Last 3rd 2nd 1st
+3520 1st 2nd 3rd Last 3rd 2nd 1st
+3521 1st 2nd 3rd Last 3rd 2nd 1st
+3522 1st 2nd 3rd Last 3rd 2nd 1st
+3523 1st 2nd 3rd Last 3rd 2nd 1st
+3524 1st 2nd 3rd Last 3rd 2nd 1st
+3525 1st 2nd 3rd Last 3rd 2nd 1st
+3526 1st 2nd 3rd Last 3rd 2nd 1st
+3527 1st 2nd 3rd Last 3rd 2nd 1st
+3528 1st 2nd 3rd Last 3rd 2nd 1st
+3529 1st 2nd 3rd Last 3rd 2nd 1st
+3530 1st 2nd 3rd Last 3rd 2nd 1st
+3531 1st 2nd 3rd Last 3rd 2nd 1st
+3532 1st 2nd 3rd Last 3rd 2nd 1st
+3533 1st 2nd 3rd Last 3rd 2nd 1st
+3534 1st 2nd 3rd Last 3rd 2nd 1st
+3535 1st 2nd 3rd Last 3rd 2nd 1st
+3536 1st 2nd 3rd Last 3rd 2nd 1st
+3537 1st 2nd 3rd Last 3rd 2nd 1st
+3538 1st 2nd 3rd Last 3rd 2nd 1st
+3539 1st 2nd 3rd Last 3rd 2nd 1st
+3540 1st 2nd 3rd Last 3rd 2nd 1st
+3541 1st 2nd 3rd Last 3rd 2nd 1st
+3542 1st 2nd 3rd Last 3rd 2nd 1st
+3543 1st 2nd 3rd Last 3rd 2nd 1st
+3544 1st 2nd 3rd Last 3rd 2nd 1st
+3545 1st 2nd 3rd Last 3rd 2nd 1st
+3546 1st 2nd 3rd Last 3rd 2nd 1st
+3547 1st 2nd 3rd Last 3rd 2nd 1st
+3548 1st 2nd 3rd Last 3rd 2nd 1st
+3549 1st 2nd 3rd Last 3rd 2nd 1st
+3550 1st 2nd 3rd Last 3rd 2nd 1st
+3551 1st 2nd 3rd Last 3rd 2nd 1st
+3552 1st 2nd 3rd Last 3rd 2nd 1st
+3553 1st 2nd 3rd Last 3rd 2nd 1st
+3554 1st 2nd 3rd Last 3rd 2nd 1st
+3555 1st 2nd 3rd Last 3rd 2nd 1st
+3556 1st 2nd 3rd Last 3rd 2nd 1st
+3557 1st 2nd 3rd Last 3rd 2nd 1st
+3558 1st 2nd 3rd Last 3rd 2nd 1st
+3559 1st 2nd 3rd Last 3rd 2nd 1st
+3560 1st 2nd 3rd Last 3rd 2nd 1st
+3561 1st 2nd 3rd Last 3rd 2nd 1st
+3562 1st 2nd 3rd Last 3rd 2nd 1st
+3563 1st 2nd 3rd Last 3rd 2nd 1st
+3564 1st 2nd 3rd Last 3rd 2nd 1st
+3565 1st 2nd 3rd Last 3rd 2nd 1st
+3566 1st 2nd 3rd Last 3rd 2nd 1st
+3567 1st 2nd 3rd Last 3rd 2nd 1st
+3568 1st 2nd 3rd Last 3rd 2nd 1st
+3569 1st 2nd 3rd Last 3rd 2nd 1st
+3570 1st 2nd 3rd Last 3rd 2nd 1st
+3571 1st 2nd 3rd Last 3rd 2nd 1st
+3572 1st 2nd 3rd Last 3rd 2nd 1st
+3573 1st 2nd 3rd Last 3rd 2nd 1st
+3574 1st 2nd 3rd Last 3rd 2nd 1st
+3575 1st 2nd 3rd Last 3rd 2nd 1st
+3576 1st 2nd 3rd Last 3rd 2nd 1st
+3577 1st 2nd 3rd Last 3rd 2nd 1st
+3578 1st 2nd 3rd Last 3rd 2nd 1st
+3579 1st 2nd 3rd Last 3rd 2nd 1st
+3580 1st 2nd 3rd Last 3rd 2nd 1st
+3581 1st 2nd 3rd Last 3rd 2nd 1st
+3582 1st 2nd 3rd Last 3rd 2nd 1st
+3583 1st 2nd 3rd Last 3rd 2nd 1st
+3584 1st 2nd 3rd Last 3rd 2nd 1st
+3585 1st 2nd 3rd Last 3rd 2nd 1st
+3586 1st 2nd 3rd Last 3rd 2nd 1st
+3587 1st 2nd 3rd Last 3rd 2nd 1st
+3588 1st 2nd 3rd Last 3rd 2nd 1st
+3589 1st 2nd 3rd Last 3rd 2nd 1st
+3590 1st 2nd 3rd Last 3rd 2nd 1st
+3591 1st 2nd 3rd Last 3rd 2nd 1st
+3592 1st 2nd 3rd Last 3rd 2nd 1st
+3593 1st 2nd 3rd Last 3rd 2nd 1st
+3594 1st 2nd 3rd Last 3rd 2nd 1st
+3595 1st 2nd 3rd Last 3rd 2nd 1st
+3596 1st 2nd 3rd Last 3rd 2nd 1st
+3597 1st 2nd 3rd Last 3rd 2nd 1st
+3598 1st 2nd 3rd Last 3rd 2nd 1st
+3599 1st 2nd 3rd Last 3rd 2nd 1st
+3600 1st 2nd 3rd Last 3rd 2nd 1st
+3601 1st 2nd 3rd Last 3rd 2nd 1st
+3602 1st 2nd 3rd Last 3rd 2nd 1st
+3603 1st 2nd 3rd Last 3rd 2nd 1st
+3604 1st 2nd 3rd Last 3rd 2nd 1st
+3605 1st 2nd 3rd Last 3rd 2nd 1st
+3606 1st 2nd 3rd Last 3rd 2nd 1st
+3607 1st 2nd 3rd Last 3rd 2nd 1st
+3608 1st 2nd 3rd Last 3rd 2nd 1st
+3609 1st 2nd 3rd Last 3rd 2nd 1st
+3610 1st 2nd 3rd Last 3rd 2nd 1st
+3611 1st 2nd 3rd Last 3rd 2nd 1st
+3612 1st 2nd 3rd Last 3rd 2nd 1st
+3613 1st 2nd 3rd Last 3rd 2nd 1st
+3614 1st 2nd 3rd Last 3rd 2nd 1st
+3615 1st 2nd 3rd Last 3rd 2nd 1st
+3616 1st 2nd 3rd Last 3rd 2nd 1st
+3617 1st 2nd 3rd Last 3rd 2nd 1st
+3618 1st 2nd 3rd Last 3rd 2nd 1st
+3619 1st 2nd 3rd Last 3rd 2nd 1st
+3620 1st 2nd 3rd Last 3rd 2nd 1st
+3621 1st 2nd 3rd Last 3rd 2nd 1st
+3622 1st 2nd 3rd Last 3rd 2nd 1st
+3623 1st 2nd 3rd Last 3rd 2nd 1st
+3624 1st 2nd 3rd Last 3rd 2nd 1st
+3625 1st 2nd 3rd Last 3rd 2nd 1st
+3626 1st 2nd 3rd Last 3rd 2nd 1st
+3627 1st 2nd 3rd Last 3rd 2nd 1st
+3628 1st 2nd 3rd Last 3rd 2nd 1st
+3629 1st 2nd 3rd Last 3rd 2nd 1st
+3630 1st 2nd 3rd Last 3rd 2nd 1st
+3631 1st 2nd 3rd Last 3rd 2nd 1st
+3632 1st 2nd 3rd Last 3rd 2nd 1st
+3633 1st 2nd 3rd Last 3rd 2nd 1st
+3634 1st 2nd 3rd Last 3rd 2nd 1st
+3635 1st 2nd 3rd Last 3rd 2nd 1st
+3636 1st 2nd 3rd Last 3rd 2nd 1st
+3637 1st 2nd 3rd Last 3rd 2nd 1st
+3638 1st 2nd 3rd Last 3rd 2nd 1st
+3639 1st 2nd 3rd Last 3rd 2nd 1st
+3640 1st 2nd 3rd Last 3rd 2nd 1st
+3641 1st 2nd 3rd Last 3rd 2nd 1st
+3642 1st 2nd 3rd Last 3rd 2nd 1st
+3643 1st 2nd 3rd Last 3rd 2nd 1st
+3644 1st 2nd 3rd Last 3rd 2nd 1st
+3645 1st 2nd 3rd Last 3rd 2nd 1st
+3646 1st 2nd 3rd Last 3rd 2nd 1st
+3647 1st 2nd 3rd Last 3rd 2nd 1st
+3648 1st 2nd 3rd Last 3rd 2nd 1st
+3649 1st 2nd 3rd Last 3rd 2nd 1st
+3650 1st 2nd 3rd Last 3rd 2nd 1st
+3651 1st 2nd 3rd Last 3rd 2nd 1st
+3652 1st 2nd 3rd Last 3rd 2nd 1st
+3653 1st 2nd 3rd Last 3rd 2nd 1st
+3654 1st 2nd 3rd Last 3rd 2nd 1st
+3655 1st 2nd 3rd Last 3rd 2nd 1st
+3656 1st 2nd 3rd Last 3rd 2nd 1st
+3657 1st 2nd 3rd Last 3rd 2nd 1st
+3658 1st 2nd 3rd Last 3rd 2nd 1st
+3659 1st 2nd 3rd Last 3rd 2nd 1st
+3660 1st 2nd 3rd Last 3rd 2nd 1st
+3661 1st 2nd 3rd Last 3rd 2nd 1st
+3662 1st 2nd 3rd Last 3rd 2nd 1st
+3663 1st 2nd 3rd Last 3rd 2nd 1st
+3664 1st 2nd 3rd Last 3rd 2nd 1st
+3665 1st 2nd 3rd Last 3rd 2nd 1st
+3666 1st 2nd 3rd Last 3rd 2nd 1st
+3667 1st 2nd 3rd Last 3rd 2nd 1st
+3668 1st 2nd 3rd Last 3rd 2nd 1st
+3669 1st 2nd 3rd Last 3rd 2nd 1st
+3670 1st 2nd 3rd Last 3rd 2nd 1st
+3671 1st 2nd 3rd Last 3rd 2nd 1st
+3672 1st 2nd 3rd Last 3rd 2nd 1st
+3673 1st 2nd 3rd Last 3rd 2nd 1st
+3674 1st 2nd 3rd Last 3rd 2nd 1st
+3675 1st 2nd 3rd Last 3rd 2nd 1st
+3676 1st 2nd 3rd Last 3rd 2nd 1st
+3677 1st 2nd 3rd Last 3rd 2nd 1st
+3678 1st 2nd 3rd Last 3rd 2nd 1st
+3679 1st 2nd 3rd Last 3rd 2nd 1st
+3680 1st 2nd 3rd Last 3rd 2nd 1st
+3681 1st 2nd 3rd Last 3rd 2nd 1st
+3682 1st 2nd 3rd Last 3rd 2nd 1st
+3683 1st 2nd 3rd Last 3rd 2nd 1st
+3684 1st 2nd 3rd Last 3rd 2nd 1st
+3685 1st 2nd 3rd Last 3rd 2nd 1st
+3686 1st 2nd 3rd Last 3rd 2nd 1st
+3687 1st 2nd 3rd Last 3rd 2nd 1st
+3688 1st 2nd 3rd Last 3rd 2nd 1st
+3689 1st 2nd 3rd Last 3rd 2nd 1st
+3690 1st 2nd 3rd Last 3rd 2nd 1st
+3691 1st 2nd 3rd Last 3rd 2nd 1st
+3692 1st 2nd 3rd Last 3rd 2nd 1st
+3693 1st 2nd 3rd Last 3rd 2nd 1st
+3694 1st 2nd 3rd Last 3rd 2nd 1st
+3695 1st 2nd 3rd Last 3rd 2nd 1st
+3696 1st 2nd 3rd Last 3rd 2nd 1st
+3697 1st 2nd 3rd Last 3rd 2nd 1st
+3698 1st 2nd 3rd Last 3rd 2nd 1st
+3699 1st 2nd 3rd Last 3rd 2nd 1st
+3700 1st 2nd 3rd Last 3rd 2nd 1st
+3701 1st 2nd 3rd Last 3rd 2nd 1st
+3702 1st 2nd 3rd Last 3rd 2nd 1st
+3703 1st 2nd 3rd Last 3rd 2nd 1st
+3704 1st 2nd 3rd Last 3rd 2nd 1st
+3705 1st 2nd 3rd Last 3rd 2nd 1st
+3706 1st 2nd 3rd Last 3rd 2nd 1st
+3707 1st 2nd 3rd Last 3rd 2nd 1st
+3708 1st 2nd 3rd Last 3rd 2nd 1st
+3709 1st 2nd 3rd Last 3rd 2nd 1st
+3710 1st 2nd 3rd Last 3rd 2nd 1st
+3711 1st 2nd 3rd Last 3rd 2nd 1st
+3712 1st 2nd 3rd Last 3rd 2nd 1st
+3713 1st 2nd 3rd Last 3rd 2nd 1st
+3714 1st 2nd 3rd Last 3rd 2nd 1st
+3715 1st 2nd 3rd Last 3rd 2nd 1st
+3716 1st 2nd 3rd Last 3rd 2nd 1st
+3717 1st 2nd 3rd Last 3rd 2nd 1st
+3718 1st 2nd 3rd Last 3rd 2nd 1st
+3719 1st 2nd 3rd Last 3rd 2nd 1st
+3720 1st 2nd 3rd Last 3rd 2nd 1st
+3721 1st 2nd 3rd Last 3rd 2nd 1st
+3722 1st 2nd 3rd Last 3rd 2nd 1st
+3723 1st 2nd 3rd Last 3rd 2nd 1st
+3724 1st 2nd 3rd Last 3rd 2nd 1st
+3725 1st 2nd 3rd Last 3rd 2nd 1st
+3726 1st 2nd 3rd Last 3rd 2nd 1st
+3727 1st 2nd 3rd Last 3rd 2nd 1st
+3728 1st 2nd 3rd Last 3rd 2nd 1st
+3729 1st 2nd 3rd Last 3rd 2nd 1st
+3730 1st 2nd 3rd Last 3rd 2nd 1st
+3731 1st 2nd 3rd Last 3rd 2nd 1st
+3732 1st 2nd 3rd Last 3rd 2nd 1st
+3733 1st 2nd 3rd Last 3rd 2nd 1st
+3734 1st 2nd 3rd Last 3rd 2nd 1st
+3735 1st 2nd 3rd Last 3rd 2nd 1st
+3736 1st 2nd 3rd Last 3rd 2nd 1st
+3737 1st 2nd 3rd Last 3rd 2nd 1st
+3738 1st 2nd 3rd Last 3rd 2nd 1st
+3739 1st 2nd 3rd Last 3rd 2nd 1st
+3740 1st 2nd 3rd Last 3rd 2nd 1st
+3741 1st 2nd 3rd Last 3rd 2nd 1st
+3742 1st 2nd 3rd Last 3rd 2nd 1st
+3743 1st 2nd 3rd Last 3rd 2nd 1st
+3744 1st 2nd 3rd Last 3rd 2nd 1st
+3745 1st 2nd 3rd Last 3rd 2nd 1st
+3746 1st 2nd 3rd Last 3rd 2nd 1st
+3747 1st 2nd 3rd Last 3rd 2nd 1st
+3748 1st 2nd 3rd Last 3rd 2nd 1st
+3749 1st 2nd 3rd Last 3rd 2nd 1st
+3750 1st 2nd 3rd Last 3rd 2nd 1st
+3751 1st 2nd 3rd Last 3rd 2nd 1st
+3752 1st 2nd 3rd Last 3rd 2nd 1st
+3753 1st 2nd 3rd Last 3rd 2nd 1st
+3754 1st 2nd 3rd Last 3rd 2nd 1st
+3755 1st 2nd 3rd Last 3rd 2nd 1st
+3756 1st 2nd 3rd Last 3rd 2nd 1st
+3757 1st 2nd 3rd Last 3rd 2nd 1st
+3758 1st 2nd 3rd Last 3rd 2nd 1st
+3759 1st 2nd 3rd Last 3rd 2nd 1st
+3760 1st 2nd 3rd Last 3rd 2nd 1st
+3761 1st 2nd 3rd Last 3rd 2nd 1st
+3762 1st 2nd 3rd Last 3rd 2nd 1st
+3763 1st 2nd 3rd Last 3rd 2nd 1st
+3764 1st 2nd 3rd Last 3rd 2nd 1st
+3765 1st 2nd 3rd Last 3rd 2nd 1st
+3766 1st 2nd 3rd Last 3rd 2nd 1st
+3767 1st 2nd 3rd Last 3rd 2nd 1st
+3768 1st 2nd 3rd Last 3rd 2nd 1st
+3769 1st 2nd 3rd Last 3rd 2nd 1st
+3770 1st 2nd 3rd Last 3rd 2nd 1st
+3771 1st 2nd 3rd Last 3rd 2nd 1st
+3772 1st 2nd 3rd Last 3rd 2nd 1st
+3773 1st 2nd 3rd Last 3rd 2nd 1st
+3774 1st 2nd 3rd Last 3rd 2nd 1st
+3775 1st 2nd 3rd Last 3rd 2nd 1st
+3776 1st 2nd 3rd Last 3rd 2nd 1st
+3777 1st 2nd 3rd Last 3rd 2nd 1st
+3778 1st 2nd 3rd Last 3rd 2nd 1st
+3779 1st 2nd 3rd Last 3rd 2nd 1st
+3780 1st 2nd 3rd Last 3rd 2nd 1st
+3781 1st 2nd 3rd Last 3rd 2nd 1st
+3782 1st 2nd 3rd Last 3rd 2nd 1st
+3783 1st 2nd 3rd Last 3rd 2nd 1st
+3784 1st 2nd 3rd Last 3rd 2nd 1st
+3785 1st 2nd 3rd Last 3rd 2nd 1st
+3786 1st 2nd 3rd Last 3rd 2nd 1st
+3787 1st 2nd 3rd Last 3rd 2nd 1st
+3788 1st 2nd 3rd Last 3rd 2nd 1st
+3789 1st 2nd 3rd Last 3rd 2nd 1st
+3790 1st 2nd 3rd Last 3rd 2nd 1st
+3791 1st 2nd 3rd Last 3rd 2nd 1st
+3792 1st 2nd 3rd Last 3rd 2nd 1st
+3793 1st 2nd 3rd Last 3rd 2nd 1st
+3794 1st 2nd 3rd Last 3rd 2nd 1st
+3795 1st 2nd 3rd Last 3rd 2nd 1st
+3796 1st 2nd 3rd Last 3rd 2nd 1st
+3797 1st 2nd 3rd Last 3rd 2nd 1st
+3798 1st 2nd 3rd Last 3rd 2nd 1st
+3799 1st 2nd 3rd Last 3rd 2nd 1st
+3800 1st 2nd 3rd Last 3rd 2nd 1st
+3801 1st 2nd 3rd Last 3rd 2nd 1st
+3802 1st 2nd 3rd Last 3rd 2nd 1st
+3803 1st 2nd 3rd Last 3rd 2nd 1st
+3804 1st 2nd 3rd Last 3rd 2nd 1st
+3805 1st 2nd 3rd Last 3rd 2nd 1st
+3806 1st 2nd 3rd Last 3rd 2nd 1st
+3807 1st 2nd 3rd Last 3rd 2nd 1st
+3808 1st 2nd 3rd Last 3rd 2nd 1st
+3809 1st 2nd 3rd Last 3rd 2nd 1st
+3810 1st 2nd 3rd Last 3rd 2nd 1st
+3811 1st 2nd 3rd Last 3rd 2nd 1st
+3812 1st 2nd 3rd Last 3rd 2nd 1st
+3813 1st 2nd 3rd Last 3rd 2nd 1st
+3814 1st 2nd 3rd Last 3rd 2nd 1st
+3815 1st 2nd 3rd Last 3rd 2nd 1st
+3816 1st 2nd 3rd Last 3rd 2nd 1st
+3817 1st 2nd 3rd Last 3rd 2nd 1st
+3818 1st 2nd 3rd Last 3rd 2nd 1st
+3819 1st 2nd 3rd Last 3rd 2nd 1st
+3820 1st 2nd 3rd Last 3rd 2nd 1st
+3821 1st 2nd 3rd Last 3rd 2nd 1st
+3822 1st 2nd 3rd Last 3rd 2nd 1st
+3823 1st 2nd 3rd Last 3rd 2nd 1st
+3824 1st 2nd 3rd Last 3rd 2nd 1st
+3825 1st 2nd 3rd Last 3rd 2nd 1st
+3826 1st 2nd 3rd Last 3rd 2nd 1st
+3827 1st 2nd 3rd Last 3rd 2nd 1st
+3828 1st 2nd 3rd Last 3rd 2nd 1st
+3829 1st 2nd 3rd Last 3rd 2nd 1st
+3830 1st 2nd 3rd Last 3rd 2nd 1st
+3831 1st 2nd 3rd Last 3rd 2nd 1st
+3832 1st 2nd 3rd Last 3rd 2nd 1st
+3833 1st 2nd 3rd Last 3rd 2nd 1st
+3834 1st 2nd 3rd Last 3rd 2nd 1st
+3835 1st 2nd 3rd Last 3rd 2nd 1st
+3836 1st 2nd 3rd Last 3rd 2nd 1st
+3837 1st 2nd 3rd Last 3rd 2nd 1st
+3838 1st 2nd 3rd Last 3rd 2nd 1st
+3839 1st 2nd 3rd Last 3rd 2nd 1st
+3840 1st 2nd 3rd Last 3rd 2nd 1st
+3841 1st 2nd 3rd Last 3rd 2nd 1st
+3842 1st 2nd 3rd Last 3rd 2nd 1st
+3843 1st 2nd 3rd Last 3rd 2nd 1st
+3844 1st 2nd 3rd Last 3rd 2nd 1st
+3845 1st 2nd 3rd Last 3rd 2nd 1st
+3846 1st 2nd 3rd Last 3rd 2nd 1st
+3847 1st 2nd 3rd Last 3rd 2nd 1st
+3848 1st 2nd 3rd Last 3rd 2nd 1st
+3849 1st 2nd 3rd Last 3rd 2nd 1st
+3850 1st 2nd 3rd Last 3rd 2nd 1st
+3851 1st 2nd 3rd Last 3rd 2nd 1st
+3852 1st 2nd 3rd Last 3rd 2nd 1st
+3853 1st 2nd 3rd Last 3rd 2nd 1st
+3854 1st 2nd 3rd Last 3rd 2nd 1st
+3855 1st 2nd 3rd Last 3rd 2nd 1st
+3856 1st 2nd 3rd Last 3rd 2nd 1st
+3857 1st 2nd 3rd Last 3rd 2nd 1st
+3858 1st 2nd 3rd Last 3rd 2nd 1st
+3859 1st 2nd 3rd Last 3rd 2nd 1st
+3860 1st 2nd 3rd Last 3rd 2nd 1st
+3861 1st 2nd 3rd Last 3rd 2nd 1st
+3862 1st 2nd 3rd Last 3rd 2nd 1st
+3863 1st 2nd 3rd Last 3rd 2nd 1st
+3864 1st 2nd 3rd Last 3rd 2nd 1st
+3865 1st 2nd 3rd Last 3rd 2nd 1st
+3866 1st 2nd 3rd Last 3rd 2nd 1st
+3867 1st 2nd 3rd Last 3rd 2nd 1st
+3868 1st 2nd 3rd Last 3rd 2nd 1st
+3869 1st 2nd 3rd Last 3rd 2nd 1st
+3870 1st 2nd 3rd Last 3rd 2nd 1st
+3871 1st 2nd 3rd Last 3rd 2nd 1st
+3872 1st 2nd 3rd Last 3rd 2nd 1st
+3873 1st 2nd 3rd Last 3rd 2nd 1st
+3874 1st 2nd 3rd Last 3rd 2nd 1st
+3875 1st 2nd 3rd Last 3rd 2nd 1st
+3876 1st 2nd 3rd Last 3rd 2nd 1st
+3877 1st 2nd 3rd Last 3rd 2nd 1st
+3878 1st 2nd 3rd Last 3rd 2nd 1st
+3879 1st 2nd 3rd Last 3rd 2nd 1st
+3880 1st 2nd 3rd Last 3rd 2nd 1st
+3881 1st 2nd 3rd Last 3rd 2nd 1st
+3882 1st 2nd 3rd Last 3rd 2nd 1st
+3883 1st 2nd 3rd Last 3rd 2nd 1st
+3884 1st 2nd 3rd Last 3rd 2nd 1st
+3885 1st 2nd 3rd Last 3rd 2nd 1st
+3886 1st 2nd 3rd Last 3rd 2nd 1st
+3887 1st 2nd 3rd Last 3rd 2nd 1st
+3888 1st 2nd 3rd Last 3rd 2nd 1st
+3889 1st 2nd 3rd Last 3rd 2nd 1st
+3890 1st 2nd 3rd Last 3rd 2nd 1st
+3891 1st 2nd 3rd Last 3rd 2nd 1st
+3892 1st 2nd 3rd Last 3rd 2nd 1st
+3893 1st 2nd 3rd Last 3rd 2nd 1st
+3894 1st 2nd 3rd Last 3rd 2nd 1st
+3895 1st 2nd 3rd Last 3rd 2nd 1st
+3896 1st 2nd 3rd Last 3rd 2nd 1st
+3897 1st 2nd 3rd Last 3rd 2nd 1st
+3898 1st 2nd 3rd Last 3rd 2nd 1st
+3899 1st 2nd 3rd Last 3rd 2nd 1st
+3900 1st 2nd 3rd Last 3rd 2nd 1st
+3901 1st 2nd 3rd Last 3rd 2nd 1st
+3902 1st 2nd 3rd Last 3rd 2nd 1st
+3903 1st 2nd 3rd Last 3rd 2nd 1st
+3904 1st 2nd 3rd Last 3rd 2nd 1st
+3905 1st 2nd 3rd Last 3rd 2nd 1st
+3906 1st 2nd 3rd Last 3rd 2nd 1st
+3907 1st 2nd 3rd Last 3rd 2nd 1st
+3908 1st 2nd 3rd Last 3rd 2nd 1st
+3909 1st 2nd 3rd Last 3rd 2nd 1st
+3910 1st 2nd 3rd Last 3rd 2nd 1st
+3911 1st 2nd 3rd Last 3rd 2nd 1st
+3912 1st 2nd 3rd Last 3rd 2nd 1st
+3913 1st 2nd 3rd Last 3rd 2nd 1st
+3914 1st 2nd 3rd Last 3rd 2nd 1st
+3915 1st 2nd 3rd Last 3rd 2nd 1st
+3916 1st 2nd 3rd Last 3rd 2nd 1st
+3917 1st 2nd 3rd Last 3rd 2nd 1st
+3918 1st 2nd 3rd Last 3rd 2nd 1st
+3919 1st 2nd 3rd Last 3rd 2nd 1st
+3920 1st 2nd 3rd Last 3rd 2nd 1st
+3921 1st 2nd 3rd Last 3rd 2nd 1st
+3922 1st 2nd 3rd Last 3rd 2nd 1st
+3923 1st 2nd 3rd Last 3rd 2nd 1st
+3924 1st 2nd 3rd Last 3rd 2nd 1st
+3925 1st 2nd 3rd Last 3rd 2nd 1st
+3926 1st 2nd 3rd Last 3rd 2nd 1st
+3927 1st 2nd 3rd Last 3rd 2nd 1st
+3928 1st 2nd 3rd Last 3rd 2nd 1st
+3929 1st 2nd 3rd Last 3rd 2nd 1st
+3930 1st 2nd 3rd Last 3rd 2nd 1st
+3931 1st 2nd 3rd Last 3rd 2nd 1st
+3932 1st 2nd 3rd Last 3rd 2nd 1st
+3933 1st 2nd 3rd Last 3rd 2nd 1st
+3934 1st 2nd 3rd Last 3rd 2nd 1st
+3935 1st 2nd 3rd Last 3rd 2nd 1st
+3936 1st 2nd 3rd Last 3rd 2nd 1st
+3937 1st 2nd 3rd Last 3rd 2nd 1st
+3938 1st 2nd 3rd Last 3rd 2nd 1st
+3939 1st 2nd 3rd Last 3rd 2nd 1st
+3940 1st 2nd 3rd Last 3rd 2nd 1st
+3941 1st 2nd 3rd Last 3rd 2nd 1st
+3942 1st 2nd 3rd Last 3rd 2nd 1st
+3943 1st 2nd 3rd Last 3rd 2nd 1st
+3944 1st 2nd 3rd Last 3rd 2nd 1st
+3945 1st 2nd 3rd Last 3rd 2nd 1st
+3946 1st 2nd 3rd Last 3rd 2nd 1st
+3947 1st 2nd 3rd Last 3rd 2nd 1st
+3948 1st 2nd 3rd Last 3rd 2nd 1st
+3949 1st 2nd 3rd Last 3rd 2nd 1st
+3950 1st 2nd 3rd Last 3rd 2nd 1st
+3951 1st 2nd 3rd Last 3rd 2nd 1st
+3952 1st 2nd 3rd Last 3rd 2nd 1st
+3953 1st 2nd 3rd Last 3rd 2nd 1st
+3954 1st 2nd 3rd Last 3rd 2nd 1st
+3955 1st 2nd 3rd Last 3rd 2nd 1st
+3956 1st 2nd 3rd Last 3rd 2nd 1st
+3957 1st 2nd 3rd Last 3rd 2nd 1st
+3958 1st 2nd 3rd Last 3rd 2nd 1st
+3959 1st 2nd 3rd Last 3rd 2nd 1st
+3960 1st 2nd 3rd Last 3rd 2nd 1st
+3961 1st 2nd 3rd Last 3rd 2nd 1st
+3962 1st 2nd 3rd Last 3rd 2nd 1st
+3963 1st 2nd 3rd Last 3rd 2nd 1st
+3964 1st 2nd 3rd Last 3rd 2nd 1st
+3965 1st 2nd 3rd Last 3rd 2nd 1st
+3966 1st 2nd 3rd Last 3rd 2nd 1st
+3967 1st 2nd 3rd Last 3rd 2nd 1st
+3968 1st 2nd 3rd Last 3rd 2nd 1st
+3969 1st 2nd 3rd Last 3rd 2nd 1st
+3970 1st 2nd 3rd Last 3rd 2nd 1st
+3971 1st 2nd 3rd Last 3rd 2nd 1st
+3972 1st 2nd 3rd Last 3rd 2nd 1st
+3973 1st 2nd 3rd Last 3rd 2nd 1st
+3974 1st 2nd 3rd Last 3rd 2nd 1st
+3975 1st 2nd 3rd Last 3rd 2nd 1st
+3976 1st 2nd 3rd Last 3rd 2nd 1st
+3977 1st 2nd 3rd Last 3rd 2nd 1st
+3978 1st 2nd 3rd Last 3rd 2nd 1st
+3979 1st 2nd 3rd Last 3rd 2nd 1st
+3980 1st 2nd 3rd Last 3rd 2nd 1st
+3981 1st 2nd 3rd Last 3rd 2nd 1st
+3982 1st 2nd 3rd Last 3rd 2nd 1st
+3983 1st 2nd 3rd Last 3rd 2nd 1st
+3984 1st 2nd 3rd Last 3rd 2nd 1st
+3985 1st 2nd 3rd Last 3rd 2nd 1st
+3986 1st 2nd 3rd Last 3rd 2nd 1st
+3987 1st 2nd 3rd Last 3rd 2nd 1st
+3988 1st 2nd 3rd Last 3rd 2nd 1st
+3989 1st 2nd 3rd Last 3rd 2nd 1st
+3990 1st 2nd 3rd Last 3rd 2nd 1st
+3991 1st 2nd 3rd Last 3rd 2nd 1st
+3992 1st 2nd 3rd Last 3rd 2nd 1st
+3993 1st 2nd 3rd Last 3rd 2nd 1st
+3994 1st 2nd 3rd Last 3rd 2nd 1st
+3995 1st 2nd 3rd Last 3rd 2nd 1st
+3996 1st 2nd 3rd Last 3rd 2nd 1st
+3997 1st 2nd 3rd Last 3rd 2nd 1st
+3998 1st 2nd 3rd Last 3rd 2nd 1st
+3999 1st 2nd 3rd Last 3rd 2nd 1st
+4000 1st 2nd 3rd Last 3rd 2nd 1st
+4001 1st 2nd 3rd Last 3rd 2nd 1st
+4002 1st 2nd 3rd Last 3rd 2nd 1st
+4003 1st 2nd 3rd Last 3rd 2nd 1st
+4004 1st 2nd 3rd Last 3rd 2nd 1st
+4005 1st 2nd 3rd Last 3rd 2nd 1st
+4006 1st 2nd 3rd Last 3rd 2nd 1st
+4007 1st 2nd 3rd Last 3rd 2nd 1st
+4008 1st 2nd 3rd Last 3rd 2nd 1st
+4009 1st 2nd 3rd Last 3rd 2nd 1st
+4010 1st 2nd 3rd Last 3rd 2nd 1st
+4011 1st 2nd 3rd Last 3rd 2nd 1st
+4012 1st 2nd 3rd Last 3rd 2nd 1st
+4013 1st 2nd 3rd Last 3rd 2nd 1st
+4014 1st 2nd 3rd Last 3rd 2nd 1st
+4015 1st 2nd 3rd Last 3rd 2nd 1st
+4016 1st 2nd 3rd Last 3rd 2nd 1st
+4017 1st 2nd 3rd Last 3rd 2nd 1st
+4018 1st 2nd 3rd Last 3rd 2nd 1st
+4019 1st 2nd 3rd Last 3rd 2nd 1st
+4020 1st 2nd 3rd Last 3rd 2nd 1st
+4021 1st 2nd 3rd Last 3rd 2nd 1st
+4022 1st 2nd 3rd Last 3rd 2nd 1st
+4023 1st 2nd 3rd Last 3rd 2nd 1st
+4024 1st 2nd 3rd Last 3rd 2nd 1st
+4025 1st 2nd 3rd Last 3rd 2nd 1st
+4026 1st 2nd 3rd Last 3rd 2nd 1st
+4027 1st 2nd 3rd Last 3rd 2nd 1st
+4028 1st 2nd 3rd Last 3rd 2nd 1st
+4029 1st 2nd 3rd Last 3rd 2nd 1st
+4030 1st 2nd 3rd Last 3rd 2nd 1st
+4031 1st 2nd 3rd Last 3rd 2nd 1st
+4032 1st 2nd 3rd Last 3rd 2nd 1st
+4033 1st 2nd 3rd Last 3rd 2nd 1st
+4034 1st 2nd 3rd Last 3rd 2nd 1st
+4035 1st 2nd 3rd Last 3rd 2nd 1st
+4036 1st 2nd 3rd Last 3rd 2nd 1st
+4037 1st 2nd 3rd Last 3rd 2nd 1st
+4038 1st 2nd 3rd Last 3rd 2nd 1st
+4039 1st 2nd 3rd Last 3rd 2nd 1st
+4040 1st 2nd 3rd Last 3rd 2nd 1st
+4041 1st 2nd 3rd Last 3rd 2nd 1st
+4042 1st 2nd 3rd Last 3rd 2nd 1st
+4043 1st 2nd 3rd Last 3rd 2nd 1st
+4044 1st 2nd 3rd Last 3rd 2nd 1st
+4045 1st 2nd 3rd Last 3rd 2nd 1st
+4046 1st 2nd 3rd Last 3rd 2nd 1st
+4047 1st 2nd 3rd Last 3rd 2nd 1st
+4048 1st 2nd 3rd Last 3rd 2nd 1st
+4049 1st 2nd 3rd Last 3rd 2nd 1st
+4050 1st 2nd 3rd Last 3rd 2nd 1st
+4051 1st 2nd 3rd Last 3rd 2nd 1st
+4052 1st 2nd 3rd Last 3rd 2nd 1st
+4053 1st 2nd 3rd Last 3rd 2nd 1st
+4054 1st 2nd 3rd Last 3rd 2nd 1st
+4055 1st 2nd 3rd Last 3rd 2nd 1st
+4056 1st 2nd 3rd Last 3rd 2nd 1st
+4057 1st 2nd 3rd Last 3rd 2nd 1st
+4058 1st 2nd 3rd Last 3rd 2nd 1st
+4059 1st 2nd 3rd Last 3rd 2nd 1st
+4060 1st 2nd 3rd Last 3rd 2nd 1st
+4061 1st 2nd 3rd Last 3rd 2nd 1st
+4062 1st 2nd 3rd Last 3rd 2nd 1st
+4063 1st 2nd 3rd Last 3rd 2nd 1st
+4064 1st 2nd 3rd Last 3rd 2nd 1st
+4065 1st 2nd 3rd Last 3rd 2nd 1st
+4066 1st 2nd 3rd Last 3rd 2nd 1st
+4067 1st 2nd 3rd Last 3rd 2nd 1st
+4068 1st 2nd 3rd Last 3rd 2nd 1st
+4069 1st 2nd 3rd Last 3rd 2nd 1st
+4070 1st 2nd 3rd Last 3rd 2nd 1st
+4071 1st 2nd 3rd Last 3rd 2nd 1st
+4072 1st 2nd 3rd Last 3rd 2nd 1st
+4073 1st 2nd 3rd Last 3rd 2nd 1st
+4074 1st 2nd 3rd Last 3rd 2nd 1st
+4075 1st 2nd 3rd Last 3rd 2nd 1st
+4076 1st 2nd 3rd Last 3rd 2nd 1st
+4077 1st 2nd 3rd Last 3rd 2nd 1st
+4078 1st 2nd 3rd Last 3rd 2nd 1st
+4079 1st 2nd 3rd Last 3rd 2nd 1st
+4080 1st 2nd 3rd Last 3rd 2nd 1st
+4081 1st 2nd 3rd Last 3rd 2nd 1st
+4082 1st 2nd 3rd Last 3rd 2nd 1st
+4083 1st 2nd 3rd Last 3rd 2nd 1st
+4084 1st 2nd 3rd Last 3rd 2nd 1st
+4085 1st 2nd 3rd Last 3rd 2nd 1st
+4086 1st 2nd 3rd Last 3rd 2nd 1st
+4087 1st 2nd 3rd Last 3rd 2nd 1st
+4088 1st 2nd 3rd Last 3rd 2nd 1st
+4089 1st 2nd 3rd Last 3rd 2nd 1st
+4090 1st 2nd 3rd Last 3rd 2nd 1st
+4091 1st 2nd 3rd Last 3rd 2nd 1st
+4092 1st 2nd 3rd Last 3rd 2nd 1st
+4093 1st 2nd 3rd Last 3rd 2nd 1st
+4094 1st 2nd 3rd Last 3rd 2nd 1st
+4095 1st 2nd 3rd Last 3rd 2nd 1st
+4096 1st 2nd 3rd Last 3rd 2nd 1st
+4097 1st 2nd 3rd Last 3rd 2nd 1st
+4098 1st 2nd 3rd Last 3rd 2nd 1st
+4099 1st 2nd 3rd Last 3rd 2nd 1st
+4100 1st 2nd 3rd Last 3rd 2nd 1st
+4101 1st 2nd 3rd Last 3rd 2nd 1st
+4102 1st 2nd 3rd Last 3rd 2nd 1st
+4103 1st 2nd 3rd Last 3rd 2nd 1st
+4104 1st 2nd 3rd Last 3rd 2nd 1st
+4105 1st 2nd 3rd Last 3rd 2nd 1st
+4106 1st 2nd 3rd Last 3rd 2nd 1st
+4107 1st 2nd 3rd Last 3rd 2nd 1st
+4108 1st 2nd 3rd Last 3rd 2nd 1st
+4109 1st 2nd 3rd Last 3rd 2nd 1st
+4110 1st 2nd 3rd Last 3rd 2nd 1st
+4111 1st 2nd 3rd Last 3rd 2nd 1st
+4112 1st 2nd 3rd Last 3rd 2nd 1st
+4113 1st 2nd 3rd Last 3rd 2nd 1st
+4114 1st 2nd 3rd Last 3rd 2nd 1st
+4115 1st 2nd 3rd Last 3rd 2nd 1st
+4116 1st 2nd 3rd Last 3rd 2nd 1st
+4117 1st 2nd 3rd Last 3rd 2nd 1st
+4118 1st 2nd 3rd Last 3rd 2nd 1st
+4119 1st 2nd 3rd Last 3rd 2nd 1st
+4120 1st 2nd 3rd Last 3rd 2nd 1st
+4121 1st 2nd 3rd Last 3rd 2nd 1st
+4122 1st 2nd 3rd Last 3rd 2nd 1st
+4123 1st 2nd 3rd Last 3rd 2nd 1st
+4124 1st 2nd 3rd Last 3rd 2nd 1st
+4125 1st 2nd 3rd Last 3rd 2nd 1st
+4126 1st 2nd 3rd Last 3rd 2nd 1st
+4127 1st 2nd 3rd Last 3rd 2nd 1st
+4128 1st 2nd 3rd Last 3rd 2nd 1st
+4129 1st 2nd 3rd Last 3rd 2nd 1st
+4130 1st 2nd 3rd Last 3rd 2nd 1st
+4131 1st 2nd 3rd Last 3rd 2nd 1st
+4132 1st 2nd 3rd Last 3rd 2nd 1st
+4133 1st 2nd 3rd Last 3rd 2nd 1st
+4134 1st 2nd 3rd Last 3rd 2nd 1st
+4135 1st 2nd 3rd Last 3rd 2nd 1st
+4136 1st 2nd 3rd Last 3rd 2nd 1st
+4137 1st 2nd 3rd Last 3rd 2nd 1st
+4138 1st 2nd 3rd Last 3rd 2nd 1st
+4139 1st 2nd 3rd Last 3rd 2nd 1st
+4140 1st 2nd 3rd Last 3rd 2nd 1st
+4141 1st 2nd 3rd Last 3rd 2nd 1st
+4142 1st 2nd 3rd Last 3rd 2nd 1st
+4143 1st 2nd 3rd Last 3rd 2nd 1st
+4144 1st 2nd 3rd Last 3rd 2nd 1st
+4145 1st 2nd 3rd Last 3rd 2nd 1st
+4146 1st 2nd 3rd Last 3rd 2nd 1st
+4147 1st 2nd 3rd Last 3rd 2nd 1st
+4148 1st 2nd 3rd Last 3rd 2nd 1st
+4149 1st 2nd 3rd Last 3rd 2nd 1st
+4150 1st 2nd 3rd Last 3rd 2nd 1st
+4151 1st 2nd 3rd Last 3rd 2nd 1st
+4152 1st 2nd 3rd Last 3rd 2nd 1st
+4153 1st 2nd 3rd Last 3rd 2nd 1st
+4154 1st 2nd 3rd Last 3rd 2nd 1st
+4155 1st 2nd 3rd Last 3rd 2nd 1st
+4156 1st 2nd 3rd Last 3rd 2nd 1st
+4157 1st 2nd 3rd Last 3rd 2nd 1st
+4158 1st 2nd 3rd Last 3rd 2nd 1st
+4159 1st 2nd 3rd Last 3rd 2nd 1st
+4160 1st 2nd 3rd Last 3rd 2nd 1st
+4161 1st 2nd 3rd Last 3rd 2nd 1st
+4162 1st 2nd 3rd Last 3rd 2nd 1st
+4163 1st 2nd 3rd Last 3rd 2nd 1st
+4164 1st 2nd 3rd Last 3rd 2nd 1st
+4165 1st 2nd 3rd Last 3rd 2nd 1st
+4166 1st 2nd 3rd Last 3rd 2nd 1st
+4167 1st 2nd 3rd Last 3rd 2nd 1st
+4168 1st 2nd 3rd Last 3rd 2nd 1st
+4169 1st 2nd 3rd Last 3rd 2nd 1st
+4170 1st 2nd 3rd Last 3rd 2nd 1st
+4171 1st 2nd 3rd Last 3rd 2nd 1st
+4172 1st 2nd 3rd Last 3rd 2nd 1st
+4173 1st 2nd 3rd Last 3rd 2nd 1st
+4174 1st 2nd 3rd Last 3rd 2nd 1st
+4175 1st 2nd 3rd Last 3rd 2nd 1st
+4176 1st 2nd 3rd Last 3rd 2nd 1st
+4177 1st 2nd 3rd Last 3rd 2nd 1st
+4178 1st 2nd 3rd Last 3rd 2nd 1st
+4179 1st 2nd 3rd Last 3rd 2nd 1st
+4180 1st 2nd 3rd Last 3rd 2nd 1st
+4181 1st 2nd 3rd Last 3rd 2nd 1st
+4182 1st 2nd 3rd Last 3rd 2nd 1st
+4183 1st 2nd 3rd Last 3rd 2nd 1st
+4184 1st 2nd 3rd Last 3rd 2nd 1st
+4185 1st 2nd 3rd Last 3rd 2nd 1st
+4186 1st 2nd 3rd Last 3rd 2nd 1st
+4187 1st 2nd 3rd Last 3rd 2nd 1st
+4188 1st 2nd 3rd Last 3rd 2nd 1st
+4189 1st 2nd 3rd Last 3rd 2nd 1st
+4190 1st 2nd 3rd Last 3rd 2nd 1st
+4191 1st 2nd 3rd Last 3rd 2nd 1st
+4192 1st 2nd 3rd Last 3rd 2nd 1st
+4193 1st 2nd 3rd Last 3rd 2nd 1st
+4194 1st 2nd 3rd Last 3rd 2nd 1st
+4195 1st 2nd 3rd Last 3rd 2nd 1st
+4196 1st 2nd 3rd Last 3rd 2nd 1st
+4197 1st 2nd 3rd Last 3rd 2nd 1st
+4198 1st 2nd 3rd Last 3rd 2nd 1st
+4199 1st 2nd 3rd Last 3rd 2nd 1st
+4200 1st 2nd 3rd Last 3rd 2nd 1st
+4201 1st 2nd 3rd Last 3rd 2nd 1st
+4202 1st 2nd 3rd Last 3rd 2nd 1st
+4203 1st 2nd 3rd Last 3rd 2nd 1st
+4204 1st 2nd 3rd Last 3rd 2nd 1st
+4205 1st 2nd 3rd Last 3rd 2nd 1st
+4206 1st 2nd 3rd Last 3rd 2nd 1st
+4207 1st 2nd 3rd Last 3rd 2nd 1st
+4208 1st 2nd 3rd Last 3rd 2nd 1st
+4209 1st 2nd 3rd Last 3rd 2nd 1st
+4210 1st 2nd 3rd Last 3rd 2nd 1st
+4211 1st 2nd 3rd Last 3rd 2nd 1st
+4212 1st 2nd 3rd Last 3rd 2nd 1st
+4213 1st 2nd 3rd Last 3rd 2nd 1st
+4214 1st 2nd 3rd Last 3rd 2nd 1st
+4215 1st 2nd 3rd Last 3rd 2nd 1st
+4216 1st 2nd 3rd Last 3rd 2nd 1st
+4217 1st 2nd 3rd Last 3rd 2nd 1st
+4218 1st 2nd 3rd Last 3rd 2nd 1st
+4219 1st 2nd 3rd Last 3rd 2nd 1st
+4220 1st 2nd 3rd Last 3rd 2nd 1st
+4221 1st 2nd 3rd Last 3rd 2nd 1st
+4222 1st 2nd 3rd Last 3rd 2nd 1st
+4223 1st 2nd 3rd Last 3rd 2nd 1st
+4224 1st 2nd 3rd Last 3rd 2nd 1st
+4225 1st 2nd 3rd Last 3rd 2nd 1st
+4226 1st 2nd 3rd Last 3rd 2nd 1st
+4227 1st 2nd 3rd Last 3rd 2nd 1st
+4228 1st 2nd 3rd Last 3rd 2nd 1st
+4229 1st 2nd 3rd Last 3rd 2nd 1st
+4230 1st 2nd 3rd Last 3rd 2nd 1st
+4231 1st 2nd 3rd Last 3rd 2nd 1st
+4232 1st 2nd 3rd Last 3rd 2nd 1st
+4233 1st 2nd 3rd Last 3rd 2nd 1st
+4234 1st 2nd 3rd Last 3rd 2nd 1st
+4235 1st 2nd 3rd Last 3rd 2nd 1st
+4236 1st 2nd 3rd Last 3rd 2nd 1st
+4237 1st 2nd 3rd Last 3rd 2nd 1st
+4238 1st 2nd 3rd Last 3rd 2nd 1st
+4239 1st 2nd 3rd Last 3rd 2nd 1st
+4240 1st 2nd 3rd Last 3rd 2nd 1st
+4241 1st 2nd 3rd Last 3rd 2nd 1st
+4242 1st 2nd 3rd Last 3rd 2nd 1st
+4243 1st 2nd 3rd Last 3rd 2nd 1st
+4244 1st 2nd 3rd Last 3rd 2nd 1st
+4245 1st 2nd 3rd Last 3rd 2nd 1st
+4246 1st 2nd 3rd Last 3rd 2nd 1st
+4247 1st 2nd 3rd Last 3rd 2nd 1st
+4248 1st 2nd 3rd Last 3rd 2nd 1st
+4249 1st 2nd 3rd Last 3rd 2nd 1st
+4250 1st 2nd 3rd Last 3rd 2nd 1st
+4251 1st 2nd 3rd Last 3rd 2nd 1st
+4252 1st 2nd 3rd Last 3rd 2nd 1st
+4253 1st 2nd 3rd Last 3rd 2nd 1st
+4254 1st 2nd 3rd Last 3rd 2nd 1st
+4255 1st 2nd 3rd Last 3rd 2nd 1st
+4256 1st 2nd 3rd Last 3rd 2nd 1st
+4257 1st 2nd 3rd Last 3rd 2nd 1st
+4258 1st 2nd 3rd Last 3rd 2nd 1st
+4259 1st 2nd 3rd Last 3rd 2nd 1st
+4260 1st 2nd 3rd Last 3rd 2nd 1st
+4261 1st 2nd 3rd Last 3rd 2nd 1st
+4262 1st 2nd 3rd Last 3rd 2nd 1st
+4263 1st 2nd 3rd Last 3rd 2nd 1st
+4264 1st 2nd 3rd Last 3rd 2nd 1st
+4265 1st 2nd 3rd Last 3rd 2nd 1st
+4266 1st 2nd 3rd Last 3rd 2nd 1st
+4267 1st 2nd 3rd Last 3rd 2nd 1st
+4268 1st 2nd 3rd Last 3rd 2nd 1st
+4269 1st 2nd 3rd Last 3rd 2nd 1st
+4270 1st 2nd 3rd Last 3rd 2nd 1st
+4271 1st 2nd 3rd Last 3rd 2nd 1st
+4272 1st 2nd 3rd Last 3rd 2nd 1st
+4273 1st 2nd 3rd Last 3rd 2nd 1st
+4274 1st 2nd 3rd Last 3rd 2nd 1st
+4275 1st 2nd 3rd Last 3rd 2nd 1st
+4276 1st 2nd 3rd Last 3rd 2nd 1st
+4277 1st 2nd 3rd Last 3rd 2nd 1st
+4278 1st 2nd 3rd Last 3rd 2nd 1st
+4279 1st 2nd 3rd Last 3rd 2nd 1st
+4280 1st 2nd 3rd Last 3rd 2nd 1st
+4281 1st 2nd 3rd Last 3rd 2nd 1st
+4282 1st 2nd 3rd Last 3rd 2nd 1st
+4283 1st 2nd 3rd Last 3rd 2nd 1st
+4284 1st 2nd 3rd Last 3rd 2nd 1st
+4285 1st 2nd 3rd Last 3rd 2nd 1st
+4286 1st 2nd 3rd Last 3rd 2nd 1st
+4287 1st 2nd 3rd Last 3rd 2nd 1st
+4288 1st 2nd 3rd Last 3rd 2nd 1st
+4289 1st 2nd 3rd Last 3rd 2nd 1st
+4290 1st 2nd 3rd Last 3rd 2nd 1st
+4291 1st 2nd 3rd Last 3rd 2nd 1st
+4292 1st 2nd 3rd Last 3rd 2nd 1st
+4293 1st 2nd 3rd Last 3rd 2nd 1st
+4294 1st 2nd 3rd Last 3rd 2nd 1st
+4295 1st 2nd 3rd Last 3rd 2nd 1st
+4296 1st 2nd 3rd Last 3rd 2nd 1st
+4297 1st 2nd 3rd Last 3rd 2nd 1st
+4298 1st 2nd 3rd Last 3rd 2nd 1st
+4299 1st 2nd 3rd Last 3rd 2nd 1st
+4300 1st 2nd 3rd Last 3rd 2nd 1st
+4301 1st 2nd 3rd Last 3rd 2nd 1st
+4302 1st 2nd 3rd Last 3rd 2nd 1st
+4303 1st 2nd 3rd Last 3rd 2nd 1st
+4304 1st 2nd 3rd Last 3rd 2nd 1st
+4305 1st 2nd 3rd Last 3rd 2nd 1st
+4306 1st 2nd 3rd Last 3rd 2nd 1st
+4307 1st 2nd 3rd Last 3rd 2nd 1st
+4308 1st 2nd 3rd Last 3rd 2nd 1st
+4309 1st 2nd 3rd Last 3rd 2nd 1st
+4310 1st 2nd 3rd Last 3rd 2nd 1st
+4311 1st 2nd 3rd Last 3rd 2nd 1st
+4312 1st 2nd 3rd Last 3rd 2nd 1st
+4313 1st 2nd 3rd Last 3rd 2nd 1st
+4314 1st 2nd 3rd Last 3rd 2nd 1st
+4315 1st 2nd 3rd Last 3rd 2nd 1st
+4316 1st 2nd 3rd Last 3rd 2nd 1st
+4317 1st 2nd 3rd Last 3rd 2nd 1st
+4318 1st 2nd 3rd Last 3rd 2nd 1st
+4319 1st 2nd 3rd Last 3rd 2nd 1st
+4320 1st 2nd 3rd Last 3rd 2nd 1st
+4321 1st 2nd 3rd Last 3rd 2nd 1st
+4322 1st 2nd 3rd Last 3rd 2nd 1st
+4323 1st 2nd 3rd Last 3rd 2nd 1st
+4324 1st 2nd 3rd Last 3rd 2nd 1st
+4325 1st 2nd 3rd Last 3rd 2nd 1st
+4326 1st 2nd 3rd Last 3rd 2nd 1st
+4327 1st 2nd 3rd Last 3rd 2nd 1st
+4328 1st 2nd 3rd Last 3rd 2nd 1st
+4329 1st 2nd 3rd Last 3rd 2nd 1st
+4330 1st 2nd 3rd Last 3rd 2nd 1st
+4331 1st 2nd 3rd Last 3rd 2nd 1st
+4332 1st 2nd 3rd Last 3rd 2nd 1st
+4333 1st 2nd 3rd Last 3rd 2nd 1st
+4334 1st 2nd 3rd Last 3rd 2nd 1st
+4335 1st 2nd 3rd Last 3rd 2nd 1st
+4336 1st 2nd 3rd Last 3rd 2nd 1st
+4337 1st 2nd 3rd Last 3rd 2nd 1st
+4338 1st 2nd 3rd Last 3rd 2nd 1st
+4339 1st 2nd 3rd Last 3rd 2nd 1st
+4340 1st 2nd 3rd Last 3rd 2nd 1st
+4341 1st 2nd 3rd Last 3rd 2nd 1st
+4342 1st 2nd 3rd Last 3rd 2nd 1st
+4343 1st 2nd 3rd Last 3rd 2nd 1st
+4344 1st 2nd 3rd Last 3rd 2nd 1st
+4345 1st 2nd 3rd Last 3rd 2nd 1st
+4346 1st 2nd 3rd Last 3rd 2nd 1st
+4347 1st 2nd 3rd Last 3rd 2nd 1st
+4348 1st 2nd 3rd Last 3rd 2nd 1st
+4349 1st 2nd 3rd Last 3rd 2nd 1st
+4350 1st 2nd 3rd Last 3rd 2nd 1st
+4351 1st 2nd 3rd Last 3rd 2nd 1st
+4352 1st 2nd 3rd Last 3rd 2nd 1st
+4353 1st 2nd 3rd Last 3rd 2nd 1st
+4354 1st 2nd 3rd Last 3rd 2nd 1st
+4355 1st 2nd 3rd Last 3rd 2nd 1st
+4356 1st 2nd 3rd Last 3rd 2nd 1st
+4357 1st 2nd 3rd Last 3rd 2nd 1st
+4358 1st 2nd 3rd Last 3rd 2nd 1st
+4359 1st 2nd 3rd Last 3rd 2nd 1st
+4360 1st 2nd 3rd Last 3rd 2nd 1st
+4361 1st 2nd 3rd Last 3rd 2nd 1st
+4362 1st 2nd 3rd Last 3rd 2nd 1st
+4363 1st 2nd 3rd Last 3rd 2nd 1st
+4364 1st 2nd 3rd Last 3rd 2nd 1st
+4365 1st 2nd 3rd Last 3rd 2nd 1st
+4366 1st 2nd 3rd Last 3rd 2nd 1st
+4367 1st 2nd 3rd Last 3rd 2nd 1st
+4368 1st 2nd 3rd Last 3rd 2nd 1st
+4369 1st 2nd 3rd Last 3rd 2nd 1st
+4370 1st 2nd 3rd Last 3rd 2nd 1st
+4371 1st 2nd 3rd Last 3rd 2nd 1st
+4372 1st 2nd 3rd Last 3rd 2nd 1st
+4373 1st 2nd 3rd Last 3rd 2nd 1st
+4374 1st 2nd 3rd Last 3rd 2nd 1st
+4375 1st 2nd 3rd Last 3rd 2nd 1st
+4376 1st 2nd 3rd Last 3rd 2nd 1st
+4377 1st 2nd 3rd Last 3rd 2nd 1st
+4378 1st 2nd 3rd Last 3rd 2nd 1st
+4379 1st 2nd 3rd Last 3rd 2nd 1st
+4380 1st 2nd 3rd Last 3rd 2nd 1st
+4381 1st 2nd 3rd Last 3rd 2nd 1st
+4382 1st 2nd 3rd Last 3rd 2nd 1st
+4383 1st 2nd 3rd Last 3rd 2nd 1st
+4384 1st 2nd 3rd Last 3rd 2nd 1st
+4385 1st 2nd 3rd Last 3rd 2nd 1st
+4386 1st 2nd 3rd Last 3rd 2nd 1st
+4387 1st 2nd 3rd Last 3rd 2nd 1st
+4388 1st 2nd 3rd Last 3rd 2nd 1st
+4389 1st 2nd 3rd Last 3rd 2nd 1st
+4390 1st 2nd 3rd Last 3rd 2nd 1st
+4391 1st 2nd 3rd Last 3rd 2nd 1st
+4392 1st 2nd 3rd Last 3rd 2nd 1st
+4393 1st 2nd 3rd Last 3rd 2nd 1st
+4394 1st 2nd 3rd Last 3rd 2nd 1st
+4395 1st 2nd 3rd Last 3rd 2nd 1st
+4396 1st 2nd 3rd Last 3rd 2nd 1st
+4397 1st 2nd 3rd Last 3rd 2nd 1st
+4398 1st 2nd 3rd Last 3rd 2nd 1st
+4399 1st 2nd 3rd Last 3rd 2nd 1st
+4400 1st 2nd 3rd Last 3rd 2nd 1st
+4401 1st 2nd 3rd Last 3rd 2nd 1st
+4402 1st 2nd 3rd Last 3rd 2nd 1st
+4403 1st 2nd 3rd Last 3rd 2nd 1st
+4404 1st 2nd 3rd Last 3rd 2nd 1st
+4405 1st 2nd 3rd Last 3rd 2nd 1st
+4406 1st 2nd 3rd Last 3rd 2nd 1st
+4407 1st 2nd 3rd Last 3rd 2nd 1st
+4408 1st 2nd 3rd Last 3rd 2nd 1st
+4409 1st 2nd 3rd Last 3rd 2nd 1st
+4410 1st 2nd 3rd Last 3rd 2nd 1st
+4411 1st 2nd 3rd Last 3rd 2nd 1st
+4412 1st 2nd 3rd Last 3rd 2nd 1st
+4413 1st 2nd 3rd Last 3rd 2nd 1st
+4414 1st 2nd 3rd Last 3rd 2nd 1st
+4415 1st 2nd 3rd Last 3rd 2nd 1st
+4416 1st 2nd 3rd Last 3rd 2nd 1st
+4417 1st 2nd 3rd Last 3rd 2nd 1st
+4418 1st 2nd 3rd Last 3rd 2nd 1st
+4419 1st 2nd 3rd Last 3rd 2nd 1st
+4420 1st 2nd 3rd Last 3rd 2nd 1st
+4421 1st 2nd 3rd Last 3rd 2nd 1st
+4422 1st 2nd 3rd Last 3rd 2nd 1st
+4423 1st 2nd 3rd Last 3rd 2nd 1st
+4424 1st 2nd 3rd Last 3rd 2nd 1st
+4425 1st 2nd 3rd Last 3rd 2nd 1st
+4426 1st 2nd 3rd Last 3rd 2nd 1st
+4427 1st 2nd 3rd Last 3rd 2nd 1st
+4428 1st 2nd 3rd Last 3rd 2nd 1st
+4429 1st 2nd 3rd Last 3rd 2nd 1st
+4430 1st 2nd 3rd Last 3rd 2nd 1st
+4431 1st 2nd 3rd Last 3rd 2nd 1st
+4432 1st 2nd 3rd Last 3rd 2nd 1st
+4433 1st 2nd 3rd Last 3rd 2nd 1st
+4434 1st 2nd 3rd Last 3rd 2nd 1st
+4435 1st 2nd 3rd Last 3rd 2nd 1st
+4436 1st 2nd 3rd Last 3rd 2nd 1st
+4437 1st 2nd 3rd Last 3rd 2nd 1st
+4438 1st 2nd 3rd Last 3rd 2nd 1st
+4439 1st 2nd 3rd Last 3rd 2nd 1st
+4440 1st 2nd 3rd Last 3rd 2nd 1st
+4441 1st 2nd 3rd Last 3rd 2nd 1st
+4442 1st 2nd 3rd Last 3rd 2nd 1st
+4443 1st 2nd 3rd Last 3rd 2nd 1st
+4444 1st 2nd 3rd Last 3rd 2nd 1st
+4445 1st 2nd 3rd Last 3rd 2nd 1st
+4446 1st 2nd 3rd Last 3rd 2nd 1st
+4447 1st 2nd 3rd Last 3rd 2nd 1st
+4448 1st 2nd 3rd Last 3rd 2nd 1st
+4449 1st 2nd 3rd Last 3rd 2nd 1st
+4450 1st 2nd 3rd Last 3rd 2nd 1st
+4451 1st 2nd 3rd Last 3rd 2nd 1st
+4452 1st 2nd 3rd Last 3rd 2nd 1st
+4453 1st 2nd 3rd Last 3rd 2nd 1st
+4454 1st 2nd 3rd Last 3rd 2nd 1st
+4455 1st 2nd 3rd Last 3rd 2nd 1st
+4456 1st 2nd 3rd Last 3rd 2nd 1st
+4457 1st 2nd 3rd Last 3rd 2nd 1st
+4458 1st 2nd 3rd Last 3rd 2nd 1st
+4459 1st 2nd 3rd Last 3rd 2nd 1st
+4460 1st 2nd 3rd Last 3rd 2nd 1st
+4461 1st 2nd 3rd Last 3rd 2nd 1st
+4462 1st 2nd 3rd Last 3rd 2nd 1st
+4463 1st 2nd 3rd Last 3rd 2nd 1st
+4464 1st 2nd 3rd Last 3rd 2nd 1st
+4465 1st 2nd 3rd Last 3rd 2nd 1st
+4466 1st 2nd 3rd Last 3rd 2nd 1st
+4467 1st 2nd 3rd Last 3rd 2nd 1st
+4468 1st 2nd 3rd Last 3rd 2nd 1st
+4469 1st 2nd 3rd Last 3rd 2nd 1st
+4470 1st 2nd 3rd Last 3rd 2nd 1st
+4471 1st 2nd 3rd Last 3rd 2nd 1st
+4472 1st 2nd 3rd Last 3rd 2nd 1st
+4473 1st 2nd 3rd Last 3rd 2nd 1st
+4474 1st 2nd 3rd Last 3rd 2nd 1st
+4475 1st 2nd 3rd Last 3rd 2nd 1st
+4476 1st 2nd 3rd Last 3rd 2nd 1st
+4477 1st 2nd 3rd Last 3rd 2nd 1st
+4478 1st 2nd 3rd Last 3rd 2nd 1st
+4479 1st 2nd 3rd Last 3rd 2nd 1st
+4480 1st 2nd 3rd Last 3rd 2nd 1st
+4481 1st 2nd 3rd Last 3rd 2nd 1st
+4482 1st 2nd 3rd Last 3rd 2nd 1st
+4483 1st 2nd 3rd Last 3rd 2nd 1st
+4484 1st 2nd 3rd Last 3rd 2nd 1st
+4485 1st 2nd 3rd Last 3rd 2nd 1st
+4486 1st 2nd 3rd Last 3rd 2nd 1st
+4487 1st 2nd 3rd Last 3rd 2nd 1st
+4488 1st 2nd 3rd Last 3rd 2nd 1st
+4489 1st 2nd 3rd Last 3rd 2nd 1st
+4490 1st 2nd 3rd Last 3rd 2nd 1st
+4491 1st 2nd 3rd Last 3rd 2nd 1st
+4492 1st 2nd 3rd Last 3rd 2nd 1st
+4493 1st 2nd 3rd Last 3rd 2nd 1st
+4494 1st 2nd 3rd Last 3rd 2nd 1st
+4495 1st 2nd 3rd Last 3rd 2nd 1st
+4496 1st 2nd 3rd Last 3rd 2nd 1st
+4497 1st 2nd 3rd Last 3rd 2nd 1st
+4498 1st 2nd 3rd Last 3rd 2nd 1st
+4499 1st 2nd 3rd Last 3rd 2nd 1st
+4500 1st 2nd 3rd Last 3rd 2nd 1st
+4501 1st 2nd 3rd Last 3rd 2nd 1st
+4502 1st 2nd 3rd Last 3rd 2nd 1st
+4503 1st 2nd 3rd Last 3rd 2nd 1st
+4504 1st 2nd 3rd Last 3rd 2nd 1st
+4505 1st 2nd 3rd Last 3rd 2nd 1st
+4506 1st 2nd 3rd Last 3rd 2nd 1st
+4507 1st 2nd 3rd Last 3rd 2nd 1st
+4508 1st 2nd 3rd Last 3rd 2nd 1st
+4509 1st 2nd 3rd Last 3rd 2nd 1st
+4510 1st 2nd 3rd Last 3rd 2nd 1st
+4511 1st 2nd 3rd Last 3rd 2nd 1st
+4512 1st 2nd 3rd Last 3rd 2nd 1st
+4513 1st 2nd 3rd Last 3rd 2nd 1st
+4514 1st 2nd 3rd Last 3rd 2nd 1st
+4515 1st 2nd 3rd Last 3rd 2nd 1st
+4516 1st 2nd 3rd Last 3rd 2nd 1st
+4517 1st 2nd 3rd Last 3rd 2nd 1st
+4518 1st 2nd 3rd Last 3rd 2nd 1st
+4519 1st 2nd 3rd Last 3rd 2nd 1st
+4520 1st 2nd 3rd Last 3rd 2nd 1st
+4521 1st 2nd 3rd Last 3rd 2nd 1st
+4522 1st 2nd 3rd Last 3rd 2nd 1st
+4523 1st 2nd 3rd Last 3rd 2nd 1st
+4524 1st 2nd 3rd Last 3rd 2nd 1st
+4525 1st 2nd 3rd Last 3rd 2nd 1st
+4526 1st 2nd 3rd Last 3rd 2nd 1st
+4527 1st 2nd 3rd Last 3rd 2nd 1st
+4528 1st 2nd 3rd Last 3rd 2nd 1st
+4529 1st 2nd 3rd Last 3rd 2nd 1st
+4530 1st 2nd 3rd Last 3rd 2nd 1st
+4531 1st 2nd 3rd Last 3rd 2nd 1st
+4532 1st 2nd 3rd Last 3rd 2nd 1st
+4533 1st 2nd 3rd Last 3rd 2nd 1st
+4534 1st 2nd 3rd Last 3rd 2nd 1st
+4535 1st 2nd 3rd Last 3rd 2nd 1st
+4536 1st 2nd 3rd Last 3rd 2nd 1st
+4537 1st 2nd 3rd Last 3rd 2nd 1st
+4538 1st 2nd 3rd Last 3rd 2nd 1st
+4539 1st 2nd 3rd Last 3rd 2nd 1st
+4540 1st 2nd 3rd Last 3rd 2nd 1st
+4541 1st 2nd 3rd Last 3rd 2nd 1st
+4542 1st 2nd 3rd Last 3rd 2nd 1st
+4543 1st 2nd 3rd Last 3rd 2nd 1st
+4544 1st 2nd 3rd Last 3rd 2nd 1st
+4545 1st 2nd 3rd Last 3rd 2nd 1st
+4546 1st 2nd 3rd Last 3rd 2nd 1st
+4547 1st 2nd 3rd Last 3rd 2nd 1st
+4548 1st 2nd 3rd Last 3rd 2nd 1st
+4549 1st 2nd 3rd Last 3rd 2nd 1st
+4550 1st 2nd 3rd Last 3rd 2nd 1st
+4551 1st 2nd 3rd Last 3rd 2nd 1st
+4552 1st 2nd 3rd Last 3rd 2nd 1st
+4553 1st 2nd 3rd Last 3rd 2nd 1st
+4554 1st 2nd 3rd Last 3rd 2nd 1st
+4555 1st 2nd 3rd Last 3rd 2nd 1st
+4556 1st 2nd 3rd Last 3rd 2nd 1st
+4557 1st 2nd 3rd Last 3rd 2nd 1st
+4558 1st 2nd 3rd Last 3rd 2nd 1st
+4559 1st 2nd 3rd Last 3rd 2nd 1st
+4560 1st 2nd 3rd Last 3rd 2nd 1st
+4561 1st 2nd 3rd Last 3rd 2nd 1st
+4562 1st 2nd 3rd Last 3rd 2nd 1st
+4563 1st 2nd 3rd Last 3rd 2nd 1st
+4564 1st 2nd 3rd Last 3rd 2nd 1st
+4565 1st 2nd 3rd Last 3rd 2nd 1st
+4566 1st 2nd 3rd Last 3rd 2nd 1st
+4567 1st 2nd 3rd Last 3rd 2nd 1st
+4568 1st 2nd 3rd Last 3rd 2nd 1st
+4569 1st 2nd 3rd Last 3rd 2nd 1st
+4570 1st 2nd 3rd Last 3rd 2nd 1st
+4571 1st 2nd 3rd Last 3rd 2nd 1st
+4572 1st 2nd 3rd Last 3rd 2nd 1st
+4573 1st 2nd 3rd Last 3rd 2nd 1st
+4574 1st 2nd 3rd Last 3rd 2nd 1st
+4575 1st 2nd 3rd Last 3rd 2nd 1st
+4576 1st 2nd 3rd Last 3rd 2nd 1st
+4577 1st 2nd 3rd Last 3rd 2nd 1st
+4578 1st 2nd 3rd Last 3rd 2nd 1st
+4579 1st 2nd 3rd Last 3rd 2nd 1st
+4580 1st 2nd 3rd Last 3rd 2nd 1st
+4581 1st 2nd 3rd Last 3rd 2nd 1st
+4582 1st 2nd 3rd Last 3rd 2nd 1st
+4583 1st 2nd 3rd Last 3rd 2nd 1st
+4584 1st 2nd 3rd Last 3rd 2nd 1st
+4585 1st 2nd 3rd Last 3rd 2nd 1st
+4586 1st 2nd 3rd Last 3rd 2nd 1st
+4587 1st 2nd 3rd Last 3rd 2nd 1st
+4588 1st 2nd 3rd Last 3rd 2nd 1st
+4589 1st 2nd 3rd Last 3rd 2nd 1st
+4590 1st 2nd 3rd Last 3rd 2nd 1st
+4591 1st 2nd 3rd Last 3rd 2nd 1st
+4592 1st 2nd 3rd Last 3rd 2nd 1st
+4593 1st 2nd 3rd Last 3rd 2nd 1st
+4594 1st 2nd 3rd Last 3rd 2nd 1st
+4595 1st 2nd 3rd Last 3rd 2nd 1st
+4596 1st 2nd 3rd Last 3rd 2nd 1st
+4597 1st 2nd 3rd Last 3rd 2nd 1st
+4598 1st 2nd 3rd Last 3rd 2nd 1st
+4599 1st 2nd 3rd Last 3rd 2nd 1st
+4600 1st 2nd 3rd Last 3rd 2nd 1st
+4601 1st 2nd 3rd Last 3rd 2nd 1st
+4602 1st 2nd 3rd Last 3rd 2nd 1st
+4603 1st 2nd 3rd Last 3rd 2nd 1st
+4604 1st 2nd 3rd Last 3rd 2nd 1st
+4605 1st 2nd 3rd Last 3rd 2nd 1st
+4606 1st 2nd 3rd Last 3rd 2nd 1st
+4607 1st 2nd 3rd Last 3rd 2nd 1st
+4608 1st 2nd 3rd Last 3rd 2nd 1st
+4609 1st 2nd 3rd Last 3rd 2nd 1st
+4610 1st 2nd 3rd Last 3rd 2nd 1st
+4611 1st 2nd 3rd Last 3rd 2nd 1st
+4612 1st 2nd 3rd Last 3rd 2nd 1st
+4613 1st 2nd 3rd Last 3rd 2nd 1st
+4614 1st 2nd 3rd Last 3rd 2nd 1st
+4615 1st 2nd 3rd Last 3rd 2nd 1st
+4616 1st 2nd 3rd Last 3rd 2nd 1st
+4617 1st 2nd 3rd Last 3rd 2nd 1st
+4618 1st 2nd 3rd Last 3rd 2nd 1st
+4619 1st 2nd 3rd Last 3rd 2nd 1st
+4620 1st 2nd 3rd Last 3rd 2nd 1st
+4621 1st 2nd 3rd Last 3rd 2nd 1st
+4622 1st 2nd 3rd Last 3rd 2nd 1st
+4623 1st 2nd 3rd Last 3rd 2nd 1st
+4624 1st 2nd 3rd Last 3rd 2nd 1st
+4625 1st 2nd 3rd Last 3rd 2nd 1st
+4626 1st 2nd 3rd Last 3rd 2nd 1st
+4627 1st 2nd 3rd Last 3rd 2nd 1st
+4628 1st 2nd 3rd Last 3rd 2nd 1st
+4629 1st 2nd 3rd Last 3rd 2nd 1st
+4630 1st 2nd 3rd Last 3rd 2nd 1st
+4631 1st 2nd 3rd Last 3rd 2nd 1st
+4632 1st 2nd 3rd Last 3rd 2nd 1st
+4633 1st 2nd 3rd Last 3rd 2nd 1st
+4634 1st 2nd 3rd Last 3rd 2nd 1st
+4635 1st 2nd 3rd Last 3rd 2nd 1st
+4636 1st 2nd 3rd Last 3rd 2nd 1st
+4637 1st 2nd 3rd Last 3rd 2nd 1st
+4638 1st 2nd 3rd Last 3rd 2nd 1st
+4639 1st 2nd 3rd Last 3rd 2nd 1st
+4640 1st 2nd 3rd Last 3rd 2nd 1st
+4641 1st 2nd 3rd Last 3rd 2nd 1st
+4642 1st 2nd 3rd Last 3rd 2nd 1st
+4643 1st 2nd 3rd Last 3rd 2nd 1st
+4644 1st 2nd 3rd Last 3rd 2nd 1st
+4645 1st 2nd 3rd Last 3rd 2nd 1st
+4646 1st 2nd 3rd Last 3rd 2nd 1st
+4647 1st 2nd 3rd Last 3rd 2nd 1st
+4648 1st 2nd 3rd Last 3rd 2nd 1st
+4649 1st 2nd 3rd Last 3rd 2nd 1st
+4650 1st 2nd 3rd Last 3rd 2nd 1st
+4651 1st 2nd 3rd Last 3rd 2nd 1st
+4652 1st 2nd 3rd Last 3rd 2nd 1st
+4653 1st 2nd 3rd Last 3rd 2nd 1st
+4654 1st 2nd 3rd Last 3rd 2nd 1st
+4655 1st 2nd 3rd Last 3rd 2nd 1st
+4656 1st 2nd 3rd Last 3rd 2nd 1st
+4657 1st 2nd 3rd Last 3rd 2nd 1st
+4658 1st 2nd 3rd Last 3rd 2nd 1st
+4659 1st 2nd 3rd Last 3rd 2nd 1st
+4660 1st 2nd 3rd Last 3rd 2nd 1st
+4661 1st 2nd 3rd Last 3rd 2nd 1st
+4662 1st 2nd 3rd Last 3rd 2nd 1st
+4663 1st 2nd 3rd Last 3rd 2nd 1st
+4664 1st 2nd 3rd Last 3rd 2nd 1st
+4665 1st 2nd 3rd Last 3rd 2nd 1st
+4666 1st 2nd 3rd Last 3rd 2nd 1st
+4667 1st 2nd 3rd Last 3rd 2nd 1st
+4668 1st 2nd 3rd Last 3rd 2nd 1st
+4669 1st 2nd 3rd Last 3rd 2nd 1st
+4670 1st 2nd 3rd Last 3rd 2nd 1st
+4671 1st 2nd 3rd Last 3rd 2nd 1st
+4672 1st 2nd 3rd Last 3rd 2nd 1st
+4673 1st 2nd 3rd Last 3rd 2nd 1st
+4674 1st 2nd 3rd Last 3rd 2nd 1st
+4675 1st 2nd 3rd Last 3rd 2nd 1st
+4676 1st 2nd 3rd Last 3rd 2nd 1st
+4677 1st 2nd 3rd Last 3rd 2nd 1st
+4678 1st 2nd 3rd Last 3rd 2nd 1st
+4679 1st 2nd 3rd Last 3rd 2nd 1st
+4680 1st 2nd 3rd Last 3rd 2nd 1st
+4681 1st 2nd 3rd Last 3rd 2nd 1st
+4682 1st 2nd 3rd Last 3rd 2nd 1st
+4683 1st 2nd 3rd Last 3rd 2nd 1st
+4684 1st 2nd 3rd Last 3rd 2nd 1st
+4685 1st 2nd 3rd Last 3rd 2nd 1st
+4686 1st 2nd 3rd Last 3rd 2nd 1st
+4687 1st 2nd 3rd Last 3rd 2nd 1st
+4688 1st 2nd 3rd Last 3rd 2nd 1st
+4689 1st 2nd 3rd Last 3rd 2nd 1st
+4690 1st 2nd 3rd Last 3rd 2nd 1st
+4691 1st 2nd 3rd Last 3rd 2nd 1st
+4692 1st 2nd 3rd Last 3rd 2nd 1st
+4693 1st 2nd 3rd Last 3rd 2nd 1st
+4694 1st 2nd 3rd Last 3rd 2nd 1st
+4695 1st 2nd 3rd Last 3rd 2nd 1st
+4696 1st 2nd 3rd Last 3rd 2nd 1st
+4697 1st 2nd 3rd Last 3rd 2nd 1st
+4698 1st 2nd 3rd Last 3rd 2nd 1st
+4699 1st 2nd 3rd Last 3rd 2nd 1st
+4700 1st 2nd 3rd Last 3rd 2nd 1st
+4701 1st 2nd 3rd Last 3rd 2nd 1st
+4702 1st 2nd 3rd Last 3rd 2nd 1st
+4703 1st 2nd 3rd Last 3rd 2nd 1st
+4704 1st 2nd 3rd Last 3rd 2nd 1st
+4705 1st 2nd 3rd Last 3rd 2nd 1st
+4706 1st 2nd 3rd Last 3rd 2nd 1st
+4707 1st 2nd 3rd Last 3rd 2nd 1st
+4708 1st 2nd 3rd Last 3rd 2nd 1st
+4709 1st 2nd 3rd Last 3rd 2nd 1st
+4710 1st 2nd 3rd Last 3rd 2nd 1st
+4711 1st 2nd 3rd Last 3rd 2nd 1st
+4712 1st 2nd 3rd Last 3rd 2nd 1st
+4713 1st 2nd 3rd Last 3rd 2nd 1st
+4714 1st 2nd 3rd Last 3rd 2nd 1st
+4715 1st 2nd 3rd Last 3rd 2nd 1st
+4716 1st 2nd 3rd Last 3rd 2nd 1st
+4717 1st 2nd 3rd Last 3rd 2nd 1st
+4718 1st 2nd 3rd Last 3rd 2nd 1st
+4719 1st 2nd 3rd Last 3rd 2nd 1st
+4720 1st 2nd 3rd Last 3rd 2nd 1st
+4721 1st 2nd 3rd Last 3rd 2nd 1st
+4722 1st 2nd 3rd Last 3rd 2nd 1st
+4723 1st 2nd 3rd Last 3rd 2nd 1st
+4724 1st 2nd 3rd Last 3rd 2nd 1st
+4725 1st 2nd 3rd Last 3rd 2nd 1st
+4726 1st 2nd 3rd Last 3rd 2nd 1st
+4727 1st 2nd 3rd Last 3rd 2nd 1st
+4728 1st 2nd 3rd Last 3rd 2nd 1st
+4729 1st 2nd 3rd Last 3rd 2nd 1st
+4730 1st 2nd 3rd Last 3rd 2nd 1st
+4731 1st 2nd 3rd Last 3rd 2nd 1st
+4732 1st 2nd 3rd Last 3rd 2nd 1st
+4733 1st 2nd 3rd Last 3rd 2nd 1st
+4734 1st 2nd 3rd Last 3rd 2nd 1st
+4735 1st 2nd 3rd Last 3rd 2nd 1st
+4736 1st 2nd 3rd Last 3rd 2nd 1st
+4737 1st 2nd 3rd Last 3rd 2nd 1st
+4738 1st 2nd 3rd Last 3rd 2nd 1st
+4739 1st 2nd 3rd Last 3rd 2nd 1st
+4740 1st 2nd 3rd Last 3rd 2nd 1st
+4741 1st 2nd 3rd Last 3rd 2nd 1st
+4742 1st 2nd 3rd Last 3rd 2nd 1st
+4743 1st 2nd 3rd Last 3rd 2nd 1st
+4744 1st 2nd 3rd Last 3rd 2nd 1st
+4745 1st 2nd 3rd Last 3rd 2nd 1st
+4746 1st 2nd 3rd Last 3rd 2nd 1st
+4747 1st 2nd 3rd Last 3rd 2nd 1st
+4748 1st 2nd 3rd Last 3rd 2nd 1st
+4749 1st 2nd 3rd Last 3rd 2nd 1st
+4750 1st 2nd 3rd Last 3rd 2nd 1st
+4751 1st 2nd 3rd Last 3rd 2nd 1st
+4752 1st 2nd 3rd Last 3rd 2nd 1st
+4753 1st 2nd 3rd Last 3rd 2nd 1st
+4754 1st 2nd 3rd Last 3rd 2nd 1st
+4755 1st 2nd 3rd Last 3rd 2nd 1st
+4756 1st 2nd 3rd Last 3rd 2nd 1st
+4757 1st 2nd 3rd Last 3rd 2nd 1st
+4758 1st 2nd 3rd Last 3rd 2nd 1st
+4759 1st 2nd 3rd Last 3rd 2nd 1st
+4760 1st 2nd 3rd Last 3rd 2nd 1st
+4761 1st 2nd 3rd Last 3rd 2nd 1st
+4762 1st 2nd 3rd Last 3rd 2nd 1st
+4763 1st 2nd 3rd Last 3rd 2nd 1st
+4764 1st 2nd 3rd Last 3rd 2nd 1st
+4765 1st 2nd 3rd Last 3rd 2nd 1st
+4766 1st 2nd 3rd Last 3rd 2nd 1st
+4767 1st 2nd 3rd Last 3rd 2nd 1st
+4768 1st 2nd 3rd Last 3rd 2nd 1st
+4769 1st 2nd 3rd Last 3rd 2nd 1st
+4770 1st 2nd 3rd Last 3rd 2nd 1st
+4771 1st 2nd 3rd Last 3rd 2nd 1st
+4772 1st 2nd 3rd Last 3rd 2nd 1st
+4773 1st 2nd 3rd Last 3rd 2nd 1st
+4774 1st 2nd 3rd Last 3rd 2nd 1st
+4775 1st 2nd 3rd Last 3rd 2nd 1st
+4776 1st 2nd 3rd Last 3rd 2nd 1st
+4777 1st 2nd 3rd Last 3rd 2nd 1st
+4778 1st 2nd 3rd Last 3rd 2nd 1st
+4779 1st 2nd 3rd Last 3rd 2nd 1st
+4780 1st 2nd 3rd Last 3rd 2nd 1st
+4781 1st 2nd 3rd Last 3rd 2nd 1st
+4782 1st 2nd 3rd Last 3rd 2nd 1st
+4783 1st 2nd 3rd Last 3rd 2nd 1st
+4784 1st 2nd 3rd Last 3rd 2nd 1st
+4785 1st 2nd 3rd Last 3rd 2nd 1st
+4786 1st 2nd 3rd Last 3rd 2nd 1st
+4787 1st 2nd 3rd Last 3rd 2nd 1st
+4788 1st 2nd 3rd Last 3rd 2nd 1st
+4789 1st 2nd 3rd Last 3rd 2nd 1st
+4790 1st 2nd 3rd Last 3rd 2nd 1st
+4791 1st 2nd 3rd Last 3rd 2nd 1st
+4792 1st 2nd 3rd Last 3rd 2nd 1st
+4793 1st 2nd 3rd Last 3rd 2nd 1st
+4794 1st 2nd 3rd Last 3rd 2nd 1st
+4795 1st 2nd 3rd Last 3rd 2nd 1st
+4796 1st 2nd 3rd Last 3rd 2nd 1st
+4797 1st 2nd 3rd Last 3rd 2nd 1st
+4798 1st 2nd 3rd Last 3rd 2nd 1st
+4799 1st 2nd 3rd Last 3rd 2nd 1st
+4800 1st 2nd 3rd Last 3rd 2nd 1st
+4801 1st 2nd 3rd Last 3rd 2nd 1st
+4802 1st 2nd 3rd Last 3rd 2nd 1st
+4803 1st 2nd 3rd Last 3rd 2nd 1st
+4804 1st 2nd 3rd Last 3rd 2nd 1st
+4805 1st 2nd 3rd Last 3rd 2nd 1st
+4806 1st 2nd 3rd Last 3rd 2nd 1st
+4807 1st 2nd 3rd Last 3rd 2nd 1st
+4808 1st 2nd 3rd Last 3rd 2nd 1st
+4809 1st 2nd 3rd Last 3rd 2nd 1st
+4810 1st 2nd 3rd Last 3rd 2nd 1st
+4811 1st 2nd 3rd Last 3rd 2nd 1st
+4812 1st 2nd 3rd Last 3rd 2nd 1st
+4813 1st 2nd 3rd Last 3rd 2nd 1st
+4814 1st 2nd 3rd Last 3rd 2nd 1st
+4815 1st 2nd 3rd Last 3rd 2nd 1st
+4816 1st 2nd 3rd Last 3rd 2nd 1st
+4817 1st 2nd 3rd Last 3rd 2nd 1st
+4818 1st 2nd 3rd Last 3rd 2nd 1st
+4819 1st 2nd 3rd Last 3rd 2nd 1st
+4820 1st 2nd 3rd Last 3rd 2nd 1st
+4821 1st 2nd 3rd Last 3rd 2nd 1st
+4822 1st 2nd 3rd Last 3rd 2nd 1st
+4823 1st 2nd 3rd Last 3rd 2nd 1st
+4824 1st 2nd 3rd Last 3rd 2nd 1st
+4825 1st 2nd 3rd Last 3rd 2nd 1st
+4826 1st 2nd 3rd Last 3rd 2nd 1st
+4827 1st 2nd 3rd Last 3rd 2nd 1st
+4828 1st 2nd 3rd Last 3rd 2nd 1st
+4829 1st 2nd 3rd Last 3rd 2nd 1st
+4830 1st 2nd 3rd Last 3rd 2nd 1st
+4831 1st 2nd 3rd Last 3rd 2nd 1st
+4832 1st 2nd 3rd Last 3rd 2nd 1st
+4833 1st 2nd 3rd Last 3rd 2nd 1st
+4834 1st 2nd 3rd Last 3rd 2nd 1st
+4835 1st 2nd 3rd Last 3rd 2nd 1st
+4836 1st 2nd 3rd Last 3rd 2nd 1st
+4837 1st 2nd 3rd Last 3rd 2nd 1st
+4838 1st 2nd 3rd Last 3rd 2nd 1st
+4839 1st 2nd 3rd Last 3rd 2nd 1st
+4840 1st 2nd 3rd Last 3rd 2nd 1st
+4841 1st 2nd 3rd Last 3rd 2nd 1st
+4842 1st 2nd 3rd Last 3rd 2nd 1st
+4843 1st 2nd 3rd Last 3rd 2nd 1st
+4844 1st 2nd 3rd Last 3rd 2nd 1st
+4845 1st 2nd 3rd Last 3rd 2nd 1st
+4846 1st 2nd 3rd Last 3rd 2nd 1st
+4847 1st 2nd 3rd Last 3rd 2nd 1st
+4848 1st 2nd 3rd Last 3rd 2nd 1st
+4849 1st 2nd 3rd Last 3rd 2nd 1st
+4850 1st 2nd 3rd Last 3rd 2nd 1st
+4851 1st 2nd 3rd Last 3rd 2nd 1st
+4852 1st 2nd 3rd Last 3rd 2nd 1st
+4853 1st 2nd 3rd Last 3rd 2nd 1st
+4854 1st 2nd 3rd Last 3rd 2nd 1st
+4855 1st 2nd 3rd Last 3rd 2nd 1st
+4856 1st 2nd 3rd Last 3rd 2nd 1st
+4857 1st 2nd 3rd Last 3rd 2nd 1st
+4858 1st 2nd 3rd Last 3rd 2nd 1st
+4859 1st 2nd 3rd Last 3rd 2nd 1st
+4860 1st 2nd 3rd Last 3rd 2nd 1st
+4861 1st 2nd 3rd Last 3rd 2nd 1st
+4862 1st 2nd 3rd Last 3rd 2nd 1st
+4863 1st 2nd 3rd Last 3rd 2nd 1st
+4864 1st 2nd 3rd Last 3rd 2nd 1st
+4865 1st 2nd 3rd Last 3rd 2nd 1st
+4866 1st 2nd 3rd Last 3rd 2nd 1st
+4867 1st 2nd 3rd Last 3rd 2nd 1st
+4868 1st 2nd 3rd Last 3rd 2nd 1st
+4869 1st 2nd 3rd Last 3rd 2nd 1st
+4870 1st 2nd 3rd Last 3rd 2nd 1st
+4871 1st 2nd 3rd Last 3rd 2nd 1st
+4872 1st 2nd 3rd Last 3rd 2nd 1st
+4873 1st 2nd 3rd Last 3rd 2nd 1st
+4874 1st 2nd 3rd Last 3rd 2nd 1st
+4875 1st 2nd 3rd Last 3rd 2nd 1st
+4876 1st 2nd 3rd Last 3rd 2nd 1st
+4877 1st 2nd 3rd Last 3rd 2nd 1st
+4878 1st 2nd 3rd Last 3rd 2nd 1st
+4879 1st 2nd 3rd Last 3rd 2nd 1st
+4880 1st 2nd 3rd Last 3rd 2nd 1st
+4881 1st 2nd 3rd Last 3rd 2nd 1st
+4882 1st 2nd 3rd Last 3rd 2nd 1st
+4883 1st 2nd 3rd Last 3rd 2nd 1st
+4884 1st 2nd 3rd Last 3rd 2nd 1st
+4885 1st 2nd 3rd Last 3rd 2nd 1st
+4886 1st 2nd 3rd Last 3rd 2nd 1st
+4887 1st 2nd 3rd Last 3rd 2nd 1st
+4888 1st 2nd 3rd Last 3rd 2nd 1st
+4889 1st 2nd 3rd Last 3rd 2nd 1st
+4890 1st 2nd 3rd Last 3rd 2nd 1st
+4891 1st 2nd 3rd Last 3rd 2nd 1st
+4892 1st 2nd 3rd Last 3rd 2nd 1st
+4893 1st 2nd 3rd Last 3rd 2nd 1st
+4894 1st 2nd 3rd Last 3rd 2nd 1st
+4895 1st 2nd 3rd Last 3rd 2nd 1st
+4896 1st 2nd 3rd Last 3rd 2nd 1st
+4897 1st 2nd 3rd Last 3rd 2nd 1st
+4898 1st 2nd 3rd Last 3rd 2nd 1st
+4899 1st 2nd 3rd Last 3rd 2nd 1st
+4900 1st 2nd 3rd Last 3rd 2nd 1st
+4901 1st 2nd 3rd Last 3rd 2nd 1st
+4902 1st 2nd 3rd Last 3rd 2nd 1st
+4903 1st 2nd 3rd Last 3rd 2nd 1st
+4904 1st 2nd 3rd Last 3rd 2nd 1st
+4905 1st 2nd 3rd Last 3rd 2nd 1st
+4906 1st 2nd 3rd Last 3rd 2nd 1st
+4907 1st 2nd 3rd Last 3rd 2nd 1st
+4908 1st 2nd 3rd Last 3rd 2nd 1st
+4909 1st 2nd 3rd Last 3rd 2nd 1st
+4910 1st 2nd 3rd Last 3rd 2nd 1st
+4911 1st 2nd 3rd Last 3rd 2nd 1st
+4912 1st 2nd 3rd Last 3rd 2nd 1st
+4913 1st 2nd 3rd Last 3rd 2nd 1st
+4914 1st 2nd 3rd Last 3rd 2nd 1st
+4915 1st 2nd 3rd Last 3rd 2nd 1st
+4916 1st 2nd 3rd Last 3rd 2nd 1st
+4917 1st 2nd 3rd Last 3rd 2nd 1st
+4918 1st 2nd 3rd Last 3rd 2nd 1st
+4919 1st 2nd 3rd Last 3rd 2nd 1st
+4920 1st 2nd 3rd Last 3rd 2nd 1st
+4921 1st 2nd 3rd Last 3rd 2nd 1st
+4922 1st 2nd 3rd Last 3rd 2nd 1st
+4923 1st 2nd 3rd Last 3rd 2nd 1st
+4924 1st 2nd 3rd Last 3rd 2nd 1st
+4925 1st 2nd 3rd Last 3rd 2nd 1st
+4926 1st 2nd 3rd Last 3rd 2nd 1st
+4927 1st 2nd 3rd Last 3rd 2nd 1st
+4928 1st 2nd 3rd Last 3rd 2nd 1st
+4929 1st 2nd 3rd Last 3rd 2nd 1st
+4930 1st 2nd 3rd Last 3rd 2nd 1st
+4931 1st 2nd 3rd Last 3rd 2nd 1st
+4932 1st 2nd 3rd Last 3rd 2nd 1st
+4933 1st 2nd 3rd Last 3rd 2nd 1st
+4934 1st 2nd 3rd Last 3rd 2nd 1st
+4935 1st 2nd 3rd Last 3rd 2nd 1st
+4936 1st 2nd 3rd Last 3rd 2nd 1st
+4937 1st 2nd 3rd Last 3rd 2nd 1st
+4938 1st 2nd 3rd Last 3rd 2nd 1st
+4939 1st 2nd 3rd Last 3rd 2nd 1st
+4940 1st 2nd 3rd Last 3rd 2nd 1st
+4941 1st 2nd 3rd Last 3rd 2nd 1st
+4942 1st 2nd 3rd Last 3rd 2nd 1st
+4943 1st 2nd 3rd Last 3rd 2nd 1st
+4944 1st 2nd 3rd Last 3rd 2nd 1st
+4945 1st 2nd 3rd Last 3rd 2nd 1st
+4946 1st 2nd 3rd Last 3rd 2nd 1st
+4947 1st 2nd 3rd Last 3rd 2nd 1st
+4948 1st 2nd 3rd Last 3rd 2nd 1st
+4949 1st 2nd 3rd Last 3rd 2nd 1st
+4950 1st 2nd 3rd Last 3rd 2nd 1st
+4951 1st 2nd 3rd Last 3rd 2nd 1st
+4952 1st 2nd 3rd Last 3rd 2nd 1st
+4953 1st 2nd 3rd Last 3rd 2nd 1st
+4954 1st 2nd 3rd Last 3rd 2nd 1st
+4955 1st 2nd 3rd Last 3rd 2nd 1st
+4956 1st 2nd 3rd Last 3rd 2nd 1st
+4957 1st 2nd 3rd Last 3rd 2nd 1st
+4958 1st 2nd 3rd Last 3rd 2nd 1st
+4959 1st 2nd 3rd Last 3rd 2nd 1st
+4960 1st 2nd 3rd Last 3rd 2nd 1st
+4961 1st 2nd 3rd Last 3rd 2nd 1st
+4962 1st 2nd 3rd Last 3rd 2nd 1st
+4963 1st 2nd 3rd Last 3rd 2nd 1st
+4964 1st 2nd 3rd Last 3rd 2nd 1st
+4965 1st 2nd 3rd Last 3rd 2nd 1st
+4966 1st 2nd 3rd Last 3rd 2nd 1st
+4967 1st 2nd 3rd Last 3rd 2nd 1st
+4968 1st 2nd 3rd Last 3rd 2nd 1st
+4969 1st 2nd 3rd Last 3rd 2nd 1st
+4970 1st 2nd 3rd Last 3rd 2nd 1st
+4971 1st 2nd 3rd Last 3rd 2nd 1st
+4972 1st 2nd 3rd Last 3rd 2nd 1st
+4973 1st 2nd 3rd Last 3rd 2nd 1st
+4974 1st 2nd 3rd Last 3rd 2nd 1st
+4975 1st 2nd 3rd Last 3rd 2nd 1st
+4976 1st 2nd 3rd Last 3rd 2nd 1st
+4977 1st 2nd 3rd Last 3rd 2nd 1st
+4978 1st 2nd 3rd Last 3rd 2nd 1st
+4979 1st 2nd 3rd Last 3rd 2nd 1st
+4980 1st 2nd 3rd Last 3rd 2nd 1st
+4981 1st 2nd 3rd Last 3rd 2nd 1st
+4982 1st 2nd 3rd Last 3rd 2nd 1st
+4983 1st 2nd 3rd Last 3rd 2nd 1st
+4984 1st 2nd 3rd Last 3rd 2nd 1st
+4985 1st 2nd 3rd Last 3rd 2nd 1st
+4986 1st 2nd 3rd Last 3rd 2nd 1st
+4987 1st 2nd 3rd Last 3rd 2nd 1st
+4988 1st 2nd 3rd Last 3rd 2nd 1st
+4989 1st 2nd 3rd Last 3rd 2nd 1st
+4990 1st 2nd 3rd Last 3rd 2nd 1st
+4991 1st 2nd 3rd Last 3rd 2nd 1st
+4992 1st 2nd 3rd Last 3rd 2nd 1st
+4993 1st 2nd 3rd Last 3rd 2nd 1st
+4994 1st 2nd 3rd Last 3rd 2nd 1st
+4995 1st 2nd 3rd Last 3rd 2nd 1st
+4996 1st 2nd 3rd Last 3rd 2nd 1st
+4997 1st 2nd 3rd Last 3rd 2nd 1st
+4998 1st 2nd 3rd Last 3rd 2nd 1st
+4999 1st 2nd 3rd Last 3rd 2nd 1st
+Stopping
Index: src/tests/.expect/concurrent/sched-ext-statment.txt
===================================================================
--- src/tests/.expect/concurrent/sched-ext-statment.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/concurrent/sched-ext-statment.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,702 @@
+Starting
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Stopping
Index: src/tests/.expect/concurrent/sched-ext-when.txt
===================================================================
--- src/tests/.expect/concurrent/sched-ext-when.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/concurrent/sched-ext-when.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,5000 @@
+Starting
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+Stopping
Index: src/tests/.expect/ctor-autogen-ERR1.txt
===================================================================
--- src/tests/.expect/ctor-autogen-ERR1.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/ctor-autogen-ERR1.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,9 @@
+ctor-autogen.c:102:1 error: No reasonable alternatives for expression Applying untyped: 
+  Name: ?{}
+...to: 
+  Cast of:
+    Variable Expression: x: instance of struct Managed with body 1 
+  ... to:
+    reference to instance of struct Managed with body 1 
+  constant expression (123 123: signed int)
+
Index: src/tests/.expect/ctor-autogen.txt
===================================================================
--- src/tests/.expect/ctor-autogen.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/ctor-autogen.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,1 @@
+
Index: src/tests/.expect/fmtLines.txt
===================================================================
--- src/tests/.expect/fmtLines.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,78 +1,0 @@
-// /  / Cf  oral  l Ve  rsio  
-n 1.  0.0   Copy  righ  t (C  
-) 20  17 U  nive  rsit  y of  
- Wat  erlo  o///  / Th  e co  
-nten  ts o  f th  is f  ile   
-are   cove  red   unde  r th  
-e li  cenc  e ag  reem  ent   
-in t  he//   fil  e "L  ICEN  
-CE"   dist  ribu  ted   with  
- Cfo  rall  .//   // f  mtLi  
-nes.  cc -  - //   //   Auth  
-or                 : P  eter  
- A.   Buhr  // C  reat  ed O  
-n           : Su  n Se  p 17  
- 21:  56:1  5 20  17//   Las  
-t Mo  difi  ed B  y :   Pete  
-r A.   Buh  r//   Last   Mod  
-ifie  d On   : M  on S  ep 1  
-8 11  :35:  57 2  017/  / Up  
-date   Cou  nt       :   31/  
-/ #i  nclu  de <  fstr  eam>  
-#inc  lude   <co  rout  ine>  
-coro  utin  e Fo  rmat   {	c  
-har   ch;	  				  				  		//  
- use  d fo  r co  mmun  icat  
-ion	  int   g, b  ;			  				  
-				  // g  loba  l be  caus  
-e us  ed i  n de  stru  ctor  
-};vo  id ?  {}(   Form  at &  
- fmt   ) {        resu  me(   
-fmt   );		  				  				  // s  
-tart   cor  outi  ne}v  oid   
-^?{}  ( Fo  rmat   & f  mt )  
- {      if   ( f  mt.g   !=   
-0 ||   fmt  .b !  = 0   ) so  
-ut |   end  l;}v  oid   main  
-( Fo  rmat   & f  mt )   {	f  
-or (   ;;   ) {	  				  				  
-	//   for   as m  any   char  
-acte  rs		  for   ( fm  t.g   
-= 0;   fmt  .g <   5;   fmt.  
-g +=   1 )   {		  // g  roup  
-s of   5 b  lock  s			  for   
-( fm  t.b   = 0;   fmt  .b <  
- 4;   fmt.  b +=   1 )   {	/  
-/ bl  ocks   of   4 ch  arac  
-ters  				  for   ( ;;   ) {  
-				  			/  / fo  r ne  wlin  
-e ch  arac  ters  				  	sus  
-pend  ();	  				  if (   fmt  
-.ch   != '  \n'   ) br  eak;  
-		//   ign  ore   newl  ine	  
-			}   //   for	  			s  out   
-| fm  t.ch  ;			  				  // p  
-rint   cha  ract  er		  	} /  
-/ fo  r			  sout   | "    ";  
-				  				  // p  rint   blo  
-ck s  epar  ator  		}   // f  
-or		  sout   | e  ndl;  				  
-				  	//   prin  t gr  oup   
-sepa  rato  r	}   // f  or}   
-// m  ainv  oid   prt(   For  
-mat   & fm  t, c  har   ch )  
- {      fm  t.ch   = c  h;    
-  re  sume  ( fm  t );  } //  
- prt  int   main  () {  	For  
-mat   fmt;  	cha  r ch  ;	fo  
-r (   ;; )   {		  sin   | ch  
-;			  				  			/  / re  ad o  
-ne c  hara  cter  	  i  f (   
-eof(   sin   ) )   bre  ak;	  
-				  		//   eof   ?		  prt(  
- fmt  , ch   );	  } //   for  
-} //   mai  n//   Loca  l Va  
-riab  les:   ///  / ta  b-wi  
-dth:   4 /  ///   comp  ile-  
-comm  and:   "cf  a fm  tLin  
-es.c  " //  // E  nd:   //
Index: src/tests/.expect/pingpong.txt
===================================================================
--- src/tests/.expect/pingpong.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,40 +1,0 @@
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
-ping
-pong
Index: src/tests/.expect/polymorphism.txt
===================================================================
--- src/tests/.expect/polymorphism.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/polymorphism.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,2 @@
+123 456 456
+5 5
Index: src/tests/.expect/prodcons.txt
===================================================================
--- src/tests/.expect/prodcons.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ 	(revision )
@@ -1,33 +1,0 @@
-47 88
-47 88
- $1
- $1
-1
-68 24
- # 1
-68 24
- $2
- $2
-2
-58 18
- # 2
-58 18
- $3
- $3
-3
-55 82
- # 3
-55 82
- $4
- $4
-4
-60 87
- # 4
-60 87
- $5
- $5
-5
- # 5
-cons stops
-prod stops
-main stops
Index: src/tests/.expect/references.txt
===================================================================
--- src/tests/.expect/references.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/references.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,35 @@
+3 3 1
+12 12 1
+12 12 1 1
+13 1 12
+14 14
+Default constructing a Y
+Copy constructing a Y
+Copy constructing a Y
+Copy constructing a Y
+Destructing a Y
+Destructing a Y
+Default constructing a Y
+Copy constructing a Y
+Value constructing a Y 56
+Value constructing a Y 78
+Copy constructing a Y
+Copy constructing a Y
+Assigning a Y
+Copy constructing a Y
+Destructing a Y
+Destructing a Y
+Copy constructing a Y
+Assigning a Y
+Copy constructing a Y
+Destructing a Y
+Destructing a Y
+Copy constructing a Y
+Destructing a Y
+Destructing a Y
+Destructing a Y
+Destructing a Y
+Destructing a Y
+Destructing a Y
+Destructing a Y
+Destructing a Y
Index: src/tests/.expect/scopeErrors.txt
===================================================================
--- src/tests/.expect/scopeErrors.txt	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/.expect/scopeErrors.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -1,10 +1,12 @@
 scopeErrors.c:2:1 error: duplicate object definition for thisIsAnError: signed int
 scopeErrors.c:20:1 error: duplicate function definition for butThisIsAnError: function
-  with parameters
-    double
-  returning 
-    _retval_butThisIsAnError:       Attribute with name: unused
-double
-  with body 
-    CompoundStmt
+... with parameters
+  double
+... returning 
+  _retval_butThisIsAnError: double
+  ... with attributes: 
+    Attribute with name: unused
 
+... with body 
+  CompoundStmt
+
Index: src/tests/.expect/sum.txt
===================================================================
--- src/tests/.expect/sum.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/sum.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,5 @@
+sum from 5 to 15 is 95, check 95
+sum from 5 to 15 is 95, check 95
+sum from 0.5 to 1.5 is 9.5, check 9.5
+sum from 0.5 to 1.5 is 9.5, check 9.5
+sum from 5 to 15 is 95 95, check 95 95
Index: src/tests/.expect/typedefRedef-ERR1.txt
===================================================================
--- src/tests/.expect/typedefRedef-ERR1.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/.expect/typedefRedef-ERR1.txt	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,2 @@
+typedefRedef.c:4:1 error: Cannot redefine typedef: Foo
+typedefRedef.c:60:1 error: Cannot redefine typedef: ARR
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/Makefile.am	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 09:08:15 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Mon Sep 11 16:17:16 2017
-## Update Count     : 45
+## Last Modified On : Tue Oct 10 14:04:40 2017
+## Update Count     : 47
 ###############################################################################
 
@@ -22,5 +22,25 @@
 concurrent = yes
 quick_test += coroutine thread monitor
-concurrent_test = coroutine thread monitor multi-monitor sched-int-barge sched-int-block sched-int-disjoint sched-int-wait sched-ext sched-ext-multi preempt
+concurrent_test =		\
+	coroutine		\
+	fmtLines		\
+	pingpong		\
+	prodcons		\
+	thread			\
+	matrixSum		\
+	monitor			\
+	multi-monitor		\
+	boundedBuffer		\
+	preempt			\
+	sched-int-block		\
+	sched-int-disjoint	\
+	sched-int-wait		\
+	sched-ext-barge		\
+	sched-ext-dtor		\
+	sched-ext-else		\
+	sched-ext-parse		\
+	sched-ext-recurse	\
+	sched-ext-statment	\
+	sched-ext-when
 else
 concurrent=no
@@ -87,20 +107,23 @@
 
 declarationSpecifier: declarationSpecifier.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 gccExtensions : gccExtensions.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 extension : extension.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 attributes : attributes.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 KRfunctions : KRfunctions.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 literals : literals.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
+
+sched-ext-parse : sched-ext-parse.c @CFA_BINDIR@/@CFA_NAME@
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 gmp : gmp.c @CFA_BINDIR@/@CFA_NAME@
@@ -110,4 +133,10 @@
 	${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
 
+ctor-autogen-ERR1: ctor-autogen.c @CFA_BINDIR@/@CFA_NAME@
+	${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
+
 completeTypeError : completeTypeError.c @CFA_BINDIR@/@CFA_NAME@
 	${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
+
+typedefRedef-ERR1: typedefRedef.c @CFA_BINDIR@/@CFA_NAME@
+	${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/Makefile.in	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -320,5 +320,26 @@
 @BUILD_CONCURRENCY_TRUE@concurrent = yes
 @BUILD_CONCURRENCY_FALSE@concurrent_test = 
-@BUILD_CONCURRENCY_TRUE@concurrent_test = coroutine thread monitor multi-monitor sched-int-barge sched-int-block sched-int-disjoint sched-int-wait sched-ext sched-ext-multi preempt
+@BUILD_CONCURRENCY_TRUE@concurrent_test = \
+@BUILD_CONCURRENCY_TRUE@	coroutine		\
+@BUILD_CONCURRENCY_TRUE@	fmtLines		\
+@BUILD_CONCURRENCY_TRUE@	pingpong		\
+@BUILD_CONCURRENCY_TRUE@	prodcons		\
+@BUILD_CONCURRENCY_TRUE@	thread			\
+@BUILD_CONCURRENCY_TRUE@	matrixSum		\
+@BUILD_CONCURRENCY_TRUE@	monitor			\
+@BUILD_CONCURRENCY_TRUE@	multi-monitor		\
+@BUILD_CONCURRENCY_TRUE@	boundedBuffer		\
+@BUILD_CONCURRENCY_TRUE@	preempt			\
+@BUILD_CONCURRENCY_TRUE@	sched-int-block		\
+@BUILD_CONCURRENCY_TRUE@	sched-int-disjoint	\
+@BUILD_CONCURRENCY_TRUE@	sched-int-wait		\
+@BUILD_CONCURRENCY_TRUE@	sched-ext-barge		\
+@BUILD_CONCURRENCY_TRUE@	sched-ext-dtor		\
+@BUILD_CONCURRENCY_TRUE@	sched-ext-else		\
+@BUILD_CONCURRENCY_TRUE@	sched-ext-parse		\
+@BUILD_CONCURRENCY_TRUE@	sched-ext-recurse	\
+@BUILD_CONCURRENCY_TRUE@	sched-ext-statment	\
+@BUILD_CONCURRENCY_TRUE@	sched-ext-when
+
 
 # applies to both programs
@@ -839,20 +860,23 @@
 
 declarationSpecifier: declarationSpecifier.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 gccExtensions : gccExtensions.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 extension : extension.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 attributes : attributes.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 KRfunctions : KRfunctions.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 literals : literals.c @CFA_BINDIR@/@CFA_NAME@
-	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
+
+sched-ext-parse : sched-ext-parse.c @CFA_BINDIR@/@CFA_NAME@
+	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
 gmp : gmp.c @CFA_BINDIR@/@CFA_NAME@
@@ -862,5 +886,11 @@
 	${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
 
+ctor-autogen-ERR1: ctor-autogen.c @CFA_BINDIR@/@CFA_NAME@
+	${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
+
 completeTypeError : completeTypeError.c @CFA_BINDIR@/@CFA_NAME@
+	${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
+
+typedefRedef-ERR1: typedefRedef.c @CFA_BINDIR@/@CFA_NAME@
 	${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@}
 
Index: src/tests/boundedBuffer.c
===================================================================
--- src/tests/boundedBuffer.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/boundedBuffer.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,119 @@
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// boundedBuffer.c --
+//
+// Author           : Peter A. Buhr
+// Created On       : Mon Oct 30 12:45:13 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Oct 30 23:02:46 2017
+// Update Count     : 9
+//
+
+#include <stdlib>
+#include <fstream>										// random
+#include <kernel>
+#include <thread>
+#include <unistd.h>										// getpid
+
+monitor Buffer {
+	condition full, empty;
+	int front, back, count;
+	int elements[20];
+};
+
+void ?{}( Buffer & buffer ) {
+	buffer.front = buffer.back = buffer.count = 0;
+}
+
+int query( Buffer & buffer ) { return buffer.count; }
+
+void insert( Buffer & mutex buffer, int elem ) {
+	if ( buffer.count == 20 ) wait( buffer.empty );
+	buffer.elements[buffer.back] = elem;
+	buffer.back = ( buffer.back + 1 ) % 20;
+	buffer.count += 1;
+	signal( buffer.full );
+}
+int remove( Buffer & mutex buffer ) {
+	if ( buffer.count == 0 ) wait( buffer.full );
+	int elem = buffer.elements[buffer.front];
+	buffer.front = ( buffer.front + 1 ) % 20;
+	buffer.count -= 1;
+	signal( buffer.empty );
+	return elem;
+}
+
+thread Producer {
+	Buffer & buffer;
+	unsigned int N;
+};
+void main( Producer & prod ) {
+	for ( int i = 1; i <= prod.N; i += 1 ) {
+		yield( random( 5 ) );
+		insert( prod.buffer, 1 );
+	} // for
+	insert( prod.buffer, -1 );
+}
+void ?{}( Producer & prod, Buffer * buffer, unsigned int N ) {
+	&prod.buffer = buffer;
+	prod.N = N;
+		}
+
+thread Consumer {
+	Buffer & buffer;
+	int & sum;						// summation of producer values
+};
+void main( Consumer & cons ) {
+	cons.sum = 0;
+	for ( ;; ) {
+		yield( random( 5 ) );
+		int item = remove( cons.buffer );
+		if ( item == -1 ) break;				// sentinel ?
+		cons.sum += item;
+	} // for
+}
+void ?{}( Consumer & cons, Buffer * buffer, int * sum ) {
+	&cons.buffer = buffer;
+	&cons.sum = sum;
+}
+
+int main() {
+	Buffer buffer;
+	enum { Prods = 5, Cons = 5 };
+	Producer * prods[Prods];
+	Consumer * cons[Cons];
+	const int Sentinel = -1;
+	int sums[Cons];
+	int i;
+	processor p;
+
+	//random_seed( getpid() );
+	random_seed( 1003 );
+
+	for ( i = 0; i < Cons; i += 1 ) {			// create consumers
+		cons[i] = new( &buffer, &sums[i] );
+	} // for
+	for ( i = 0; i < Prods; i += 1 ) {			// create producers
+		prods[i] = new( &buffer, 100000u );
+	} // for
+
+	for ( i = 0; i < Prods; i += 1 ) {			// wait for producers to finish
+		delete( prods[i] );
+	} // for
+	for ( i = 0; i < Cons; i += 1 ) {			// generate sentinal values to stop consumers
+		insert( buffer, Sentinel );
+	} // for
+	int sum = 0;
+	for ( i = 0; i < Cons; i += 1 ) {			// wait for consumers to finish
+		delete( cons[i] );
+		sum += sums[i];
+	} // for
+	sout | "total:" | sum | endl;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa boundedBuffer.c" //
+// End: //
Index: src/tests/coroutine.c
===================================================================
--- src/tests/coroutine.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/coroutine.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jun  8 07:29:37 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun  8 07:37:12 2017
-// Update Count     : 5
+// Last Modified On : Sun Sep 17 21:38:15 2017
+// Update Count     : 7
 //
 
@@ -18,5 +18,5 @@
 
 coroutine Fibonacci {
-	int fn;						// used for communication
+	int fn;												// used for communication
 };
 
@@ -26,24 +26,22 @@
 
 void main( Fibonacci & this ) {
-	int fn1, fn2;					// retained between resumes
-	this.fn = 0;					// case 0
+	int fn1, fn2;										// retained between resumes
+	this.fn = 0;										// case 0
 	fn1 = this.fn;
-	suspend();						// return to last resume
+	suspend();											// restart last resume
 
-	this.fn = 1;					// case 1
-	fn2 = fn1;
-	fn1 = this.fn;
-	suspend();						// return to last resume
+	this.fn = 1;										// case 1
+	fn2 = fn1;  fn1 = this.fn;
+	suspend();											// restart last resume
 
-	for ( ;; ) {					// general case
+	for ( ;; ) {										// general case
 		this.fn = fn1 + fn2;
-		fn2 = fn1;
-		fn1 = this.fn;
-		suspend();					// return to last resume
+		fn2 = fn1;  fn1 = this.fn;
+		suspend();										// restart last resume
 	} // for
 }
 
 int next( Fibonacci & this ) {
-	resume( this );					// transfer to last suspend
+	resume( this );										// restart last suspend
 	return this.fn;
 }
@@ -52,5 +50,5 @@
 	Fibonacci f1, f2;
 	for ( int i = 1; i <= 10; i += 1 ) {
-		sout | next( f1 ) | ' ' | next( f2 ) | endl;
+		sout | next( f1 ) | next( f2 ) | endl;
 	} // for
 }
Index: src/tests/ctor-autogen.c
===================================================================
--- src/tests/ctor-autogen.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/ctor-autogen.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,153 @@
+// TODO: add error cases (e.g., use of field constructors for managed types, etc.)
+
+enum Color { R, G, B };
+
+// empty struct/union should have generated ctor/dtors
+union U {};
+struct S {};
+
+struct SimpleUnion {
+	int x;
+	double y;
+	char z;
+};
+
+struct SimpleStruct {
+	int x;
+	double y;
+	char z;
+};
+
+// struct/union with members with generated ctor/dtors should themselves have generated ctor/dtors
+union PopulatedUnion {
+	Color c;
+	U u;
+	S s;
+};
+
+struct PopulatedStruct {
+	Color c;
+	U u;
+	S s;
+};
+
+// dtype-static generic type is otype
+forall(dtype T)
+struct DtypeStaticStruct {
+  T * data;
+  short size;
+};
+
+forall(dtype T)
+union DtypeStaticUnion {
+  T * data;
+  short size;
+};
+
+// dynamic generic type is otype
+forall(otype T)
+struct DynamicStruct {
+	T x;
+};
+
+forall(otype T)
+union DynamicUnion {
+	T x;
+};
+
+// struct/union that contains a generic type is
+struct GenericContainingStruct {
+	DynamicStruct(int) dsi;
+	DynamicStruct(double) dsd;
+	DynamicUnion(int) dui;
+	DynamicUnion(double) dud;
+	DtypeStaticStruct(int) dssi;
+	DtypeStaticStruct(float) dssf;
+	DtypeStaticUnion(int) dsui;
+	DtypeStaticUnion(float) dsuf;
+};
+
+union GenericContainingUnion {
+	DynamicStruct(int) dsi;
+	DynamicStruct(double) dsd;
+	DynamicUnion(int) dui;
+	DynamicUnion(double) dud;
+	DtypeStaticStruct(int) dssi;
+	DtypeStaticStruct(float) dssf;
+	DtypeStaticUnion(int) dsui;
+	DtypeStaticUnion(float) dsuf;
+};
+
+
+forall(otype T)
+T identity(T x) { return x; }
+
+// can identity e if only sized or only the assertion, but the combination breaks...
+// forall(dtype T | sized(T) | { void ?{}(T &); })
+// void identity(T x) {  }
+
+#if ERR1
+// managed type - defines a constructor - can't use field constructors
+struct Managed {
+	int x;
+};
+
+void ?{}(Managed & m) { m.x = 0; }
+
+// managed type since it contains a managed type - can't use field constructors
+struct InheritManaged {
+	Managed m;
+};
+
+Managed x = { 123 }; // error
+Managed y;           // okay
+
+InheritManaged z = { y };  // error?
+#endif
+
+int main() {
+	S s;
+	U u;
+	Color e;
+
+	// identity(R);  Color constant should be Color which is otype
+	identity(e);  // Color should be an otype
+	identity(u);  // U should be an otype
+	identity(s);  // S should be an otype
+
+	SimpleStruct ss;
+	SimpleUnion su;
+
+	identity(ss);
+	identity(su);
+
+	PopulatedStruct ps;
+	PopulatedUnion pu;
+
+	identity(ps); // should recursively be an otype
+	identity(pu); // should recursively be an otype
+
+	DynamicStruct(int) dsi;
+	DynamicStruct(double) dsd;
+	DynamicUnion(int) dui;
+	DynamicUnion(double) dud;
+	DtypeStaticStruct(int) dssi;
+	DtypeStaticStruct(float) dssf;
+	DtypeStaticUnion(int) dsui;
+	DtypeStaticUnion(float) dsuf;
+
+	identity(dsi);
+	identity(dsd);
+	// identity(dui); // xxx - codegen errors in generated thunk _temp3 (Box-pass-generated assignment return-temporary)
+	// identity(dud);
+	identity(dssi);
+	identity(dssf);
+	identity(dsui);
+	identity(dsuf);
+
+	GenericContainingStruct gcs;
+	GenericContainingUnion gcu;
+
+	identity(gcs);
+	identity(gcu);
+}
Index: src/tests/datingService.c
===================================================================
--- src/tests/datingService.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/datingService.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,114 @@
+//                               -*- Mode: C -*-
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// datingService.c --
+//
+// Author           : Peter A. Buhr
+// Created On       : Mon Oct 30 12:56:20 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Oct 30 23:02:11 2017
+// Update Count     : 15
+//
+
+#include <stdlib>										// random
+#include <fstream>
+#include <kernel>
+#include <thread>
+#include <unistd.h>										// getpid
+
+enum { NoOfPairs = 20 };
+
+monitor DatingService {
+	condition Girls[NoOfPairs], Boys[NoOfPairs];
+	unsigned int GirlPhoneNo, BoyPhoneNo;
+}; // DatingService
+
+unsigned int girl( DatingService & mutex ds, unsigned int PhoneNo, unsigned int ccode ) {
+	if ( is_empty( ds.Boys[ccode] ) ) {
+		wait( ds.Girls[ccode] );
+		ds.GirlPhoneNo = PhoneNo;
+	} else {
+		ds.GirlPhoneNo = PhoneNo;
+		signal_block( ds.Boys[ccode] );
+	} // if
+	return ds.BoyPhoneNo;
+} // DatingService girl
+
+unsigned int boy( DatingService & mutex ds, unsigned int PhoneNo, unsigned int ccode ) {
+	if ( is_empty( ds.Girls[ccode] ) ) {
+		wait( ds.Boys[ccode] );
+		ds.BoyPhoneNo = PhoneNo;
+	} else {
+		ds.BoyPhoneNo = PhoneNo;
+		signal_block( ds.Girls[ccode] );
+	} // if
+	return ds.GirlPhoneNo;
+} // DatingService boy
+
+unsigned int girlck[NoOfPairs];
+unsigned int boyck[NoOfPairs];
+
+thread Girl {
+	DatingService & TheExchange;
+	unsigned int id, ccode;
+}; // Girl
+
+void main( Girl & g ) {
+	yield( random( 100 ) );								// don't all start at the same time
+	unsigned int partner = girl( g.TheExchange, g.id, g.ccode );
+	//sout | "Girl:" | g.id | "is dating Boy at" | partner | "with ccode" | g.ccode | endl;
+	girlck[g.id] = partner;
+} // Girl main
+
+void ?{}( Girl & g, DatingService * TheExchange, unsigned int id, unsigned int ccode ) {
+	&g.TheExchange = TheExchange;
+	g.id = id;
+	g.ccode = ccode;
+} // Girl ?{}
+
+thread Boy {
+	DatingService &TheExchange;
+	unsigned int id, ccode;
+}; // Boy
+
+void main( Boy & b ) {
+	yield( random( 100 ) );								// don't all start at the same time
+	unsigned int partner = boy( b.TheExchange, b.id, b.ccode );
+	//sout | " Boy:" | b.id | "is dating Girl" | partner | "with ccode" | b.ccode | endl;
+	boyck[b.id] = partner;
+} // Boy main
+
+void ?{}( Boy & b, DatingService * TheExchange, unsigned int id, unsigned int ccode ) {
+	&b.TheExchange = TheExchange;
+	b.id = id;
+	b.ccode = ccode;
+} // Boy ?{}
+
+int main() {
+	DatingService TheExchange;
+	Girl *girls[NoOfPairs];
+	Boy  *boys[NoOfPairs];
+
+	random_seed( getpid() );
+
+	for ( unsigned int i = 0; i < NoOfPairs; i += 1 ) {
+		girls[i] = new( &TheExchange, i, i );
+		boys[i]  = new( &TheExchange, i, NoOfPairs - ( i + 1 ) );
+	} // for
+
+	for ( unsigned int i = 0; i < NoOfPairs; i += 1 ) {
+		delete( boys[i] );
+		delete( girls[i] );
+	} // for
+
+	for ( unsigned int i = 0; i < NoOfPairs; i += 1 ) {
+		if ( girlck[ boyck[i] ] != boyck[ girlck[i] ] ) abort();
+	} // for
+} // main
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa datingService.c" //
+// End: //
Index: src/tests/fmtLines.c
===================================================================
--- src/tests/fmtLines.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/fmtLines.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Sun Sep 17 21:56:15 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 18 11:35:57 2017
-// Update Count     : 31
+// Last Modified On : Sun Oct  1 11:57:19 2017
+// Update Count     : 34
 // 
 
@@ -23,9 +23,9 @@
 
 void ?{}( Format & fmt ) {
-    resume( fmt );										// start coroutine
+	resume( fmt );										// prime (start) coroutine
 }
 
 void ^?{}( Format & fmt ) {
-    if ( fmt.g != 0 || fmt.b != 0 ) sout | endl;
+	if ( fmt.g != 0 || fmt.b != 0 ) sout | endl;
 }
 
@@ -47,16 +47,16 @@
 
 void prt( Format & fmt, char ch ) {
-    fmt.ch = ch;
-    resume( fmt );
+	fmt.ch = ch;
+	resume( fmt );
 } // prt
 
 int main() {
-	Format fmt;
+	Format fmt;											// format characters into blocks of 4 and groups of 5 blocks per line
 	char ch;
 
-	for ( ;; ) {
+	Eof: for ( ;; ) {									// read until end of file
 		sin | ch;										// read one character
-	  if ( eof( sin ) ) break;							// eof ?
-		prt( fmt, ch );
+	  if ( eof( sin ) ) break Eof;						// eof ?
+		prt( fmt, ch );									// push character for formatting
 	} // for
 } // main
Index: src/tests/gmp.c
===================================================================
--- src/tests/gmp.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/gmp.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Tue Apr 19 08:55:51 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep  4 09:51:18 2017
-// Update Count     : 550
+// Last Modified On : Thu Sep 28 18:33:51 2017
+// Update Count     : 555
 // 
 
@@ -97,6 +97,5 @@
 
 	sout | "Factorial Numbers" | endl;
-	Int fact;
-	fact = 1;											// 1st case
+	Int fact = 1;										// 1st case
 	sout | (int)0 | fact | endl;
 	for ( unsigned int i = 1; i <= 40; i += 1 ) {
Index: src/tests/literals.c
===================================================================
--- src/tests/literals.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/literals.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,9 +10,10 @@
 // Created On       : Sat Sep  9 16:34:38 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Sep 12 07:45:46 2017
-// Update Count     : 88
+// Last Modified On : Mon Sep 25 20:26:00 2017
+// Update Count     : 132
 // 
 
 #ifdef __CFA__
+#include <stdint.h>
 #include <fstream>
 
@@ -72,5 +73,5 @@
 
 	 0123456789.e-09;   0123456789.e-09f;   0123456789.e-09l;   0123456789.e-09F;   0123456789.e-09L;   0123456789.e-09DL;
-	-0123456789.e-09;  -0123456789.e-09f;  -0123456789.e-09l;  -0123456789.e-09F;  -0123456789.e-09L;  -0123456789.e-09DL;
+	+0123456789.e-09;  +0123456789.e-09f;  +0123456789.e-09l;  +0123456789.e-09F;  +0123456789.e-09L;  +0123456789.e-09DL;
 	-0123456789.e-09;  -0123456789.e-09f;  -0123456789.e-09l;  -0123456789.e-09F;  -0123456789.e-09L;  -0123456789.e-09DL;
 
@@ -104,5 +105,5 @@
 
 	 0123456789.0123456789E-09;   0123456789.0123456789E-09f;   0123456789.0123456789E-09l;   0123456789.0123456789E-09F;   0123456789.0123456789E-09L;   0123456789.0123456789E-09DL;
-	-0123456789.0123456789E-09;  -0123456789.0123456789E-09f;  -0123456789.0123456789E-09l;  -0123456789.0123456789E-09F;  -0123456789.0123456789E-09L;  -0123456789.0123456789E-09DL;
+	+0123456789.0123456789E-09;  +0123456789.0123456789E-09f;  +0123456789.0123456789E-09l;  +0123456789.0123456789E-09F;  +0123456789.0123456789E-09L;  +0123456789.0123456789E-09DL;
 	-0123456789.0123456789E-09;  -0123456789.0123456789E-09f;  -0123456789.0123456789E-09l;  -0123456789.0123456789E-09F;  -0123456789.0123456789E-09L;  -0123456789.0123456789E-09DL;
 
@@ -118,5 +119,5 @@
 
 	 0x0123456789.p-09;   0x0123456789.p-09f;   0x0123456789.p-09l;   0x0123456789.p-09F;   0x0123456789.p-09L;
-	-0x0123456789.p-09;  -0x0123456789.p-09f;  -0x0123456789.p-09l;  -0x0123456789.p-09F;  -0x0123456789.p-09L;
+	+0x0123456789.p-09;  +0x0123456789.p-09f;  +0x0123456789.p-09l;  +0x0123456789.p-09F;  +0x0123456789.p-09L;
 	-0x0123456789.p-09;  -0x0123456789.p-09f;  -0x0123456789.p-09l;  -0x0123456789.p-09F;  -0x0123456789.p-09L;
 
@@ -130,5 +131,5 @@
 
 	 0x.0123456789P-09;   0x.0123456789P-09f;   0x.0123456789P-09l;   0x.0123456789P-09F;   0x.0123456789P-09L;
-	-0x.0123456789P-09;  -0x.0123456789P-09f;  -0x.0123456789P-09l;  -0x.0123456789P-09F;  -0x.0123456789P-09L;
+	+0x.0123456789P-09;  +0x.0123456789P-09f;  +0x.0123456789P-09l;  +0x.0123456789P-09F;  +0x.0123456789P-09L;
 	-0x.0123456789P-09;  -0x.0123456789P-09f;  -0x.0123456789P-09l;  -0x.0123456789P-09F;  -0x.0123456789P-09L;
 
@@ -142,10 +143,65 @@
 
 	 0X0123456789.0123456789P-09;   0X0123456789.0123456789P-09f;   0X0123456789.0123456789P-09l;   0X0123456789.0123456789P-09F;   0X0123456789.0123456789P-09L;
+	+0X0123456789.0123456789P-09;  +0X0123456789.0123456789P-09f;  +0X0123456789.0123456789P-09l;  +0X0123456789.0123456789P-09F;  +0X0123456789.0123456789P-09L;
 	-0X0123456789.0123456789P-09;  -0X0123456789.0123456789P-09f;  -0X0123456789.0123456789P-09l;  -0X0123456789.0123456789P-09F;  -0X0123456789.0123456789P-09L;
-	-0X0123456789.0123456789P-09;  -0X0123456789.0123456789P-09f;  -0X0123456789.0123456789P-09l;  -0X0123456789.0123456789P-09F;  -0X0123456789.0123456789P-09L;
+
+#ifdef __CFA__
+// fixed-size length
+
+	// octal
+	 01234567_l8;   01234567_l16;   01234567_l32;   01234567_l64;   01234567_l128;   01234567_l8u;   01234567_ul16;   01234567_l32u;   01234567_ul64;   01234567_ul128;
+	+01234567_l8;  +01234567_l16;  +01234567_l32;  +01234567_l64;  +01234567_l128;  +01234567_l8u;  +01234567_ul16;  +01234567_l32u;  +01234567_ul64;  +01234567_ul128;
+	-01234567_l8;  -01234567_l16;  -01234567_l32;  -01234567_l64;  -01234567_l128;  -01234567_l8u;  -01234567_ul16;  -01234567_l32u;  -01234567_ul64;  -01234567_ul128;
+
+	// decimal
+	 1234567890L8;   1234567890L16;   1234567890l32;   1234567890l64;   1234567890l128;   1234567890UL8;   1234567890L16U;   1234567890Ul32;   1234567890l64u;   1234567890l128u;
+	+1234567890L8;  +1234567890L16;  +1234567890l32;  +1234567890l64;  +1234567890l128;  +1234567890UL8;  +1234567890L16U;  +1234567890Ul32;  +1234567890l64u;  +1234567890l128u;
+	-1234567890L8;  -1234567890L16;  -1234567890l32;  -1234567890l64;  -1234567890l128;  -1234567890UL8;  -1234567890L16U;  -1234567890Ul32;  -1234567890l64u;  -1234567890l128u;
+
+	// hexadecimal
+	 0x0123456789abcdef_l8;   0x0123456789abcdef_l16;   0x0123456789abcdefl32;   0x0123456789abcdefl64;   0x0123456789abcdef_ul8;   0x0123456789abcdef_l16u;   0x0123456789abcdeful32;   0x0123456789abcdefl64u;
+	+0x0123456789abcdef_l8;  +0x0123456789abcdef_l16;  +0x0123456789abcdefl32;  +0x0123456789abcdefl64;  +0x0123456789abcdef_ul8;  +0x0123456789abcdef_l16u;  +0x0123456789abcdeful32;  +0x0123456789abcdefl64u;
+	-0x0123456789abcdef_l8;  -0x0123456789abcdef_l16;  -0x0123456789abcdefl32;  -0x0123456789abcdefl64;  -0x0123456789abcdef_ul8;  -0x0123456789abcdef_l16u;  -0x0123456789abcdeful32;  -0x0123456789abcdefl64u;
+
+	 0x0123456789ABCDEF_l8;   0x0123456789ABCDEF_l16;   0x0123456789ABCDEFl32;   0x0123456789ABCDEFl64;   0x0123456789ABCDEF_ul8;   0x0123456789ABCDEF_l16u;   0x0123456789ABCDEFul32;   0x0123456789ABCDEFl64u;
+	+0x0123456789ABCDEF_l8;  +0x0123456789ABCDEF_l16;  +0x0123456789ABCDEFl32;  +0x0123456789ABCDEFl64;  +0x0123456789ABCDEF_ul8;  +0x0123456789ABCDEF_l16u;  +0x0123456789ABCDEFul32;  +0x0123456789ABCDEFl64u;
+	-0x0123456789ABCDEF_l8;  -0x0123456789ABCDEF_l16;  -0x0123456789ABCDEFl32;  -0x0123456789ABCDEFl64;  -0x0123456789ABCDEF_ul8;  -0x0123456789ABCDEF_l16u;  -0x0123456789ABCDEFul32;  -0x0123456789ABCDEFl64u;
+
+	 0X0123456789abcdef_l8;   0X0123456789abcdef_l16;   0X0123456789abcdefl32;   0X0123456789abcdefl64;   0X0123456789abcdef_ul8;   0X0123456789abcdef_l16u;   0X0123456789abcdeful32;   0X0123456789abcdefl64u;
+	+0X0123456789abcdef_l8;  +0X0123456789abcdef_l16;  +0X0123456789abcdefl32;  +0X0123456789abcdefl64;  +0X0123456789abcdef_ul8;  +0X0123456789abcdef_l16u;  +0X0123456789abcdeful32;  +0X0123456789abcdefl64u;
+	-0X0123456789abcdef_l8;  -0X0123456789abcdef_l16;  -0X0123456789abcdefl32;  -0X0123456789abcdefl64;  -0X0123456789abcdef_ul8;  -0X0123456789abcdef_l16u;  -0X0123456789abcdeful32;  -0X0123456789abcdefl64u;
+
+	 0X0123456789ABCDEF_l8;   0X0123456789ABCDEF_l16;   0X0123456789ABCDEFl32;   0X0123456789ABCDEFl64;   0X0123456789ABCDEF_ul8;   0X0123456789ABCDEF_l16u;   0X0123456789ABCDEFul32;   0X0123456789ABCDEFl64u;
+	+0X0123456789ABCDEF_l8;  +0X0123456789ABCDEF_l16;  +0X0123456789ABCDEFl32;  +0X0123456789ABCDEFl64;  +0X0123456789ABCDEF_ul8;  +0X0123456789ABCDEF_l16u;  +0X0123456789ABCDEFul32;  +0X0123456789ABCDEFl64u;
+	-0X0123456789ABCDEF_l8;  -0X0123456789ABCDEF_l16;  -0X0123456789ABCDEFl32;  -0X0123456789ABCDEFl64;  -0X0123456789ABCDEF_ul8;  -0X0123456789ABCDEF_l16u;  -0X0123456789ABCDEFul32;  -0X0123456789ABCDEFl64u;
+
+	// floating
+	 0123456789.l32;   0123456789.l64;   0123456789.l80;   0123456789.l128;
+	+0123456789.l32;  +0123456789.l64;  +0123456789.l80;  +0123456789.l128;
+	-0123456789.l32;  -0123456789.l64;  -0123456789.l80;  -0123456789.l128;
+
+	 0123456789.e09L32;    0123456789.e09L64;    0123456789.e09L80;    0123456789.e09L128;
+	+0123456789.e+09L32;  +0123456789.e+09L64;  +0123456789.e+09L80;  +0123456789.e+09L128;
+	-0123456789.e-09L32;  -0123456789.e-09L64;  -0123456789.e-09L80;  -0123456789.e-09L128;
+
+	 .0123456789e09L32;    .0123456789e09L64;    .0123456789e09L80;    .0123456789e09L128;
+	+.0123456789E+09L32;  +.0123456789E+09L64;  +.0123456789E+09L80;  +.0123456789E+09L128;
+	-.0123456789E-09L32;  -.0123456789E-09L64;  -.0123456789E-09L80;  -.0123456789E-09L128;
+
+	 0123456789.0123456789L32;       0123456789.0123456789L64;       0123456789.0123456789L80;       0123456789.0123456789L128;
+	+0123456789.0123456789E09L32;   +0123456789.0123456789E09L64;   +0123456789.0123456789E09L80;   +0123456789.0123456789E09L128;
+	-0123456789.0123456789E+09L32;  -0123456789.0123456789E+09L64;  -0123456789.0123456789E+09L80;  -0123456789.0123456789E+09L128;
+	 0123456789.0123456789E-09L32;   0123456789.0123456789E-09L64;   0123456789.0123456789E-09L80;   0123456789.0123456789E-09L128;
+	
+	 0x0123456789.p09l32;   0x0123456789.p09l64;   0x0123456789.p09l80;   0x0123456789.p09l128;
+	+0x0123456789.p09l32;  +0x0123456789.p09l64;  +0x0123456789.p09l80;  +0x0123456789.p09l128;
+	-0x0123456789.p09l32;  -0x0123456789.p09l64;  -0x0123456789.p09l80;  -0x0123456789.p09l128;
+
+	 0x0123456789.p+09l32;   0x0123456789.p+09L64;   0x0123456789.p+09L80;   0x0123456789.p+09L128;
+	+0x0123456789.p-09l32;  +0x0123456789.p-09L64;  +0x0123456789.p-09L80;  +0x0123456789.p-09L128;
+	-0x.0123456789p09l32;   -0x.0123456789p09L64;   -0x.0123456789p09L80;   -0x.0123456789p09L128;
 
 // char, short, int suffix overloading
 
-#ifdef __CFA__
 	f( 'a' );
 	f( 20_hh );
Index: src/tests/matrixSum.c
===================================================================
--- src/tests/matrixSum.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/matrixSum.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,63 @@
+//                               -*- Mode: C -*- 
+// 
+// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// matrixSum.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Mon Oct  9 08:29:28 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Oct 29 21:08:48 2017
+// Update Count     : 2
+// 
+
+#include <fstream>
+#include <kernel>
+#include <thread>
+
+thread Adder {
+    int * row, cols, * subtotal;						// communication
+};
+
+void ?{}( Adder & adder, int row[], int cols, int & subtotal ) {
+    adder.row = row;
+    adder.cols = cols;
+    adder.subtotal = &subtotal;
+}
+
+void main( Adder & adder ) {
+    *adder.subtotal = 0;
+    for ( int c = 0; c < adder.cols; c += 1 ) {
+		*adder.subtotal += adder.row[c];
+    } // for
+}
+
+int main() {
+    const int rows = 10, cols = 1000;
+    int matrix[rows][cols], subtotals[rows], total = 0;
+    processor p;										// extra kernel thread
+
+    for ( int r = 0; r < rows; r += 1 ) {
+		for ( int c = 0; c < cols; c += 1 ) {
+			matrix[r][c] = 1;
+		} // for
+    } // for
+    Adder * adders[rows];
+    for ( int r = 0; r < rows; r += 1 ) {				// start threads to sum rows
+		adders[r] = &(*malloc()){ matrix[r], cols, subtotals[r] };
+//		adders[r] = new( matrix[r], cols, &subtotals[r] );
+    } // for
+    for ( int r = 0; r < rows; r += 1 ) {				// wait for threads to finish
+		delete( adders[r] );
+		total += subtotals[r];							// total subtotals
+    } // for
+    sout | total | endl;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa matrixSum.c" //
+// End: //
Index: src/tests/polymorphism.c
===================================================================
--- src/tests/polymorphism.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/polymorphism.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,41 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// polymorphism.c --
+//
+// Author           : Rob Schluntz
+// Created On       : Tue Oct 17 12:19:48 2017
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Oct 17 12:21:07 2017
+// Update Count     : 1
+//
+
+forall(otype T)
+T f(T x, T y) {
+	x = y;
+	return x;
+}
+
+forall(otype T) T ident(T x) {
+	return x;
+}
+
+int main() {
+	// ensure that x is not changed by the invocation of a polymorphic function
+	int x = 123;
+	int y = 456;
+	int z = f(x, y);
+	printf("%d %d %d\n", x, y, z);
+
+	// explicitly specialize function
+	int (*f)(int) = ident;
+	((int(*)(int))ident);
+	printf("%d %d\n", f(5), ((int(*)(int))ident)(5));
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// End: //
Index: src/tests/prodcons.c
===================================================================
--- src/tests/prodcons.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/prodcons.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,11 +10,11 @@
 // Created On       : Mon Sep 18 12:23:39 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Sep 20 17:03:28 2017
-// Update Count     : 40
+// Last Modified On : Mon Oct 30 23:06:05 2017
+// Update Count     : 42
 // 
 
 #include <fstream>
 #include <coroutine>
-#include <stdlib>										// rand48
+#include <stdlib>										// random
 #include <unistd.h>										// getpid
 
@@ -30,6 +30,6 @@
 	// 1st resume starts here
 	for ( int i = 0; i < prod.N; i += 1 ) {
-		int p1 = (unsigned int)rand48() % 100;			// non-negative
-		int p2 = (unsigned int)rand48() % 100;
+		int p1 = random( 100 );
+		int p2 = random( 100 );
 		sout | p1 | " " | p2 | endl;
 		int status = delivery( *prod.c, p1, p2 );
@@ -90,5 +90,5 @@
 	Prod prod;
 	Cons cons = { prod };
-	rand48seed( /* getpid() */ 103 );					// fixed seed for testing
+	random_seed( /* getpid() */ 103 );					// fixed seed for testing
 	start( prod, 5, cons );
 	sout | "main stops" | endl;
Index: src/tests/random.c
===================================================================
--- src/tests/random.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/random.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jul  5 21:29:30 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jul  6 18:00:29 2016
-// Update Count     : 3
+// Last Modified On : Mon Oct 30 23:06:49 2017
+// Update Count     : 6
 // 
 
@@ -19,27 +19,27 @@
 
 int main() {
-	//rand48seed( getpid() );								// set random seed
-	rand48seed( 1003 );									// fixed seed for repeatable tests
+	//srandom( getpid() );								// set random seed
+	random_seed( 1003 );								// fixed seed for repeatable tests
 
 	// test polymorphic calls to random and stream
-	char c = rand48();
+	char c = random();
 	sout | c | endl;
-	int i = rand48();
+	int i = random();
     sout | i | endl;
-	unsigned int ui = rand48();
+	unsigned int ui = random();
     sout | ui | endl;
-	long int li = rand48();
+	long int li = random();
     sout | li | endl;
-	unsigned long int uli = rand48();
+	unsigned long int uli = random();
     sout | uli | endl;
-    float f = rand48();
+    float f = random();
     sout | f | endl;
-    double d = rand48();
+    double d = random();
     sout | d | endl;
-    float _Complex fc = rand48();
+    float _Complex fc = random();
     sout | fc | endl;
-    double _Complex dc = rand48();
+    double _Complex dc = random();
     sout | dc | endl;
-    long double _Complex ldc = rand48();
+    long double _Complex ldc = random();
     sout | ldc | endl;
 } // main
Index: src/tests/rational.c
===================================================================
--- src/tests/rational.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/rational.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -10,6 +10,6 @@
 // Created On       : Mon Mar 28 08:43:12 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 23 21:40:11 2017
-// Update Count     : 66
+// Last Modified On : Tue Oct 10 23:25:04 2017
+// Update Count     : 67
 //
 
Index: src/tests/references.c
===================================================================
--- src/tests/references.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/references.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,84 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// references.c --
+//
+// Author           : Rob Schluntz
+// Created On       : Wed Aug 23 16:11:50 2017
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Aug 23 16:12:03
+// Update Count     : 2
+//
+
+struct Y { int i; };
+void ?{}(Y & y) { printf("Default constructing a Y\n"); }
+void ?{}(Y & y, Y other) { printf("Copy constructing a Y\n"); }
+void ^?{}(Y & y) { printf("Destructing a Y\n"); }
+Y ?=?(Y & y, Y other) { printf("Assigning a Y\n"); return y; }
+void ?{}(Y & y, int i) { printf("Value constructing a Y %d\n", i); y.i = i; }
+
+struct X { Y & r; Y y; };
+void ?{}(X & x) {
+	// ensure that r is not implicitly constructed
+}
+void ?{}(X & x, X other) {
+	// ensure that r is not implicitly constructed
+}
+void ^?{}(X & x) {
+	// ensure that r is not implicitly destructed
+}
+X ?=?(X & x, X other) { return x; }
+
+// ensure that generated functions do not implicitly operate on references
+struct Z { Y & r; Y y; };
+
+// test user-defined reference-returning function
+int & toref( int * p ) { return *p; }
+// test user-defined reference-parameter function
+int * toptr( int & r ) { return &r; }
+
+void changeRef( int & r ) {
+	r++;
+}
+
+int main() {
+	int x = 123456, *p1 = &x, **p2 = &p1, ***p3 = &p2,
+		&r1 = x,    &&r2 = r1,   &&&r3 = r2;
+	***p3 = 3;                          // change x
+	**p3 = &x;                          // change p1
+	*p3 = &p1;                          // change p2
+	int y = 0, z = 11, & ar[3] = { x, y, z };    // initialize array of references
+
+	// test that basic reference properties are true - r1 should be an alias for x
+	printf("%d %d %d\n", x, r1, &x == &r1);
+	r1 = 12;
+	printf("%d %d %d\n", x, r1, &x == &r1);
+
+	// test that functions using basic references work
+	printf("%d %d %d %d\n", toref(&x), toref(p1), toptr(r1) == toptr(x), toptr(r1) == &x);
+
+	changeRef( x );
+	changeRef( y );
+	changeRef( z );
+	printf("%d %d %d\n", x, y, z);
+	changeRef( r1 );
+	printf("%d %d\n", r1, x);
+
+	// test that reference members are not implicitly constructed/destructed/assigned
+	X x1, x2 = x1;
+	x1 = x2;
+
+	Z z1, z2 = z1;
+	Y z1r = 56, z2r = 78;
+	&z1.r = &z1r;
+	&z2.r = &z2r;
+	z1 = z2;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// End: //
+
Index: src/tests/sched-ext-barge.c
===================================================================
--- src/tests/sched-ext-barge.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/sched-ext-barge.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,92 @@
+//---------------------------------------------------------
+// Barging test
+// Ensures that no barging can occur between :
+//   - the frontend of the waitfor and the waited call
+//   - the waited call and the backend of the waitfor
+//---------------------------------------------------------
+
+#include <fstream>
+#include <kernel>
+#include <monitor>
+#include <stdlib>
+#include <thread>
+
+#include <stdbool.h>
+
+static const unsigned long N = 5_000ul;
+
+enum state_t { WAITFOR, CALL, BARGE };
+
+monitor global_t {
+	bool done;
+	bool started;
+	state_t state;
+};
+
+void ?{} ( global_t & this ) {
+	this.done = false;
+	this.started = false;
+	this.state = BARGE;
+}
+
+void ^?{} ( global_t & mutex this ) {}
+
+global_t global;
+
+bool barge( global_t & mutex this ) {
+	this.state = BARGE;
+	return !this.done;
+}
+
+thread barger_t {};
+void main( barger_t & this ) {
+	yield();
+	while( barge( global ) ) { yield(random( 10 )); }
+}
+
+bool do_call( global_t & mutex this ) {
+	yield(random( 10 ));
+	if( this.state != WAITFOR && !this.done && this.started ) {
+		serr | "Barging before caller detected" | endl;
+	}
+
+	this.state = CALL;
+	return !this.done;
+}
+
+thread caller_t {};
+void main( caller_t & this ) {
+	while( do_call(global) ) { yield(random( 10 )); }
+}
+
+void do_wait( global_t & mutex this ) {
+	this.started = true;
+	for( int i = 0; i < N; i++) {
+		yield(random( 10 ));
+		this.state = WAITFOR;
+		waitfor(do_call, this) {
+			sout | i | endl;
+		}
+
+		if( this.state != CALL ) {
+			serr | "Barging after caller detected" | endl;
+		}
+	}
+
+	this.done = true;
+}
+
+thread waiter_t{};
+void main( waiter_t & this ) {
+	do_wait(global);
+}
+
+int main() {
+	sout | "Starting" | endl;
+	{
+		barger_t bargers[17];
+		caller_t callers[7];
+		waiter_t waiters;
+	}
+	sout | "Stopping" | endl;
+}
Index: src/tests/sched-ext-dtor.c
===================================================================
--- src/tests/sched-ext-dtor.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/sched-ext-dtor.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,63 @@
+//---------------------------------------------------------
+// Barging test
+// Ensures the statement order is reverse when using waitfor ^?{}
+//---------------------------------------------------------
+
+#include <fstream>
+#include <kernel>
+#include <monitor>
+#include <stdlib>
+#include <thread>
+
+#include <stdbool.h>
+
+static const unsigned long N = 5_000ul;
+
+enum state_t {
+	CTOR,
+	MAIN,
+	AFTER,
+	END,
+	DTOR
+};
+
+thread dummy_t {
+	state_t state;
+};
+
+static inline void set_state( dummy_t & this, state_t state) {
+	switch(state) {
+		case CTOR  : break;
+		case MAIN  : if( this.state != CTOR  ) { serr | "ERROR Expected state to be CTOR"  | endl; abort(); } this.state = state; break;
+		case AFTER : if( this.state != MAIN  ) { serr | "ERROR Expected state to be MAIN"  | endl; abort(); } this.state = state; break;
+		case END   : if( this.state != AFTER ) { serr | "ERROR Expected state to be AFTER" | endl; abort(); } this.state = state; break;
+		case DTOR  : if( this.state != END   ) { serr | "ERROR Expected state to be END"   | endl; abort(); } this.state = state; break;
+	}
+}
+
+void ^?{}( dummy_t & mutex this ) {
+	set_state( this, DTOR );
+}
+
+void ?{}( dummy_t & this ) {
+	this.state = CTOR;
+}
+
+void main( dummy_t & this ) {
+	yield(random( 10 ));
+	set_state( this, MAIN );
+	waitfor( ^?{}, this ) {
+		set_state( this, AFTER );
+	}
+	set_state( this, END );
+}
+
+int main() {
+	sout | "Starting" | endl;
+	processor p;
+	for( int i = 0; i < N; i++ ){
+		dummy_t dummy[4];
+		yield( random( 100 ) );
+	}
+	sout | "Stopping" | endl;
+}
Index: src/tests/sched-ext-else.c
===================================================================
--- src/tests/sched-ext-else.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/sched-ext-else.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,48 @@
+#include <fstream>
+#include <monitor>
+
+#include <stdbool.h>
+
+monitor M {};
+
+void notcalled( M & mutex m ) {
+	abort();
+}
+
+void test( M & mutex m ) {
+	int i = 0;
+	sout | "Starting" | endl;
+
+	when( false ) waitfor( notcalled, m );
+
+	sout | "Step" | i++ | endl;
+
+	waitfor( notcalled, m ); or else {
+		sout | "else called" | endl;
+	}
+
+	sout | "Step" | i++ | endl;
+
+	when( true ) waitfor( notcalled, m ); or when( true ) else {
+		sout | "else called" | endl;
+	}
+
+	sout | "Step" | i++ | endl;
+
+	when( false ) waitfor( notcalled, m ); or when( true ) else {
+		sout | "else called" | endl;
+	}
+
+	sout | "Step" | i++ | endl;
+
+	when( false ) waitfor( notcalled, m ); or when( false ) else {
+		sout | "else called" | endl;
+	}
+
+	sout | "Done" | endl;
+}
+
+int main() {
+	M m;
+	test(m);
+}
Index: src/tests/sched-ext-parse.c
===================================================================
--- src/tests/sched-ext-parse.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/sched-ext-parse.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -1,2 +1,11 @@
+//----------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------------------
+//
+//		DEPRECATED TEST
+//		DIFFERS BETWEEN DEBUG AND RELEASE
+//
+//----------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------------------
+
 #include <monitor>
 
@@ -80,5 +89,5 @@
 		16;
 	}
- 	or waitfor( f1, a, a ) {
+ 	or waitfor( f2, a, a ) {
 		17;
 	}
Index: src/tests/sched-ext-recurse.c
===================================================================
--- src/tests/sched-ext-recurse.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/sched-ext-recurse.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,145 @@
+//----------------------------------------------------------------
+// Recursion test
+// Ensures that proper ordering occurs between the nested waitfors
+//-----------------------------------------------------------------
+
+#include <fstream>
+#include <kernel>
+#include <monitor>
+#include <stdlib>
+#include <thread>
+
+#include <stdbool.h>
+#include <time.h>
+
+static const unsigned long N = 5_000ul;
+
+static inline void rand_yield() { yield(random( 10 )); }
+
+enum state_t { FIRST, SECOND, THIRD, LAST, STOP };
+void shuffle(enum state_t * array)
+{
+	int i;
+	for (i = 0; i < 4; i++)
+	{
+		int j = random( 4 );
+		enum state_t t = array[j];
+		array[j] = array[i];
+		array[i] = t;
+	}
+}
+
+
+monitor global_t {
+	int counter;
+	volatile bool ready;
+	state_t actions[4];
+};
+
+void ?{} ( global_t & this ) {
+	this.counter = 0;
+	this.ready = false;
+	this.actions[0] = FIRST;
+	this.actions[1] = SECOND;
+	this.actions[2] = THIRD;
+	this.actions[3] = LAST;
+	shuffle( this.actions );
+}
+
+void ^?{} ( global_t & mutex this ) {}
+
+global_t global;
+
+state_t call4( global_t & mutex this, int idx ) {
+	sout | "Last";
+
+	rand_yield();
+	this.counter++;
+	this.ready = false;
+	shuffle( this.actions );
+
+	return this.counter < N ? (state_t)this.actions[idx] : (state_t)STOP;
+}
+
+state_t call3( global_t & mutex this, int idx ) {
+	sout | "3rd";
+
+	rand_yield();
+	waitfor( call4, this );
+	rand_yield();
+
+	sout | "3rd";
+
+	return this.counter < N ? (state_t)this.actions[idx] : (state_t)STOP;
+}
+
+state_t call2( global_t & mutex this, int idx ) {
+	sout | "2nd";
+
+	rand_yield();
+	waitfor( call3, this );
+	rand_yield();
+
+	sout | "2nd";
+
+	return this.counter < N ? (state_t)this.actions[idx] : (state_t)STOP;
+}
+
+state_t call1( global_t & mutex this, int idx ) {
+	this.ready = true;
+
+	sout | this.counter | "1st";
+
+	rand_yield();
+	waitfor( call2, this );
+	rand_yield();
+
+	sout | "1st" | endl;
+
+	return this.counter < N ? (state_t)this.actions[idx] : (state_t)STOP;
+}
+
+thread waiter_t{
+	int     idx;
+	state_t state;
+};
+
+void ^?{} ( waiter_t & mutex this ) {}
+void ?{} ( waiter_t & this ) {}
+
+void ?{}( waiter_t & this, int idx, state_t state ) {
+	this.idx   = idx;
+	this.state = state;
+}
+
+
+void main( waiter_t & this ) {
+	while( this.state != STOP ) {
+		rand_yield();
+
+		switch( this.state ) {
+			case FIRST  :                                     this.state = call1( global, this.idx ); break;
+			case SECOND : while( !global.ready ) { yield(); } this.state = call2( global, this.idx ); break;
+			case THIRD  : while( !global.ready ) { yield(); } this.state = call3( global, this.idx ); break;
+			case LAST   : while( !global.ready ) { yield(); } this.state = call4( global, this.idx ); break;
+			case STOP   : serr | "This should not happen" | endl;
+		}
+	}
+}
+
+static waiter_t * volatile the_threads;
+
+int main() {
+	random_seed( time(NULL) );
+	sout | "Starting" | endl;
+	{
+		waiter_t waiters[4] = {
+			{ 0, FIRST  },
+			{ 1, SECOND },
+			{ 2, THIRD  },
+			{ 3, LAST   }
+		};
+		the_threads = waiters;
+	}
+	sout | "Stopping" | endl;
+}
Index: src/tests/sched-ext-statment.c
===================================================================
--- src/tests/sched-ext-statment.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/sched-ext-statment.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,136 @@
+#include <fstream>
+#include <kernel>
+#include <monitor>
+#include <thread>
+
+#include <stdbool.h>
+
+monitor M {
+	int index;
+	int last_val;
+	int calls[7];
+};
+
+volatile bool start = false;
+
+void ?{}( M & this ) {
+	this.index = 0;
+	this.last_val = 0;
+	for( int i = 0; i < 7; i++ ) {
+		this.calls[i] = 100; //10_000;
+	}
+}
+
+void ^?{} ( M &  mutex this ) {}
+
+int get_index( M & mutex this ) {
+	this.index += 1;
+	return this.index;
+}
+
+bool call1( M & mutex this ) {
+	this.last_val = 1;
+	this.calls[0] -= 1;
+	return this.calls[0] > 0;
+}
+
+bool call2( M & mutex this ) {
+	this.last_val = 2;
+	this.calls[1] -= 1;
+	return this.calls[1] > 0;
+}
+
+bool call3( M & mutex this ) {
+	this.last_val = 3;
+	this.calls[2] -= 1;
+	return this.calls[2] > 0;
+}
+
+bool call4( M & mutex this ) {
+	this.last_val = 4;
+	this.calls[3] -= 1;
+	return this.calls[3] > 0;
+}
+
+bool call5( M & mutex this ) {
+	this.last_val = 5;
+	this.calls[4] -= 1;
+	return this.calls[4] > 0;
+}
+
+bool call6( M & mutex this ) {
+	this.last_val = 6;
+	this.calls[5] -= 1;
+	return this.calls[5] > 0;
+}
+
+bool call7( M & mutex this ) {
+	this.last_val = 7;
+	this.calls[6] -= 1;
+	return this.calls[6] > 0;
+}
+
+M m;
+thread caller{};
+
+bool call( int index ) {
+	switch( index ) {
+		case 1: return call1( m );
+		case 2: return call2( m );
+		case 3: return call3( m );
+		case 4: return call4( m );
+		case 5: return call5( m );
+		case 6: return call6( m );
+		case 7: return call7( m );
+		default :
+			serr | "Incorrect index" | index | endl;
+			abort();
+	}
+}
+
+void main( caller & this ) {
+	int index = get_index( m );
+	while( !start ) yield();
+	while( call( index ) );
+}
+
+void do_wait( M & mutex this ) {
+	bool done = false;
+
+	start = true;
+
+	while( !done ) {
+		   waitfor( get_index, this );
+		or waitfor( call1, this ) { sout | "Statement" | endl; if( this.last_val != 1 ) { serr | "Incorrect index: expected" | 1 | "got" | this.last_val | endl; } }
+		or waitfor( call2, this ) { sout | "Statement" | endl; if( this.last_val != 2 ) { serr | "Incorrect index: expected" | 2 | "got" | this.last_val | endl; } }
+		or waitfor( call3, this ) { sout | "Statement" | endl; if( this.last_val != 3 ) { serr | "Incorrect index: expected" | 3 | "got" | this.last_val | endl; } }
+		or waitfor( call4, this ) { sout | "Statement" | endl; if( this.last_val != 4 ) { serr | "Incorrect index: expected" | 4 | "got" | this.last_val | endl; } }
+		or waitfor( call5, this ) { sout | "Statement" | endl; if( this.last_val != 5 ) { serr | "Incorrect index: expected" | 5 | "got" | this.last_val | endl; } }
+		or waitfor( call6, this ) { sout | "Statement" | endl; if( this.last_val != 6 ) { serr | "Incorrect index: expected" | 6 | "got" | this.last_val | endl; } }
+		or waitfor( call7, this ) { sout | "Statement" | endl; if( this.last_val != 7 ) { serr | "Incorrect index: expected" | 7 | "got" | this.last_val | endl; } }
+
+		done = true;
+		for( int i = 0; i < 7; i++ ) {
+			if( this.calls[i] > 0 ) {
+				done = false;
+				break;
+			}
+		}
+	}
+}
+
+thread waiter{};
+
+void main( waiter & this ) {
+	do_wait( m );
+}
+
+int main() {
+	processor p[2];
+	sout | "Starting" | endl;
+	{
+		caller c[7];
+		waiter w;
+	}
+	sout | "Stopping" | endl;
+}
Index: src/tests/sched-ext-when.c
===================================================================
--- src/tests/sched-ext-when.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/sched-ext-when.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,87 @@
+//----------------------------------------------------------------
+// When test
+// Ensures that when clauses on waitfor are respected
+//-----------------------------------------------------------------
+
+#include <fstream>
+#include <kernel>
+#include <monitor>
+#include <stdlib>
+#include <thread>
+
+#include <stdbool.h>
+#include <time.h>
+
+static const unsigned long N = 4_998ul;
+
+static inline void rand_yield() { yield(random( 10 )); }
+
+monitor global_t {
+	int last_call;
+	bool done;
+};
+
+void ?{} ( global_t & this ) {
+	this.last_call = 6;
+	this.done = false;
+}
+
+void ^?{} ( global_t & mutex this ) {}
+
+global_t global;
+
+bool call1( global_t & mutex this ) { this.last_call = 1; return this.done; }
+bool call2( global_t & mutex this ) { this.last_call = 2; return this.done; }
+bool call3( global_t & mutex this ) { this.last_call = 3; return this.done; }
+bool call4( global_t & mutex this ) { this.last_call = 4; return this.done; }
+bool call5( global_t & mutex this ) { this.last_call = 5; return this.done; }
+bool call6( global_t & mutex this ) { this.last_call = 6; return this.done; }
+
+thread caller_t{};
+void main( caller_t & this ) {
+	while( true ) {
+		rand_yield();
+		if( call1( global ) ) return;
+		rand_yield();
+		if( call2( global ) ) return;
+		rand_yield();
+		if( call3( global ) ) return;
+		rand_yield();
+		if( call4( global ) ) return;
+		rand_yield();
+		if( call5( global ) ) return;
+		rand_yield();
+		if( call6( global ) ) return;
+	}
+}
+
+void arbiter( global_t & mutex this ) {
+	for( int i = 0; i < N; i++ ) {
+		   when( this.last_call == 6 ) waitfor( call1, this ) { if( this.last_call != 1) { serr | "Expected last_call to be 1 got" | this.last_call | endl; } }
+		or when( this.last_call == 1 ) waitfor( call2, this ) { if( this.last_call != 2) { serr | "Expected last_call to be 2 got" | this.last_call | endl; } }
+		or when( this.last_call == 2 ) waitfor( call3, this ) { if( this.last_call != 3) { serr | "Expected last_call to be 3 got" | this.last_call | endl; } }
+		or when( this.last_call == 3 ) waitfor( call4, this ) { if( this.last_call != 4) { serr | "Expected last_call to be 4 got" | this.last_call | endl; } }
+		or when( this.last_call == 4 ) waitfor( call5, this ) { if( this.last_call != 5) { serr | "Expected last_call to be 5 got" | this.last_call | endl; } }
+		or when( this.last_call == 5 ) waitfor( call6, this ) { if( this.last_call != 6) { serr | "Expected last_call to be 6 got" | this.last_call | endl; } }
+
+		sout | this.last_call | endl;
+	}
+
+	this.done = true;
+}
+
+thread arbiter_t{};
+void main( arbiter_t & this ) {
+	arbiter( global );
+}
+
+int main() {
+	random_seed( time(NULL) );
+	sout | "Starting" | endl;
+	{
+		arbiter_t arbiter;
+		caller_t callers[7];
+
+	}
+	sout | "Stopping" | endl;
+}
Index: src/tests/sched-ext.c
===================================================================
--- src/tests/sched-ext.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/sched-ext.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -26,8 +26,4 @@
 volatile bool done;
 
-unsigned rand10() {
-	return (unsigned)rand48() % 10;
-}
-
 //----------------------------------------------------------------------------------------------------
 // Acceptor
@@ -36,5 +32,5 @@
 void do_wait( global_t * mutex a ) {
 	sout | "Waiting to accept" | endl;
-	yield( rand10() );
+	yield( random( 10 ) );
 
 	sout | "Accepting" | endl;
@@ -45,8 +41,8 @@
 	acceptable.monitors      = &a;
 
-	__accept_internal( 1, &acceptable );
+	__waitfor_internal( 1, &acceptable );
 
 	sout | "Accepted" | endl;
-	yield( rand10() );
+	yield( random( 10 ) );
 }
 
@@ -68,7 +64,7 @@
 void main( Acceptee* this ) {
 	while( !done ) {
-		yield( rand10() );
+		yield( random( 10 ) );
 		do_notify( &globalA );
-		yield( rand10() );
+		yield( random( 10 ) );
 	}
 }
@@ -78,5 +74,5 @@
 int main(int argc, char* argv[]) {
 	done = false;
-	rand48seed( time( NULL ) );
+	random_seed( time( NULL ) );
 	printf("%p\n", &globalA);
 	sout | "Starting" | endl;
Index: src/tests/sched-int-barge.c
===================================================================
--- src/tests/sched-int-barge.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/sched-int-barge.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -1,2 +1,10 @@
+//----------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------------------
+//
+//		DEPRECATED TEST
+//
+//----------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------------------
+
 #include <fstream>
 #include <kernel>
@@ -56,7 +64,7 @@
 
 	if( action == 0 ) {
-		c.do_signal = max( ((unsigned)rand48()) % 10, 1);
-		c.do_wait1 = ((unsigned)rand48()) % (c.do_signal);
-		c.do_wait2 = ((unsigned)rand48()) % (c.do_signal);
+		c.do_signal = max( random( 10 ), 1);
+		c.do_wait1 = random( c.do_signal );
+		c.do_wait2 = random( c.do_signal );
 
 		if(c.do_wait1 == c.do_wait2) sout | "Same" | endl;
@@ -65,5 +73,5 @@
 	if( action == c.do_wait1 || action == c.do_wait2 ) {
 		c.state = WAIT;
-		wait( &cond );
+		wait( cond );
 
 		if(c.state != SIGNAL) {
@@ -75,6 +83,6 @@
 		c.state = SIGNAL;
 
-		signal( &cond );
-		signal( &cond );
+		signal( cond );
+		signal( cond );
 	}
 	else {
@@ -101,5 +109,5 @@
 
 int main(int argc, char* argv[]) {
-	rand48seed(0);
+	random_seed(0);
 	processor p;
 	{
Index: src/tests/sched-int-block.c
===================================================================
--- src/tests/sched-int-block.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/sched-int-block.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -1,2 +1,10 @@
+//---------------------------------------------------------
+// Barging test
+// Ensures that no barging can occur between :
+//   - the frontend of the signal_block and the signaled thread
+//   - the signaled  threadand the backend of the signal_block
+//---------------------------------------------------------
+
+
 #include <fstream>
 #include <kernel>
@@ -39,7 +47,7 @@
 //------------------------------------------------------------------------------
 void wait_op( global_data_t & mutex a, global_data_t & mutex b, unsigned i ) {
-	wait( &cond, (uintptr_t)this_thread );
+	wait( cond, (uintptr_t)this_thread );
 
-	yield( ((unsigned)rand48()) % 10 );
+	yield( random( 10 ) );
 
 	if(a.last_thread != a.last_signaller || b.last_thread != b.last_signaller ) {
@@ -50,5 +58,5 @@
 	a.last_thread = b.last_thread = this_thread;
 
-	yield( ((unsigned)rand48()) % 10 );
+	yield( random( 10 ) );
 }
 
@@ -62,18 +70,18 @@
 //------------------------------------------------------------------------------
 void signal_op( global_data_t & mutex a, global_data_t & mutex b ) {
-	yield( ((unsigned)rand48()) % 10 );
+	yield( random( 10 ) );
 
 	[a.last_thread, b.last_thread, a.last_signaller, b.last_signaller] = this_thread;
 
-	if( !is_empty( &cond ) ) {
+	if( !is_empty( cond ) ) {
 
-		thread_desc * next = front( &cond );
+		thread_desc * next = front( cond );
 
-		if( ! signal_block( &cond ) ) {
+		if( ! signal_block( cond ) ) {
 			sout | "ERROR expected to be able to signal" | endl;
 			abort();
 		}
 
-		yield( ((unsigned)rand48()) % 10 );
+		yield( random( 10 ) );
 
 		if(a.last_thread != next || b.last_thread != next) {
@@ -110,5 +118,5 @@
 
 int main(int argc, char* argv[]) {
-	rand48seed( time( NULL ) );
+	random_seed( time( NULL ) );
 	done = false;
 	processor p;
Index: src/tests/sched-int-disjoint.c
===================================================================
--- src/tests/sched-int-disjoint.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/sched-int-disjoint.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -59,5 +59,5 @@
 // Waiting logic
 bool wait( global_t & mutex m, global_data_t & mutex d ) {
-	wait( &cond );
+	wait( cond );
 	if( d.state != SIGNAL ) {
 		sout | "ERROR barging!" | endl;
@@ -80,5 +80,5 @@
 //------------------------------------------------------------------------------
 // Signalling logic
-void signal( condition * cond, global_t & mutex a, global_data_t & mutex b ) {
+void signal( condition & cond, global_t & mutex a, global_data_t & mutex b ) {
 	b.state = SIGNAL;
 	signal( cond );
@@ -86,7 +86,7 @@
 
 void logic( global_t & mutex a ) {
-	signal( &cond, a, data );
+	signal( cond, a, data );
 
-	yield( (unsigned)rand48() % 10 );
+	yield( random( 10 ) );
 
 	//This is technically a mutual exclusion violation but the mutex monitor protects us
@@ -109,5 +109,5 @@
 // Main loop
 int main(int argc, char* argv[]) {
-	rand48seed( time( NULL ) );
+	random_seed( time( NULL ) );
 	all_done = false;
 	processor p;
Index: src/tests/sched-int-wait.c
===================================================================
--- src/tests/sched-int-wait.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/sched-int-wait.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -1,2 +1,8 @@
+//---------------------------------------------------------
+// Multi wait test
+// Ensures that no deadlock from waiting/signalling conditions
+//---------------------------------------------------------
+
+
 #include <fstream>
 #include <kernel>
@@ -35,17 +41,17 @@
 //----------------------------------------------------------------------------------------------------
 // Tools
-void signal( condition * cond, global_t & mutex a, global_t & mutex b ) {
+void signal( condition & cond, global_t & mutex a, global_t & mutex b ) {
 	signal( cond );
 }
 
-void signal( condition * cond, global_t & mutex a, global_t & mutex b, global_t & mutex c ) {
+void signal( condition & cond, global_t & mutex a, global_t & mutex b, global_t & mutex c ) {
 	signal( cond );
 }
 
-void wait( condition * cond, global_t & mutex a, global_t & mutex b ) {
+void wait( condition & cond, global_t & mutex a, global_t & mutex b ) {
 	wait( cond );
 }
 
-void wait( condition * cond, global_t & mutex a, global_t & mutex b, global_t & mutex c ) {
+void wait( condition & cond, global_t & mutex a, global_t & mutex b, global_t & mutex c ) {
 	wait( cond );
 }
@@ -56,17 +62,17 @@
 
 	while( waiter_left != 0 ) {
-		unsigned action = (unsigned)rand48() % 4;
+		unsigned action = random( 4 );
 		switch( action ) {
 			case 0:
-				signal( &condABC, globalA, globalB, globalC );
+				signal( condABC, globalA, globalB, globalC );
 				break;
 			case 1:
-				signal( &condAB , globalA, globalB );
+				signal( condAB , globalA, globalB );
 				break;
 			case 2:
-				signal( &condBC , globalB, globalC );
+				signal( condBC , globalB, globalC );
 				break;
 			case 3:
-				signal( &condAC , globalA, globalC );
+				signal( condAC , globalA, globalC );
 				break;
 			default:
@@ -82,5 +88,5 @@
 void main( WaiterABC & this ) {
 	for( int i = 0; i < N; i++ ) {
-		wait( &condABC, globalA, globalB, globalC );
+		wait( condABC, globalA, globalB, globalC );
 	}
 
@@ -92,5 +98,5 @@
 void main( WaiterAB & this ) {
 	for( int i = 0; i < N; i++ ) {
-		wait( &condAB , globalA, globalB );
+		wait( condAB , globalA, globalB );
 	}
 
@@ -102,5 +108,5 @@
 void main( WaiterAC & this ) {
 	for( int i = 0; i < N; i++ ) {
-		wait( &condAC , globalA, globalC );
+		wait( condAC , globalA, globalC );
 	}
 
@@ -112,5 +118,5 @@
 void main( WaiterBC & this ) {
 	for( int i = 0; i < N; i++ ) {
-		wait( &condBC , globalB, globalC );
+		wait( condBC , globalB, globalC );
 	}
 
@@ -121,5 +127,5 @@
 // Main
 int main(int argc, char* argv[]) {
-	rand48seed( time( NULL ) );
+	random_seed( time( NULL ) );
 	waiter_left = 4;
 	processor p[2];
Index: src/tests/sum.c
===================================================================
--- src/tests/sum.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/sum.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,106 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// sum.c -- test resolvers ability to deal with many variables with the same name and to use the minimum number of casts
+//    necessary to disambiguate overloaded variable names.
+//
+// Author           : Peter A. Buhr
+// Created On       : Wed May 27 17:56:53 2015
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Oct 29 10:29:12 2017
+// Update Count     : 260
+//
+
+#include <fstream>
+
+void ?{}( int & c, zero_t ) { c = 0; }
+
+trait sumable( otype T ) {
+	void ?{}( T &, zero_t );							// constructor from 0 literal
+	T ?+?( T, T );										// assortment of additions
+	T ?+=?( T &, T );
+	T ++?( T & );
+	T ?++( T & );
+}; // sumable
+
+forall( otype T | sumable( T ) )						// use trait
+T sum( unsigned int n, T a[] ) {
+	T total = 0;										// instantiate T, select 0
+	for ( unsigned int i = 0; i < n; i += 1 )
+		total += a[i];									// select +
+	return total;
+} // sum
+
+// Not in prelude.
+unsigned char ?+?( unsigned char t1, unsigned char t2 ) { return (int)t1 + t2; } // cast forces integer addition, otherwise recursion
+unsigned char ?+=?( unsigned char & t1, unsigned char t2 ) { t1 = t1 + t2; return t1; }
+unsigned char ++?( unsigned char & t ) { t += 1; return t; }
+unsigned char ?++( unsigned char & t ) { unsigned char temp = t; t += 1; return temp; }
+
+// Not in prelude.
+void ?{}( unsigned char & c, zero_t ) { c = 0; }
+void ?{}( float & f, zero_t ) { f = 0.0; }
+void ?{}( double & d, zero_t ) { d = 0.0; }
+
+int main( void ) {
+	const int low = 5, High = 15, size = High - low;
+
+	unsigned char s = 0, a[size], v = (char)low;
+	for ( int i = 0; i < size; i += 1, v += 1 ) {
+		s += v;
+		a[i] = v;
+	} // for
+	sout | "sum from" | low | "to" | High | "is"
+		| sum( size, (unsigned char *)a ) | ", check" | (int)s | endl;
+
+	int s = 0, a[size], v = low;
+	for ( int i = 0; i < size; i += 1, v += 1 ) {
+		s += (int)v;
+		a[i] = (int)v;
+	} // for
+	sout | "sum from" | low | "to" | High | "is"
+		| sum( size, (int *)a ) | ", check" | (int)s | endl;
+
+	float s = 0.0f, a[size], v = low / 10.0f;
+	for ( int i = 0; i < size; i += 1, v += 0.1f ) {
+		s += (float)v;
+		a[i] = (float)v;
+	} // for
+	sout | "sum from" | low / 10.0f | "to" | High / 10.0f | "is"
+		| sum( size, (float *)a ) | ", check" | (float)s | endl;
+
+	double s = 0.0, a[size], v = low / 10.0;
+	for ( int i = 0; i < size; i += 1, v += 0.1 ) {
+		s += (double)v;
+		a[i] = (double)v;
+	} // for
+	sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
+		| sum( size, (double *)a ) | ", check" | (double)s | endl;
+
+	struct S { int i, j; };
+	void ?{}( S & s ) { s.[i, j] = 0; }
+	void ?{}( S & s, int i, int j ) { s.[i,j] = [i, j]; }
+	void ?{}( S & s, zero_t ) { s.[i,j] = 0; }
+	void ?{}( S & s, one_t ) { s.[i,j] = 1; }
+	S ?+?( S t1, S t2 ) { return (S){ t1.i + t2.i, t1.j + t2.j }; }
+	S ?+=?( S & t1, S t2 ) { t1 = t1 + t2; return t1; }
+	S ++?( S & t ) { t += (S){1}; return t; }
+	S ?++( S & t ) { S temp = t; t += (S){1}; return temp; }
+	ofstream * ?|?( ofstream * os, S v ) { return os | v.i | v.j; }
+
+	S s = (S){0}, a[size], v = { low, low };
+	for ( int i = 0; i < size; i += 1, v += (S){1} ) {
+		s += (S)v;
+		a[i] = (S)v;
+	} // for
+	sout | "sum from" | low | "to" | High | "is"
+		| sum( size, (S *)a ) | ", check" | (S)s | endl;
+} // main
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa sum.c" //
+// End: //
Index: src/tests/thread.c
===================================================================
--- src/tests/thread.c	(revision 783152722192169260028e02eebed9a9a0c374a7)
+++ src/tests/thread.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -15,9 +15,9 @@
 		yield();
 	}
-	V(this.lock);
+	V(*this.lock);
 }
 
 void main(Second& this) {
-	P(this.lock);
+	P(*this.lock);
 	for(int i = 0; i < 10; i++) {
 		sout | "Second : Suspend No." | i + 1 | endl;
Index: src/tests/typedefRedef.c
===================================================================
--- src/tests/typedefRedef.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
+++ src/tests/typedefRedef.c	(revision 3f7e12cbec9518fa8ae8e76d3e2e6f7cd15d0d2a)
@@ -0,0 +1,69 @@
+typedef volatile struct Foo FooInterm;
+typedef const FooInterm Foo;
+#ifdef ERR1
+typedef struct Foo Foo;
+#endif
+
+typedef int ** pt;
+typedef int ** pt;
+
+#ifdef __CFA__
+extern "C" {
+#endif
+typedef int __io_read_fn ( char buf);
+typedef int __io_write_fn ( const char buf);
+
+
+__io_read_fn read;
+__io_write_fn write;
+#ifdef __CFA__
+}
+#endif
+
+int sz;
+typedef int FUNC(int, ...);
+typedef int FUNC(int, ...);
+
+typedef int ARR[];
+typedef int ARR[];
+// #ifdef ERR1
+// if a typedef has an array dimension,
+// it can only be redefined to the same dimension
+typedef int ARR[2];
+// #endif
+
+typedef int X;
+typedef int Y;
+typedef Y Y2;
+typedef X X2;
+
+typedef Y2 Z;
+typedef X2 Z;
+
+typedef Z X2;
+typedef int X2;
+typedef Z X2;
+typedef int X2;
+
+// xxx - this doesn't work yet due to parsing problems with generic types
+// #ifdef __CFA__
+// typedef forall(type T) void foo(T);
+// typedef forall(type T) void foo(T);
+// typedef forall(type S) void foo(S); // should be allowed to do this...
+// #endif
+
+int main() {
+  typedef int ARR[sz];
+
+  // can't redefine typedef which is VLA
+#if ERR1
+  typedef int ARR[sz];
+#endif
+
+  Foo *x;
+
+  typedef struct Bar Foo;
+  Foo *y;
+
+  typedef int *** pt;
+}
