Index: Jenkins/TestRegen
===================================================================
--- Jenkins/TestRegen	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ Jenkins/TestRegen	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -33,5 +33,5 @@
 			email()
 		}
-	} 
+	}
 	catch (Exception caughtError) {
 		email_error()
@@ -65,5 +65,5 @@
 
 	def install_dir = pwd tmp: true
-		
+
 	//Configure the conpilation (Output is not relevant)
 	//Use the current directory as the installation target so nothing
@@ -101,5 +101,5 @@
 		def email_subject = "[cforall dashboard][TEST REGEN# ${env.BUILD_NUMBER}] - Result"
 		def email_body = """This is an automated email from the Jenkins build machine. It was
-generated http://plg2:8082/dashboard.
+generated https://cforall.uwaterloo.ca:8082/dashboard.html.
 
 Please apply the required changes using the following method :
@@ -118,5 +118,5 @@
 	def email_subject = "[cforall dashboard][TEST REGEN# ${env.BUILD_NUMBER}] - FAILURE"
 	def email_body = """This is an automated email from the Jenkins build machine. It was
-generated http://plg2:8082/dashboard.
+generated https://cforall.uwaterloo.ca:8082/dashboard.html.
 
 Test generation encoutered an error please see attached logs
Index: Jenkinsfile
===================================================================
--- Jenkinsfile	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ Jenkinsfile	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -174,5 +174,5 @@
 
 def notify_server(int wait) {
-	sh """curl --data "wait=${wait}" -X POST http://plg2:8082/jenkins/notify > /dev/null || true"""
+	sh """curl --data "wait=${wait}" -X POST https://cforall.uwaterloo.ca:8082/jenkins/notify > /dev/null || true"""
 	return
 }
@@ -329,5 +329,5 @@
 
 		//Then publish the results
-		sh 'curl -H \'Content-Type: application/json\' --data @bench.json http://plg2:8082/jenkins/publish > /dev/null || true'
+		sh 'curl -H \'Content-Type: application/json\' --data @bench.json https://cforall.uwaterloo.ca:8082/jenkins/publish > /dev/null || true'
 	}
 }
Index: README
===================================================================
--- README	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ README	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -107,5 +107,5 @@
 - the implicit coercion of structure types to the type of their first member is
   not implemented
-	
+
 Who is responsible for cfa-cc?
 ------------------------------
@@ -115,3 +115,3 @@
 The Cforall project maintains a web page:
 
-	http://plg.uwaterloo.ca/~cforall
+	https://cforall.uwaterloo.ca
Index: doc/papers/OOPSLA17/Makefile
===================================================================
--- doc/papers/OOPSLA17/Makefile	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/papers/OOPSLA17/Makefile	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -33,4 +33,5 @@
 
 DOCUMENT = generic_types.pdf
+BASE = ${basename ${DOCUMENT}}
 
 # Directives #
@@ -41,15 +42,16 @@
 
 clean :
-	@rm -frv ${DOCUMENT} ${basename ${DOCUMENT}}.ps ${Build}
+	@rm -frv ${DOCUMENT} ${BASE}.ps ${Build}
 
 # File Dependencies #
 
-${DOCUMENT} : ${basename ${DOCUMENT}}.ps
+${DOCUMENT} : ${BASE}.ps
 	ps2pdf $<
 
-${basename ${DOCUMENT}}.ps : ${basename ${DOCUMENT}}.dvi
+${BASE}.ps : ${BASE}.dvi
 	dvips ${Build}/$< -o $@
 
-${basename ${DOCUMENT}}.dvi : Makefile ${Build} ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ../../bibliography/pl.bib
+${BASE}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
+		../../bibliography/pl.bib | ${Build}
 	# Must have *.aux file containing citations for bibtex
 	if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
@@ -63,5 +65,5 @@
 ## Define the default recipes.
 
-${Build}:
+${Build} :
 	mkdir -p ${Build}
 
@@ -69,11 +71,11 @@
 	gnuplot -e Build="'${Build}/'" evaluation/timing.gp
 
-%.tex : %.fig
+%.tex : %.fig | ${Build}
 	fig2dev -L eepic $< > ${Build}/$@
 
-%.ps : %.fig
+%.ps : %.fig | ${Build}
 	fig2dev -L ps $< > ${Build}/$@
 
-%.pstex : %.fig
+%.pstex : %.fig | ${Build}
 	fig2dev -L pstex $< > ${Build}/$@
 	fig2dev -L pstex_t -p ${Build}/$@ $< > ${Build}/$@_t
Index: doc/papers/concurrency/Makefile
===================================================================
--- doc/papers/concurrency/Makefile	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/papers/concurrency/Makefile	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -20,6 +20,4 @@
 
 FIGURES = ${addsuffix .tex, \
-monitor \
-ext_monitor \
 int_monitor \
 dependency \
@@ -27,4 +25,6 @@
 
 PICTURES = ${addsuffix .pstex, \
+monitor \
+ext_monitor \
 system \
 monitor_structs \
@@ -59,12 +59,12 @@
 	dvips ${Build}/$< -o $@
 
-${BASE}.dvi : Makefile ${Build} ${BASE}.out.ps WileyNJD-AMA.bst ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
-		annex/local.bib ../../bibliography/pl.bib
+${BASE}.dvi : Makefile ${BASE}.out.ps WileyNJD-AMA.bst ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
+		annex/local.bib ../../bibliography/pl.bib | ${Build}
 	# Must have *.aux file containing citations for bibtex
 	if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
-	${BibTeX} ${Build}/${basename $@}
+	-${BibTeX} ${Build}/${basename $@}
 	# Some citations reference others so run again to resolve these citations
 	${LaTeX} ${basename $@}.tex
-	${BibTeX} ${Build}/${basename $@}
+	-${BibTeX} ${Build}/${basename $@}
 	# Run again to finish citations
 	${LaTeX} ${basename $@}.tex
@@ -72,20 +72,20 @@
 ## Define the default recipes.
 
-${Build}:
+${Build} :
 	mkdir -p ${Build}
 
-${BASE}.out.ps: ${Build}
+${BASE}.out.ps : | ${Build}
 	ln -fs ${Build}/Paper.out.ps .
 
-WileyNJD-AMA.bst:
+WileyNJD-AMA.bst :
 	ln -fs ../AMA/AMA-stix/ama/WileyNJD-AMA.bst .
 
-%.tex : %.fig ${Build}
+%.tex : %.fig | ${Build}
 	fig2dev -L eepic $< > ${Build}/$@
 
-%.ps : %.fig ${Build}
+%.ps : %.fig | ${Build}
 	fig2dev -L ps $< > ${Build}/$@
 
-%.pstex : %.fig ${Build}
+%.pstex : %.fig | ${Build}
 	fig2dev -L pstex $< > ${Build}/$@
 	fig2dev -L pstex_t -p ${Build}/$@ $< > ${Build}/$@_t
Index: doc/papers/concurrency/Paper.tex
===================================================================
--- doc/papers/concurrency/Paper.tex	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/papers/concurrency/Paper.tex	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -56,10 +56,6 @@
 \newcommand{\Textbf}[2][red]{{\color{#1}{\textbf{#2}}}}
 \newcommand{\Emph}[2][red]{{\color{#1}\textbf{\emph{#2}}}}
-\newcommand{\R}[1]{\Textbf{#1}}
-\newcommand{\B}[1]{{\Textbf[blue]{#1}}}
-\newcommand{\G}[1]{{\Textbf[OliveGreen]{#1}}}
 \newcommand{\uC}{$\mu$\CC}
-\newcommand{\cit}{\textsuperscript{[Citation Needed]}\xspace}
-\newcommand{\TODO}{{\Textbf{TODO}}}
+\newcommand{\TODO}[1]{{\Textbf{#1}}}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -258,5 +254,5 @@
 \section{Introduction}
 
-This paper provides a minimal concurrency \newterm{Abstract Program Interface} (API) that is simple, efficient and can be used to build other concurrency features.
+This paper provides a minimal concurrency \newterm{Application Program Interface} (API) that is simple, efficient and can be used to build other concurrency features.
 While the simplest concurrency system is a thread and a lock, this low-level approach is hard to master.
 An easier approach for programmers is to support higher-level constructs as the basis of concurrency.
@@ -275,5 +271,5 @@
 Hence, there are two problems to be solved: concurrency and parallelism.
 While these two concepts are often combined, they are distinct, requiring different tools~\cite[\S~2]{Buhr05a}.
-Concurrency tools handle synchronization and mutual exclusion, while parallelism tools handle performance, cost and resource utilization.
+Concurrency tools handle mutual exclusion and synchronization, while parallelism tools handle performance, cost, and resource utilization.
 
 The proposed concurrency API is implemented in a dialect of C, called \CFA.
@@ -286,7 +282,7 @@
 Extended versions and explanation of the following code examples are available at the \CFA website~\cite{Cforall} or in Moss~\etal~\cite{Moss18}.
 
-\CFA is an extension of ISO-C, and hence, supports all C paradigms.
+\CFA is a non-object-oriented extension of ISO-C, and hence, supports all C paradigms.
 %It is a non-object-oriented system-language, meaning most of the major abstractions have either no runtime overhead or can be opted out easily.
-Like C, the basics of \CFA revolve around structures and functions.
+Like C, the building blocks of \CFA are structures and routines.
 Virtually all of the code generated by the \CFA translator respects C memory layouts and calling conventions.
 While \CFA is not an object-oriented language, lacking the concept of a receiver (\eg @this@) and nominal inheritance-relationships, C does have a notion of objects: ``region of data storage in the execution environment, the contents of which can represent values''~\cite[3.15]{C11}.
@@ -300,5 +296,5 @@
 int x = 1, y = 2, z = 3;
 int * p1 = &x, ** p2 = &p1,  *** p3 = &p2,	$\C{// pointers to x}$
-	`&` r1 = x,  `&&` r2 = r1,  `&&&` r3 = r2;	$\C{// references to x}$
+    `&` r1 = x,   `&&` r2 = r1,   `&&&` r3 = r2;	$\C{// references to x}$
 int * p4 = &z, `&` r4 = z;
 
@@ -349,5 +345,5 @@
 	'with' '(' $\emph{expression-list}$ ')' $\emph{compound-statement}$
 \end{cfa}
-and may appear as the body of a function or nested within a function body.
+and may appear as the body of a routine or nested within a routine body.
 Each expression in the expression-list provides a type and object.
 The type must be an aggregate type.
@@ -360,5 +356,5 @@
 
 \CFA maximizes the ability to reuse names via overloading to aggressively address the naming problem.
-Both variables and functions may be overloaded, where selection is based on types, and number of returns (as in Ada~\cite{Ada}) and arguments.
+Both variables and routines may be overloaded, where selection is based on types, and number of returns (as in Ada~\cite{Ada}) and arguments.
 \begin{cquote}
 \vspace*{-\baselineskip}%???
@@ -415,8 +411,7 @@
 \end{cquote}
 Overloading is important for \CFA concurrency since the runtime system relies on creating different types to represent concurrency objects.
-Therefore, overloading is necessary to prevent the need for long prefixes and other naming conventions to prevent name clashes.
-As seen in Section~\ref{basics}, function @main@ is heavily overloaded.
-
-Variable overloading is useful in the parallel semantics of the @with@ statement for fields with the same name:
+Therefore, overloading eliminates long prefixes and other naming conventions to prevent name clashes.
+As seen in Section~\ref{basics}, routine @main@ is heavily overloaded.
+For example, variable overloading is useful in the parallel semantics of the @with@ statement for fields with the same name:
 \begin{cfa}
 struct S { int `i`; int j; double m; } s;
@@ -432,5 +427,5 @@
 }
 \end{cfa}
-For parallel semantics, both @s.i@ and @t.i@ are visible the same type, so only @i@ is ambiguous without qualification.
+For parallel semantics, both @s.i@ and @t.i@ are visible with the same type, so only @i@ is ambiguous without qualification.
 
 
@@ -438,5 +433,5 @@
 
 Overloading also extends to operators.
-Operator-overloading syntax names a routine with the operator symbol and question marks for the operands:
+Operator-overloading syntax creates a routine name with an operator symbol and question marks for the operands:
 \begin{cquote}
 \lstDeleteShortInline@%
@@ -472,48 +467,4 @@
 \end{cquote}
 While concurrency does not use operator overloading directly, it provides an introduction for the syntax of constructors.
-
-
-\subsection{Parametric Polymorphism}
-\label{s:ParametricPolymorphism}
-
-The signature feature of \CFA is parametric-polymorphic functions~\cite{} with functions generalized using a @forall@ clause (giving the language its name), which allow separately compiled routines to support generic usage over multiple types.
-For example, the following sum function works for any type that supports construction from 0 and addition:
-\begin{cfa}
-forall( otype T | { void `?{}`( T *, zero_t ); T `?+?`( T, T ); } ) // constraint type, 0 and +
-T sum( T a[$\,$], size_t size ) {
-	`T` total = { `0` };					$\C{// initialize by 0 constructor}$
-	for ( size_t i = 0; i < size; i += 1 )
-		total = total `+` a[i];				$\C{// select appropriate +}$
-	return total;
-}
-S sa[5];
-int i = sum( sa, 5 );						$\C{// use S's 0 construction and +}$
-\end{cfa}
-
-\CFA provides \newterm{traits} to name a group of type assertions, where the trait name allows specifying the same set of assertions in multiple locations, preventing repetition mistakes at each function declaration:
-\begin{cfa}
-trait `sumable`( otype T ) {
-	void `?{}`( T &, zero_t );				$\C{// 0 literal constructor}$
-	T `?+?`( T, T );						$\C{// assortment of additions}$
-	T ?+=?( T &, T );
-	T ++?( T & );
-	T ?++( T & );
-};
-forall( otype T `| sumable( T )` )			$\C{// use trait}$
-T sum( T a[$\,$], size_t size );
-\end{cfa}
-
-Assertions can be @otype@ or @dtype@.
-@otype@ refers to a ``complete'' object, \ie an object has a size, default constructor, copy constructor, destructor and an assignment operator.
-@dtype@ only guarantees an object has a size and alignment.
-
-Using the return type for discrimination, it is possible to write a type-safe @alloc@ based on the C @malloc@:
-\begin{cfa}
-forall( dtype T | sized(T) ) T * alloc( void ) { return (T *)malloc( sizeof(T) ); }
-int * ip = alloc();							$\C{// select type and size from left-hand side}$
-double * dp = alloc();
-struct S {...} * sp = alloc();
-\end{cfa}
-where the return type supplies the type/size of the allocation, which is impossible in most type systems.
 
 
@@ -544,6 +495,6 @@
 \CFA also provides @new@ and @delete@, which behave like @malloc@ and @free@, in addition to constructing and destructing objects:
 \begin{cfa}
-{	struct S s = {10};						$\C{// allocation, call constructor}$
-	...
+{
+	... struct S s = {10}; ...				$\C{// allocation, call constructor}$
 }											$\C{// deallocation, call destructor}$
 struct S * s = new();						$\C{// allocation, call constructor}$
@@ -551,5 +502,50 @@
 delete( s );								$\C{// deallocation, call destructor}$
 \end{cfa}
-\CFA concurrency uses object lifetime as a means of synchronization and/or mutual exclusion.
+\CFA concurrency uses object lifetime as a means of mutual exclusion and/or synchronization.
+
+
+\subsection{Parametric Polymorphism}
+\label{s:ParametricPolymorphism}
+
+The signature feature of \CFA is parametric-polymorphic routines~\cite{} with routines generalized using a @forall@ clause (giving the language its name), which allow separately compiled routines to support generic usage over multiple types.
+For example, the following sum routine works for any type that supports construction from 0 and addition:
+\begin{cfa}
+forall( otype T | { void `?{}`( T *, zero_t ); T `?+?`( T, T ); } ) // constraint type, 0 and +
+T sum( T a[$\,$], size_t size ) {
+	`T` total = { `0` };					$\C{// initialize by 0 constructor}$
+	for ( size_t i = 0; i < size; i += 1 )
+		total = total `+` a[i];				$\C{// select appropriate +}$
+	return total;
+}
+S sa[5];
+int i = sum( sa, 5 );						$\C{// use S's 0 construction and +}$
+\end{cfa}
+The builtin type @zero_t@ (and @one_t@) overload constant 0 (and 1) for a new types, where both 0 and 1 have special meaning in C.
+
+\CFA provides \newterm{traits} to name a group of type assertions, where the trait name allows specifying the same set of assertions in multiple locations, preventing repetition mistakes at each routine declaration:
+\begin{cfa}
+trait `sumable`( otype T ) {
+	void `?{}`( T &, zero_t );				$\C{// 0 literal constructor}$
+	T `?+?`( T, T );						$\C{// assortment of additions}$
+	T ?+=?( T &, T );
+	T ++?( T & );
+	T ?++( T & );
+};
+forall( otype T `| sumable( T )` )			$\C{// use trait}$
+T sum( T a[$\,$], size_t size );
+\end{cfa}
+
+Assertions can be @otype@ or @dtype@.
+@otype@ refers to a ``complete'' object, \ie an object has a size, default constructor, copy constructor, destructor and an assignment operator.
+@dtype@ only guarantees an object has a size and alignment.
+
+Using the return type for discrimination, it is possible to write a type-safe @alloc@ based on the C @malloc@:
+\begin{cfa}
+forall( dtype T | sized(T) ) T * alloc( void ) { return (T *)malloc( sizeof(T) ); }
+int * ip = alloc();							$\C{// select type and size from left-hand side}$
+double * dp = alloc();
+struct S {...} * sp = alloc();
+\end{cfa}
+where the return type supplies the type/size of the allocation, which is impossible in most type systems.
 
 
@@ -584,8 +580,8 @@
 \subsection{\protect\CFA's Thread Building Blocks}
 
-An important missing feature in C is threading\footnote{While the C11 standard defines a ``threads.h'' header, it is minimal and defined as optional.
+An important missing feature in C is threading\footnote{While the C11 standard defines a \protect\lstinline@threads.h@ header, it is minimal and defined as optional.
 As such, library support for threading is far from widespread.
-At the time of writing the paper, neither \protect\lstinline|gcc| nor \protect\lstinline|clang| support ``threads.h'' in their standard libraries.}.
-On modern architectures, a lack of threading is unacceptable~\cite{Sutter05, Sutter05b}, and therefore existing and new programming languages must have tools for writing efficient concurrent programs to take advantage of parallelism.
+At the time of writing the paper, neither \protect\lstinline@gcc@ nor \protect\lstinline@clang@ support \protect\lstinline@threads.h@ in their standard libraries.}.
+In modern programming languages, a lack of threading is unacceptable~\cite{Sutter05, Sutter05b}, and therefore existing and new programming languages must have tools for writing efficient concurrent programs to take advantage of parallelism.
 As an extension of C, \CFA needs to express these concepts in a way that is as natural as possible to programmers familiar with imperative languages.
 Furthermore, because C is a system-level language, programmers expect to choose precisely which features they need and which cost they are willing to pay.
@@ -625,5 +621,5 @@
 \newbox\myboxA
 \begin{lrbox}{\myboxA}
-\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
 `int f1, f2, state = 1;`   // single global variables
 int fib() {
@@ -642,10 +638,10 @@
 	}
 }
-\end{lstlisting}
+\end{cfa}
 \end{lrbox}
 
 \newbox\myboxB
 \begin{lrbox}{\myboxB}
-\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
 #define FIB_INIT `{ 0, 1 }`
 typedef struct { int f2, f1; } Fib;
@@ -664,5 +660,5 @@
 	}
 }
-\end{lstlisting}
+\end{cfa}
 \end{lrbox}
 
@@ -677,5 +673,5 @@
 \newbox\myboxA
 \begin{lrbox}{\myboxA}
-\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
 `coroutine` Fib { int fn; };
 void main( Fib & fib ) with( fib ) {
@@ -697,9 +693,9 @@
 	}
 }
-\end{lstlisting}
+\end{cfa}
 \end{lrbox}
 \newbox\myboxB
 \begin{lrbox}{\myboxB}
-\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
 `coroutine` Fib { int ret; };
 void main( Fib & f ) with( fib ) {
@@ -721,5 +717,5 @@
 
 
-\end{lstlisting}
+\end{cfa}
 \end{lrbox}
 \subfloat[3 States, internal variables]{\label{f:Coroutine3States}\usebox\myboxA}
@@ -731,12 +727,8 @@
 
 Using a coroutine, it is possible to express the Fibonacci formula directly without any of the C problems.
-Figure~\ref{f:Coroutine3States} creates a @coroutine@ type:
-\begin{cfa}
-`coroutine` Fib { int fn; };
-\end{cfa}
-which provides communication, @fn@, for the \newterm{coroutine main}, @main@, which runs on the coroutine stack, and possibly multiple interface functions, @next@.
+Figure~\ref{f:Coroutine3States} creates a @coroutine@ type, @`coroutine` Fib { int fn; }@, which provides communication, @fn@, for the \newterm{coroutine main}, @main@, which runs on the coroutine stack, and possibly multiple interface routines, \eg @next@.
 Like the structure in Figure~\ref{f:ExternalState}, the coroutine type allows multiple instances, where instances of this type are passed to the (overloaded) coroutine main.
-The coroutine main's stack holds the state for the next generation, @f1@ and @f2@, and the code has the three suspend points, representing the three states in the Fibonacci formula, to context switch back to the caller's resume.
-The interface function, @next@, takes a Fibonacci instance and context switches to it using @resume@;
+The coroutine main's stack holds the state for the next generation, @f1@ and @f2@, and the code has the three suspend points, representing the three states in the Fibonacci formula, to context switch back to the caller's @resume@.
+The interface routine @next@, takes a Fibonacci instance and context switches to it using @resume@;
 on restart, the Fibonacci field, @fn@, contains the next value in the sequence, which is returned.
 The first @resume@ is special because it cocalls the coroutine at its coroutine main and allocates the stack;
@@ -769,5 +761,5 @@
 \newbox\myboxA
 \begin{lrbox}{\myboxA}
-\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
 `coroutine` Format {
 	char ch;   // used for communication
@@ -801,10 +793,10 @@
 	}
 }
-\end{lstlisting}
+\end{cfa}
 \end{lrbox}
 
 \newbox\myboxB
 \begin{lrbox}{\myboxB}
-\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
 struct Format {
 	char ch;
@@ -838,5 +830,5 @@
 	format( &fmt );
 }
-\end{lstlisting}
+\end{cfa}
 \end{lrbox}
 \subfloat[\CFA Coroutine]{\label{f:CFAFmt}\usebox\myboxA}
@@ -847,7 +839,7 @@
 \end{figure}
 
-The previous examples are \newterm{asymmetric (semi) coroutine}s because one coroutine always calls a resuming function for another coroutine, and the resumed coroutine always suspends back to its last resumer, similar to call/return for normal functions.
-However, there is no stack growth because @resume@/@suspend@ context switch to existing stack-frames rather than create new ones.
-\newterm{Symmetric (full) coroutine}s have a coroutine call a resuming function for another coroutine, which eventually forms a resuming-call cycle.
+The previous examples are \newterm{asymmetric (semi) coroutine}s because one coroutine always calls a resuming routine for another coroutine, and the resumed coroutine always suspends back to its last resumer, similar to call/return for normal routines.
+However,@resume@/@suspend@ context switch to existing stack-frames rather than create new ones so there is no stack growth.
+\newterm{Symmetric (full) coroutine}s have a coroutine call a resuming routine for another coroutine, which eventually forms a resuming-call cycle.
 (The trivial cycle is a coroutine resuming itself.)
 This control flow is similar to recursion for normal routines, but again there is no stack growth from the context switch.
@@ -931,5 +923,5 @@
 Figure~\ref{f:ProdCons} shows a producer/consumer symmetric-coroutine performing bi-directional communication.
 Since the solution involves a full-coroutining cycle, the program main creates one coroutine in isolation, passes this coroutine to its partner, and closes the cycle at the call to @start@.
-The @start@ function communicates both the number of elements to be produced and the consumer into the producer's coroutine structure.
+The @start@ routine communicates both the number of elements to be produced and the consumer into the producer's coroutine structure.
 Then the @resume@ to @prod@ creates @prod@'s stack with a frame for @prod@'s coroutine main at the top, and context switches to it.
 @prod@'s coroutine main starts, creates local variables that are retained between coroutine activations, and executes $N$ iterations, each generating two random values, calling the consumer to deliver the values, and printing the status returned from the consumer.
@@ -937,5 +929,5 @@
 The producer call to @delivery@ transfers values into the consumer's communication variables, resumes the consumer, and returns the consumer status.
 For the first resume, @cons@'s stack is initialized, creating local variables retained between subsequent activations of the coroutine.
-The consumer iterates until the @done@ flag is set, prints, increments status, and calls back to the producer via @payment@, and on return from @payment@, prints the receipt from the producer and increments @money@ (inflation).
+The consumer iterates until the @done@ flag is set, prints the values delivered by the producer, increments status, and calls back to the producer via @payment@, and on return from @payment@, prints the receipt from the producer and increments @money@ (inflation).
 The call from the consumer to the @payment@ introduces the cycle between producer and consumer.
 When @payment@ is called, the consumer copies values into the producer's communication variable and a resume is executed.
@@ -967,6 +959,6 @@
 \end{cfa}
 and the programming language (and possibly its tool set, \eg debugger) may need to understand @baseCoroutine@ because of the stack.
-Furthermore, the execution of constructs/destructors is in the wrong order for certain operations, \eg for threads;
-\eg, if the thread is implicitly started, it must start \emph{after} all constructors, because the thread relies on a completely initialized object, but the inherited constructor runs \emph{before} the derived.
+Furthermore, the execution of constructs/destructors is in the wrong order for certain operations.
+For example, for threads if the thread is implicitly started, it must start \emph{after} all constructors, because the thread relies on a completely initialized object, but the inherited constructor runs \emph{before} the derived.
 
 An alternatively is composition:
@@ -980,5 +972,5 @@
 However, there is nothing preventing wrong placement or multiple declarations.
 
-For coroutines as for threads, many implementations are based on routine pointers or function objects~\cite{Butenhof97, C++14, MS:VisualC++, BoostCoroutines15}.
+For coroutines as for threads, many implementations are based on routine pointers or routine objects~\cite{Butenhof97, C++14, MS:VisualC++, BoostCoroutines15}.
 For example, Boost implements coroutines in terms of four functor object-types:
 \begin{cfa}
@@ -988,5 +980,5 @@
 symmetric_coroutine<>::yield_type
 \end{cfa}
-Similarly, the canonical threading paradigm is often based on function pointers, \eg @pthread@~\cite{pthreads}, \Csharp~\cite{Csharp}, Go~\cite{Go}, and Scala~\cite{Scala}.
+Similarly, the canonical threading paradigm is often based on routine pointers, \eg @pthreads@~\cite{pthreads}, \Csharp~\cite{Csharp}, Go~\cite{Go}, and Scala~\cite{Scala}.
 However, the generic thread-handle (identifier) is limited (few operations), unless it is wrapped in a custom type.
 \begin{cfa}
@@ -1002,4 +994,9 @@
 \end{cfa}
 Since the custom type is simple to write in \CFA and solves several issues, added support for routine/lambda-based coroutines adds very little.
+
+Note, the type @coroutine_t@ must be an abstract handle to the coroutine, because the coroutine descriptor and its stack are non-copyable.
+Copying the coroutine descriptor results in copies being out of date with the current state of the stack.
+Correspondingly, copying the stack results is copies being out of date with the coroutine descriptor, and pointers in the stack being out of date to data on the stack.
+(There is no mechanism in C to find all stack-specific pointers and update them as part of a copy.)
 
 The selected approach is to use language support by introducing a new kind of aggregate (structure):
@@ -1014,20 +1011,20 @@
 Furthermore, implementing coroutines without language supports also displays the power of a programming language.
 While this is ultimately the option used for idiomatic \CFA code, coroutines and threads can still be constructed without using the language support.
-The reserved keyword eases use for the common cases.
-
-Part of the mechanism to generalize coroutines is using a \CFA trait, which defines a coroutine as anything satisfying the trait @is_coroutine@, and this trait is used to restrict coroutine-manipulation functions:
-\begin{cfa}
-trait is_coroutine( dtype T ) {
-      void main( T & this );
-      coroutine_desc * get_coroutine( T & this );
+The reserved keyword simply eases use for the common cases.
+
+Part of the mechanism to generalize coroutines is using a \CFA trait, which defines a coroutine as anything satisfying the trait @is_coroutine@, and this trait is used to restrict coroutine-manipulation routines:
+\begin{cfa}
+trait is_coroutine( `dtype` T ) {
+	void main( T & );
+	coroutine_desc * get_coroutine( T & );
 };
-forall( dtype T | is_coroutine(T) ) void get_coroutine( T & );
-forall( dtype T | is_coroutine(T) ) void suspend( T & );
-forall( dtype T | is_coroutine(T) ) void resume( T & );
-\end{cfa}
-This definition ensures there is a statically-typed @main@ function that is the starting point (first stack frame) of a coroutine.
-No return value or additional parameters are necessary for this function, because the coroutine type allows an arbitrary number of interface functions with corresponding arbitrary typed input/output values.
-As well, any object passed to @suspend@ and @resume@ is a coroutine since it must satisfy the @is_coroutine@ trait to compile.
-The advantage of this approach is that users can easily create different types of coroutines, for example, changing the memory layout of a coroutine is trivial when implementing the @get_coroutine@ routine.
+forall( `dtype` T | is_coroutine(T) ) void suspend( T & );
+forall( `dtype` T | is_coroutine(T) ) void resume( T & );
+\end{cfa}
+The @dtype@ property of the trait ensures the coroutine descriptor is non-copyable, so all coroutines must be passed by reference (pointer).
+The routine definitions ensures there is a statically-typed @main@ routine that is the starting point (first stack frame) of a coroutine, and a mechanism to get (read) the currently executing coroutine handle.
+The @main@ routine has no return value or additional parameters because the coroutine type allows an arbitrary number of interface routines with corresponding arbitrary typed input/output values versus fixed ones.
+The generic routines @suspend@ and @resume@ can be redefined, but any object passed to them is a coroutine since it must satisfy the @is_coroutine@ trait to compile.
+The advantage of this approach is that users can easily create different types of coroutines, \eg changing the memory layout of a coroutine is trivial when implementing the @get_coroutine@ routine, and possibly redefining @suspend@ and @resume@.
 The \CFA keyword @coroutine@ implicitly implements the getter and forward declarations required for implementing the coroutine main:
 \begin{cquote}
@@ -1039,5 +1036,7 @@
 };
 \end{cfa}
-& {\Large $\Rightarrow$} &
+&
+{\Large $\Rightarrow$}
+&
 \begin{tabular}{@{}ccc@{}}
 \begin{cfa}
@@ -1073,5 +1072,5 @@
 Like coroutines and for the same design reasons, the selected approach for user threads is to use language support by introducing a new kind of aggregate (structure) and a \CFA trait:
 \begin{cquote}
-\begin{tabular}{@{}c@{\hspace{2\parindentlnth}}c@{}}
+\begin{tabular}{@{}c@{\hspace{3\parindentlnth}}c@{}}
 \begin{cfa}
 thread myThread {
@@ -1083,8 +1082,8 @@
 &
 \begin{cfa}
-trait is_thread( dtype T ) {
-      void main( T & this );
-      thread_desc * get_thread( T & this );
-      void ^?{}( T & `mutex` this );
+trait is_thread( `dtype` T ) {
+      void main( T & );
+      thread_desc * get_thread( T & );
+      void ^?{}( T & `mutex` );
 };
 \end{cfa}
@@ -1092,9 +1091,9 @@
 \end{cquote}
 (The qualifier @mutex@ for the destructor parameter is discussed in Section~\ref{s:Monitors}.)
-Like a coroutine, the statically-typed @main@ function is the starting point (first stack frame) of a user thread.
+Like a coroutine, the statically-typed @main@ routine is the starting point (first stack frame) of a user thread.
 The difference is that a coroutine borrows a thread from its caller, so the first thread resuming a coroutine creates an instance of @main@;
 whereas, a user thread receives its own thread from the runtime system, which starts in @main@ as some point after the thread constructor is run.\footnote{
-The \lstinline@main@ function is already a special routine in C (where the program begins), so it is a natural extension of the semantics to use overloading to declare mains for different coroutines/threads (the normal main being the main of the initial thread).}
-No return value or additional parameters are necessary for this function, because the task type allows an arbitrary number of interface functions with corresponding arbitrary typed input/output values.
+The \lstinline@main@ routine is already a special routine in C, \ie where the program's initial thread begins, so it is a natural extension of this semantics to use overloading to declare \lstinline@main@s for user coroutines and threads.}
+No return value or additional parameters are necessary for this routine because the task type allows an arbitrary number of interface routines with corresponding arbitrary typed input/output values.
 
 \begin{comment} % put in appendix with coroutine version ???
@@ -1109,20 +1108,20 @@
 
 In this example, threads of type @foo@ start execution in the @void main(foo &)@ routine, which prints @"Hello World!".@ While this paper encourages this approach to enforce strongly typed programming, users may prefer to use the routine-based thread semantics for the sake of simplicity.
-With the static semantics it is trivial to write a thread type that takes a function pointer as a parameter and executes it on its stack asynchronously.
-\begin{cfa}
-typedef void (*voidFunc)(int);
-
-thread FuncRunner {
-	voidFunc func;
+With the static semantics it is trivial to write a thread type that takes a routine pointer as a parameter and executes it on its stack asynchronously.
+\begin{cfa}
+typedef void (*voidRtn)(int);
+
+thread RtnRunner {
+	voidRtn func;
 	int arg;
 };
 
-void ?{}(FuncRunner & this, voidFunc inFunc, int arg) {
-	this.func = inFunc;
+void ?{}(RtnRunner & this, voidRtn inRtn, int arg) {
+	this.func = inRtn;
 	this.arg  = arg;
 }
 
-void main(FuncRunner & this) {
-	// thread starts here and runs the function
+void main(RtnRunner & this) {
+	// thread starts here and runs the routine
 	this.func( this.arg );
 }
@@ -1133,9 +1132,9 @@
 
 int main() {
-	FuncRunner f = {hello, 42};
+	RtnRunner f = {hello, 42};
 	return 0?
 }
 \end{cfa}
-A consequence of the strongly typed approach to main is that memory layout of parameters and return values to/from a thread are now explicitly specified in the \textbf{api}.
+A consequence of the strongly typed approach to main is that memory layout of parameters and return values to/from a thread are now explicitly specified in the \textbf{API}.
 \end{comment}
 
@@ -1186,7 +1185,5 @@
 void main( Adder & adder ) with( adder ) {
     subtotal = 0;
-    for ( int c = 0; c < cols; c += 1 ) {
-		subtotal += row[c];
-    }
+    for ( int c = 0; c < cols; c += 1 ) { subtotal += row[c]; }
 }
 int main() {
@@ -1210,25 +1207,24 @@
 
 
-\section{Synchronization / Mutual Exclusion}
+\section{Mutual Exclusion / Synchronization}
 
 Uncontrolled non-deterministic execution is meaningless.
-To reestablish meaningful execution requires mechanisms to reintroduce determinism (control non-determinism), called synchronization and mutual exclusion, where synchronization is a timing relationship among threads and mutual exclusion is an access-control mechanism on data shared by threads.
-Since many deterministic challenges appear with the use of mutable shared state, some languages/libraries disallow it (Erlang~\cite{Erlang}, Haskell~\cite{Haskell}, Akka~\cite{Akka} (Scala)).
-In these paradigms, interaction among concurrent objects is performed by stateless message-passing~\cite{Thoth,Harmony,V-Kernel} or other paradigms closely relate to networking concepts (\eg channels~\cite{CSP,Go}).
-However, in call/return-based languages, these approaches force a clear distinction (\ie introduce a new programming paradigm) between non-concurrent and concurrent computation (\ie function call versus message passing).
-This distinction means a programmers needs to learn two sets of design patterns.
+To reestablish meaningful execution requires mechanisms to reintroduce determinism, \ie restrict non-determinism, called mutual exclusion and synchronization, where mutual exclusion is an access-control mechanism on data shared by threads, and synchronization is a timing relationship among threads~\cite[\S~4]{Buhr05a}.
+Since many deterministic challenges appear with the use of mutable shared state, some languages/libraries disallow it, \eg Erlang~\cite{Erlang}, Haskell~\cite{Haskell}, Akka~\cite{Akka} (Scala).
+In these paradigms, interaction among concurrent objects is performed by stateless message-passing~\cite{Thoth,Harmony,V-Kernel} or other paradigms closely relate to networking concepts, \eg channels~\cite{CSP,Go}.
+However, in call/return-based languages, these approaches force a clear distinction, \ie introduce a new programming paradigm, between regular and concurrent computation, \eg routine call versus message passing.
+Hence, a programmer must learn and manipulate two sets of design patterns.
 While this distinction can be hidden away in library code, effective use of the library still has to take both paradigms into account.
 In contrast, approaches based on statefull models more closely resemble the standard call/return programming-model, resulting in a single programming paradigm.
 
-At the lowest level, concurrent control is implemented as atomic operations, upon which different kinds of locks mechanism are constructed, \eg semaphores~\cite{Dijkstra68b} and path expressions~\cite{Campbell74}.
+At the lowest level, concurrent control is implemented by atomic operations, upon which different kinds of locks mechanism are constructed, \eg semaphores~\cite{Dijkstra68b}, barriers, and path expressions~\cite{Campbell74}.
 However, for productivity it is always desirable to use the highest-level construct that provides the necessary efficiency~\cite{Hochstein05}.
-A newer approach is transactional memory~\cite{Herlihy93}.
+A newer approach for restricting non-determinism is transactional memory~\cite{Herlihy93}.
 While this approach is pursued in hardware~\cite{Nakaike15} and system languages, like \CC~\cite{Cpp-Transactions}, the performance and feature set is still too restrictive to be the main concurrency paradigm for system languages, which is why it was rejected as the core paradigm for concurrency in \CFA.
 
-One of the most natural, elegant, and efficient mechanisms for synchronization and mutual exclusion for shared-memory systems is the \emph{monitor}.
-Monitors were first proposed by Brinch Hansen~\cite{Hansen73} and later described and extended by C.A.R.~Hoare~\cite{Hoare74}.
-Many programming languages -- \eg Concurrent Pascal~\cite{ConcurrentPascal}, Mesa~\cite{Mesa}, Modula~\cite{Modula-2}, Turing~\cite{Turing:old}, Modula-3~\cite{Modula-3}, NeWS~\cite{NeWS}, Emerald~\cite{Emerald}, \uC~\cite{Buhr92a} and Java~\cite{Java} -- provide monitors as explicit language constructs.
-In addition, operating-system kernels and device drivers have a monitor-like structure, although they often use lower-level primitives such as semaphores or locks to simulate monitors.
-For these reasons, this project proposes monitors as the core concurrency construct, upon which even higher-level approaches can be easily constructed..
+One of the most natural, elegant, and efficient mechanisms for mutual exclusion and synchronization for shared-memory systems is the \emph{monitor}.
+First proposed by Brinch Hansen~\cite{Hansen73} and later described and extended by C.A.R.~Hoare~\cite{Hoare74}, many concurrent programming-languages provide monitors as an explicit language construct: \eg Concurrent Pascal~\cite{ConcurrentPascal}, Mesa~\cite{Mesa}, Modula~\cite{Modula-2}, Turing~\cite{Turing:old}, Modula-3~\cite{Modula-3}, NeWS~\cite{NeWS}, Emerald~\cite{Emerald}, \uC~\cite{Buhr92a} and Java~\cite{Java}.
+In addition, operating-system kernels and device drivers have a monitor-like structure, although they often use lower-level primitives such as mutex locks or semaphores to simulate monitors.
+For these reasons, \CFA selected monitors as the core high-level concurrency-construct, upon which higher-level approaches can be easily constructed.
 
 
@@ -1236,14 +1232,14 @@
 
 A group of instructions manipulating a specific instance of shared data that must be performed atomically is called an (individual) \newterm{critical-section}~\cite{Dijkstra65}.
-A generalization is a \newterm{group critical-section}~\cite{Joung00}, where multiple tasks with the same session may use the resource simultaneously, but different sessions may not use the resource simultaneously.
+The generalization is called a \newterm{group critical-section}~\cite{Joung00}, where multiple tasks with the same session may use the resource simultaneously, but different sessions may not use the resource simultaneously.
 The readers/writer problem~\cite{Courtois71} is an instance of a group critical-section, where readers have the same session and all writers have a unique session.
-\newterm{Mutual exclusion} enforces the correction number of threads are using a critical section at the same time.
+\newterm{Mutual exclusion} enforces that the correct kind and number of threads are using a critical section.
 
 However, many solutions exist for mutual exclusion, which vary in terms of performance, flexibility and ease of use.
 Methods range from low-level locks, which are fast and flexible but require significant attention for correctness, to higher-level concurrency techniques, which sacrifice some performance to improve ease of use.
-Ease of use comes by either guaranteeing some problems cannot occur (\eg deadlock free), or by offering a more explicit coupling between shared data and critical section.
-For example, the \CC @std::atomic<T>@ offers an easy way to express mutual-exclusion on a restricted set of operations (\eg reading/writing large types atomically).
-However, a significant challenge with (low-level) locks is composability because it takes careful organization for multiple locks to be used while preventing deadlock.
-Easing composability is another feature higher-level mutual-exclusion mechanisms offer.
+Ease of use comes by either guaranteeing some problems cannot occur, \eg deadlock free, or by offering a more explicit coupling between shared data and critical section.
+For example, the \CC @std::atomic<T>@ offers an easy way to express mutual-exclusion on a restricted set of operations, \eg reading/writing, for numerical types.
+However, a significant challenge with locks is composability because it takes careful organization for multiple locks to be used while preventing deadlock.
+Easing composability is another feature higher-level mutual-exclusion mechanisms can offer.
 
 
@@ -1251,14 +1247,14 @@
 
 Synchronization enforces relative ordering of execution, and synchronization tools provide numerous mechanisms to establish these timing relationships.
-Low-level synchronization primitives offer good performance and flexibility at the cost of ease of use.
-Higher-level mechanisms often simplify usage by adding better coupling between synchronization and data (\eg message passing), or offering a simpler solution to otherwise involved challenges, \eg barrier lock.
-As mentioned above, synchronization can be expressed as guaranteeing that event \textit{X} always happens before \textit{Y}.
-Often synchronization is used to order access to a critical section, \eg ensuring the next kind of thread to enter a critical section is a reader thread
-If a writer thread is scheduled for next access, but another reader thread acquires the critical section first, the reader has \newterm{barged}.
-Barging can result in staleness/freshness problems, where a reader barges ahead of a write and reads temporally stale data, or a writer barges ahead of another writer overwriting data with a fresh value preventing the previous value from having an opportunity to be read.
+Low-level synchronization primitives offer good performance and flexibility at the cost of ease of use;
+higher-level mechanisms often simplify usage by adding better coupling between synchronization and data, \eg message passing, or offering a simpler solution to otherwise involved challenges, \eg barrier lock.
+Often synchronization is used to order access to a critical section, \eg ensuring a reader thread is the next kind of thread to enter a critical section.
+If a writer thread is scheduled for next access, but another reader thread acquires the critical section first, that reader has \newterm{barged}.
+Barging can result in staleness/freshness problems, where a reader barges ahead of a writer and reads temporally stale data, or a writer barges ahead of another writer overwriting data with a fresh value preventing the previous value from ever being read (lost computation).
 Preventing or detecting barging is an involved challenge with low-level locks, which can be made much easier by higher-level constructs.
-This challenge is often split into two different approaches, barging avoidance and barging prevention.
-Algorithms that allow a barger but divert it until later are avoiding the barger, while algorithms that preclude a barger from entering during synchronization in the critical section prevent the barger completely.
-baton-pass locks~\cite{Andrews89} between threads instead of releasing the locks are said to be using barging prevention.
+This challenge is often split into two different approaches: barging avoidance and barging prevention.
+Algorithms that allow a barger, but divert it until later using current synchronization state (flags), are avoiding the barger;
+algorithms that preclude a barger from entering during synchronization in the critical section prevent barging completely.
+Techniques like baton-pass locks~\cite{Andrews89} between threads instead of unconditionally releasing locks is an example of barging prevention.
 
 
@@ -1266,525 +1262,502 @@
 \label{s:Monitors}
 
-A \textbf{monitor} is a set of routines that ensure mutual-exclusion when accessing shared state.
-More precisely, a monitor is a programming technique that associates mutual-exclusion to routine scopes, as opposed to mutex locks, where mutual-exclusion is defined by lock/release calls independently of any scoping of the calling routine.
-This strong association eases readability and maintainability, at the cost of flexibility.
-Note that both monitors and mutex locks, require an abstract handle to identify them.
-This concept is generally associated with object-oriented languages like Java~\cite{Java} or \uC~\cite{uC++book} but does not strictly require OO semantics.
-The only requirement is the ability to declare a handle to a shared object and a set of routines that act on it:
-\begin{cfa}
-typedef /*some monitor type*/ monitor;
-int f(monitor & m);
-
-int main() {
-	monitor m;  // Handle m
-	f(m);       // Routine using handle
-}
-\end{cfa}
-
-% ======================================================================
-% ======================================================================
-\subsection{Call Semantics} \label{call}
-% ======================================================================
-% ======================================================================
-The above monitor example displays some of the intrinsic characteristics.
-First, it is necessary to use pass-by-reference over pass-by-value for monitor routines.
-This semantics is important, because at their core, monitors are implicit mutual-exclusion objects (locks), and these objects cannot be copied.
-Therefore, monitors are non-copy-able objects (@dtype@).
-
-Another aspect to consider is when a monitor acquires its mutual exclusion.
-For example, a monitor may need to be passed through multiple helper routines that do not acquire the monitor mutual-exclusion on entry.
-Passthrough can occur for generic helper routines (@swap@, @sort@, \etc) or specific helper routines like the following to implement an atomic counter:
-
-\begin{cfa}
-monitor counter_t { /*...see section $\ref{data}$...*/ };
-
-void ?{}(counter_t & nomutex this); // constructor
-size_t ++?(counter_t & mutex this); // increment
-
-// need for mutex is platform dependent
-void ?{}(size_t * this, counter_t & mutex cnt); // conversion
-\end{cfa}
-This counter is used as follows:
-\begin{center}
-\begin{tabular}{c @{\hskip 0.35in} c @{\hskip 0.35in} c}
-\begin{cfa}
-// shared counter
-counter_t cnt1, cnt2;
-
-// multiple threads access counter
-thread 1 : cnt1++; cnt2++;
-thread 2 : cnt1++; cnt2++;
-thread 3 : cnt1++; cnt2++;
-	...
-thread N : cnt1++; cnt2++;
-\end{cfa}
-\end{tabular}
-\end{center}
-Notice how the counter is used without any explicit synchronization and yet supports thread-safe semantics for both reading and writing, which is similar in usage to the \CC template @std::atomic@.
-
-Here, the constructor (@?{}@) uses the @nomutex@ keyword to signify that it does not acquire the monitor mutual-exclusion when constructing.
-This semantics is because an object not yet constructed should never be shared and therefore does not require mutual exclusion.
-Furthermore, it allows the implementation greater freedom when it initializes the monitor locking.
-The prefix increment operator uses @mutex@ to protect the incrementing process from race conditions.
-Finally, there is a conversion operator from @counter_t@ to @size_t@.
-This conversion may or may not require the @mutex@ keyword depending on whether or not reading a @size_t@ is an atomic operation.
-
-For maximum usability, monitors use \textbf{multi-acq} semantics, which means a single thread can acquire the same monitor multiple times without deadlock.
-For example, listing \ref{fig:search} uses recursion and \textbf{multi-acq} to print values inside a binary tree.
-\begin{figure}
-\begin{cfa}[caption={Recursive printing algorithm using \textbf{multi-acq}.},label={fig:search}]
-monitor printer { ... };
-struct tree {
-	tree * left, right;
-	char * value;
+A \textbf{monitor} is a set of routines that ensure mutual exclusion when accessing shared state.
+More precisely, a monitor is a programming technique that binds mutual exclusion to routine scope, as opposed to locks, where mutual-exclusion is defined by acquire/release calls, independent of lexical context (analogous to block and heap storage allocation).
+The strong association with the call/return paradigm eases programmability, readability and maintainability, at a slight cost in flexibility and efficiency.
+
+Note, like coroutines/threads, both locks and monitors require an abstract handle to reference them, because at their core, both mechanisms are manipulating non-copyable shared-state.
+Copying a lock is insecure because it is possible to copy an open lock and then use the open copy when the original lock is closed to simultaneously access the shared data.
+Copying a monitor is secure because both the lock and shared data are copies, but copying the shared data is meaningless because it no longer represents a unique entity.
+As for coroutines/tasks, a non-copyable (@dtype@) trait is used to capture this requirement, so all locks/monitors must be passed by reference (pointer).
+\begin{cfa}
+trait is_monitor( `dtype` T ) {
+	monitor_desc * get_monitor( T & );
+	void ^?{}( T & mutex );
 };
-void print(printer & mutex p, char * v);
-
-void print(printer & mutex p, tree * t) {
-	print(p, t->value);
-	print(p, t->left );
-	print(p, t->right);
-}
-\end{cfa}
-\end{figure}
-
-Having both @mutex@ and @nomutex@ keywords can be redundant, depending on the meaning of a routine having neither of these keywords.
-For example, it is reasonable that it should default to the safest option (@mutex@) when given a routine without qualifiers @void foo(counter_t & this)@, whereas assuming @nomutex@ is unsafe and may cause subtle errors.
-On the other hand, @nomutex@ is the ``normal'' parameter behaviour, it effectively states explicitly that ``this routine is not special''.
-Another alternative is making exactly one of these keywords mandatory, which provides the same semantics but without the ambiguity of supporting routines with neither keyword.
-Mandatory keywords would also have the added benefit of being self-documented but at the cost of extra typing.
-While there are several benefits to mandatory keywords, they do bring a few challenges.
-Mandatory keywords in \CFA would imply that the compiler must know without doubt whether or not a parameter is a monitor or not.
+\end{cfa}
+
+
+\subsection{Mutex Acquisition}
+\label{s:MutexAcquisition}
+
+While correctness implicitly implies a monitor's mutual exclusion is acquired and released, there are implementation options about when and where the locking/unlocking occurs.
+(Much of this discussion also applies to basic locks.)
+For example, a monitor may need to be passed through multiple helper routines before it becomes necessary to acquire the monitor mutual-exclusion.
+\begin{cfa}[morekeywords=nomutex]
+monitor Aint { int cnt; };					$\C{// atomic integer counter}$
+void ?{}( Aint & `nomutex` this ) with( this ) { cnt = 0; } $\C{// constructor}$
+int ?=?( Aint & `mutex`$\(_{opt}\)$ lhs, int rhs ) with( lhs ) { cnt = rhs; } $\C{// conversions}$
+void ?{}( int & this, Aint & `mutex`$\(_{opt}\)$ v ) { this = v.cnt; }
+int ?=?( int & lhs, Aint & `mutex`$\(_{opt}\)$ rhs ) with( rhs ) { lhs = cnt; }
+int ++?( Aint & `mutex`$\(_{opt}\)$ this ) with( this ) { return ++cnt; } $\C{// increment}$
+\end{cfa}
+The @Aint@ constructor, @?{}@, uses the \lstinline[morekeywords=nomutex]@nomutex@ qualifier indicating mutual exclusion is unnecessary during construction because an object is inaccessible (private) until after it is initialized.
+(While a constructor may publish its address into a global variable, doing so generates a race-condition.)
+The conversion operators for initializing and assigning with a normal integer only need @mutex@, if reading/writing the implementation type is not atomic.
+Finally, the prefix increment operato, @++?@, is normally @mutex@ to protect the incrementing from race conditions, unless there is an atomic increment instruction for the implementation type.
+
+The atomic counter is used without any explicit mutual-exclusion and provides thread-safe semantics, which is similar to the \CC template @std::atomic@.
+\begin{cfa}
+Aint x, y, z;
+++x; ++y; ++z;								$\C{// safe increment by multiple threads}$
+x = 2; y = 2; z = 2;						$\C{// conversions}$
+int i = x, j = y, k = z;
+i = x; j = y; k = z;
+\end{cfa}
+
+For maximum usability, monitors have \newterm{multi-acquire} semantics allowing a thread to acquire it multiple times without deadlock.
+For example, atomically printing the contents of a binary tree:
+\begin{cfa}
+monitor Tree {
+	Tree * left, right;
+	// value
+};
+void print( Tree & mutex tree ) {			$\C{// prefix traversal}$
+	// write value
+	print( tree->left );					$\C{// multiply acquire monitor lock on each recursion}$
+	print( tree->right );
+}
+\end{cfa}
+
+Mandatory monitor qualifiers have the benefit of being self-documented, but requiring both @mutex@ and \lstinline[morekeywords=nomutex]@nomutex@ for all monitor parameter is redundant.
+Instead, one of qualifier semantics can be the default, and the other required.
+For example, assume the safe @mutex@ option for a monitor parameter because assuming \lstinline[morekeywords=nomutex]@nomutex@ may cause subtle errors.
+On the other hand, assuming \lstinline[morekeywords=nomutex]@nomutex@ is the \emph{normal} parameter behaviour, stating explicitly ``this parameter is not special''.
+Providing a default qualifier implies knowing whether a parameter is a monitor.
 Since \CFA relies heavily on traits as an abstraction mechanism, the distinction between a type that is a monitor and a type that looks like a monitor can become blurred.
-For this reason, \CFA only has the @mutex@ keyword and uses no keyword to mean @nomutex@.
-
-The next semantic decision is to establish when @mutex@ may be used as a type qualifier.
-Consider the following declarations:
-\begin{cfa}
-int f1(monitor & mutex m);
-int f2(const monitor & mutex m);
-int f3(monitor ** mutex m);
-int f4(monitor * mutex m []);
-int f5(graph(monitor *) & mutex m);
-\end{cfa}
-The problem is to identify which object(s) should be acquired.
-Furthermore, each object needs to be acquired only once.
-In the case of simple routines like @f1@ and @f2@ it is easy to identify an exhaustive list of objects to acquire on entry.
-Adding indirections (@f3@) still allows the compiler and programmer to identify which object is acquired.
-However, adding in arrays (@f4@) makes it much harder.
-Array lengths are not necessarily known in C, and even then, making sure objects are only acquired once becomes none-trivial.
-This problem can be extended to absurd limits like @f5@, which uses a graph of monitors.
-To make the issue tractable, this project imposes the requirement that a routine may only acquire one monitor per parameter and it must be the type of the parameter with at most one level of indirection (ignoring potential qualifiers).
-Also note that while routine @f3@ can be supported, meaning that monitor @**m@ is acquired, passing an array to this routine would be type-safe and yet result in undefined behaviour because only the first element of the array is acquired.
-However, this ambiguity is part of the C type-system with respects to arrays.
-For this reason, @mutex@ is disallowed in the context where arrays may be passed:
-\begin{cfa}
-int f1(monitor & mutex m);    // Okay : recommended case
-int f2(monitor * mutex m);    // Not Okay : Could be an array
-int f3(monitor mutex m []);  // Not Okay : Array of unknown length
-int f4(monitor ** mutex m);   // Not Okay : Could be an array
-int f5(monitor * mutex m []); // Not Okay : Array of unknown length
-\end{cfa}
-Note that not all array functions are actually distinct in the type system.
-However, even if the code generation could tell the difference, the extra information is still not sufficient to extend meaningfully the monitor call semantic.
-
-Unlike object-oriented monitors, where calling a mutex member \emph{implicitly} acquires mutual-exclusion of the receiver object, \CFA uses an explicit mechanism to specify the object that acquires mutual-exclusion.
-A consequence of this approach is that it extends naturally to multi-monitor calls.
-\begin{cfa}
-int f(MonitorA & mutex a, MonitorB & mutex b);
-
-MonitorA a;
-MonitorB b;
-f(a,b);
-\end{cfa}
-While OO monitors could be extended with a mutex qualifier for multiple-monitor calls, no example of this feature could be found.
-The capability to acquire multiple locks before entering a critical section is called \emph{\textbf{bulk-acq}}.
-In practice, writing multi-locking routines that do not lead to deadlocks is tricky.
+For this reason, \CFA requires programmers to identify the kind of parameter with the @mutex@ keyword and uses no keyword to mean \lstinline[morekeywords=nomutex]@nomutex@.
+
+The next semantic decision is establishing which parameter \emph{types} may be qualified with @mutex@.
+Given:
+\begin{cfa}
+monitor M { ... }
+int f1( M & mutex m );
+int f2( M * mutex m );
+int f3( M * mutex m[] );
+int f4( stack( M * ) & mutex m );
+\end{cfa}
+the issue is that some of these parameter types are composed of multiple objects.
+For @f1@, there is only a single parameter object.
+Adding indirection in @f2@ still identifies a single object.
+However, the matrix in @f3@ introduces multiple objects.
+While shown shortly, multiple acquisition is possible;
+however array lengths are often unknown in C.
+This issue is exacerbated in @f4@, where the data structure must be safely traversed to acquire all of its elements.
+
+To make the issue tractable, \CFA only acquires one monitor per parameter with at most one level of indirection.
+However, the C type-system has an ambiguity with respects to arrays.
+Is the argument for @f2@ a single object or an array of objects?
+If it is an array, only the first element of the array is acquired, which seems unsafe;
+hence, @mutex@ is disallowed for array parameters.
+\begin{cfa}
+int f1( M & mutex m );						$\C{// allowed: recommended case}$
+int f2( M * mutex m );						$\C{// disallowed: could be an array}$
+int f3( M mutex m[$\,$] );					$\C{// disallowed: array length unknown}$
+int f4( M ** mutex m );						$\C{// disallowed: could be an array}$
+int f5( M * mutex m[$\,$] );				$\C{// disallowed: array length unknown}$
+\end{cfa}
+% Note, not all array routines have distinct types: @f2@ and @f3@ have the same type, as do @f4@ and @f5@.
+% However, even if the code generation could tell the difference, the extra information is still not sufficient to extend meaningfully the monitor call semantic.
+
+For object-oriented monitors, calling a mutex member \emph{implicitly} acquires mutual exclusion of the receiver object, @`rec`.foo(...)@.
+\CFA has no receiver, and hence, must use an explicit mechanism to specify which object has mutual exclusion acquired.
+A positive consequence of this design decision is the ability to support multi-monitor routines.
+\begin{cfa}
+int f( M & mutex x, M & mutex y );		$\C{// multiple monitor parameter of any type}$
+M m1, m2;
+f( m1, m2 );
+\end{cfa}
+(While object-oriented monitors can be extended with a mutex qualifier for multiple-monitor members, no prior example of this feature could be found.)
+In practice, writing multi-locking routines that do not deadlock is tricky.
 Having language support for such a feature is therefore a significant asset for \CFA.
-In the case presented above, \CFA guarantees that the order of acquisition is consistent across calls to different routines using the same monitors as arguments.
-This consistent ordering means acquiring multiple monitors is safe from deadlock when using \textbf{bulk-acq}.
-However, users can still force the acquiring order.
-For example, notice which routines use @mutex@/@nomutex@ and how this affects acquiring order:
-\begin{cfa}
-void foo(A& mutex a, B& mutex b) { // acquire a & b
-	...
-}
-
-void bar(A& mutex a, B& /*nomutex*/ b) { // acquire a
-	... foo(a, b); ... // acquire b
-}
-
-void baz(A& /*nomutex*/ a, B& mutex b) { // acquire b
-	... foo(a, b); ... // acquire a
-}
-\end{cfa}
-The \textbf{multi-acq} monitor lock allows a monitor lock to be acquired by both @bar@ or @baz@ and acquired again in @foo@.
-In the calls to @bar@ and @baz@ the monitors are acquired in opposite order.
-
-However, such use leads to lock acquiring order problems.
-In the example above, the user uses implicit ordering in the case of function @foo@ but explicit ordering in the case of @bar@ and @baz@.
-This subtle difference means that calling these routines concurrently may lead to deadlock and is therefore undefined behaviour.
-As shown~\cite{Lister77}, solving this problem requires:
-\begin{enumerate}
-	\item Dynamically tracking the monitor-call order.
-	\item Implement rollback semantics.
-\end{enumerate}
-While the first requirement is already a significant constraint on the system, implementing a general rollback semantics in a C-like language is still prohibitively complex~\cite{Dice10}.
-In \CFA, users simply need to be careful when acquiring multiple monitors at the same time or only use \textbf{bulk-acq} of all the monitors.
-While \CFA provides only a partial solution, most systems provide no solution and the \CFA partial solution handles many useful cases.
-
-For example, \textbf{multi-acq} and \textbf{bulk-acq} can be used together in interesting ways:
-\begin{cfa}
-monitor bank { ... };
-
-void deposit( bank & mutex b, int deposit );
-
-void transfer( bank & mutex mybank, bank & mutex yourbank, int me2you) {
-	deposit( mybank, -me2you );
-	deposit( yourbank, me2you );
+
+The capability to acquire multiple locks before entering a critical section is called \newterm{bulk acquire}.
+In the previous example, \CFA guarantees the order of acquisition is consistent across calls to different routines using the same monitors as arguments.
+This consistent ordering means acquiring multiple monitors is safe from deadlock.
+However, users can force the acquiring order.
+For example, notice the use of @mutex@/\lstinline[morekeywords=nomutex]@nomutex@ and how this affects the acquiring order:
+\begin{cfa}
+void foo( M & mutex m1, M & mutex m2 );		$\C{// acquire m1 and m2}$
+void bar( M & mutex m1, M & /* nomutex */ m2 ) { $\C{// acquire m1}$
+	... foo( m1, m2 ); ...					$\C{// acquire m2}$
+}
+void baz( M & /* nomutex */ m1, M & mutex m2 ) { $\C{// acquire m2}$
+	... foo( m1, m2 ); ...					$\C{// acquire m1}$
+}
+\end{cfa}
+The multi-acquire semantics allows @bar@ or @baz@ to acquire a monitor lock and reacquire it in @foo@.
+In the calls to @bar@ and @baz@, the monitors are acquired in opposite order.
+
+However, such use leads to lock acquiring order problems resulting in deadlock~\cite{Lister77}, where detecting it requires dynamically tracking of monitor calls, and dealing with it requires rollback semantics~\cite{Dice10}.
+In \CFA, safety is guaranteed by using bulk acquire of all monitors to shared objects, whereas other monitor systems provide no aid.
+While \CFA provides only a partial solution, the \CFA partial solution handles many useful cases.
+\begin{cfa}
+monitor Bank { ... };
+void deposit( Bank & `mutex` b, int deposit );
+void transfer( Bank & `mutex` mybank, Bank & `mutex` yourbank, int me2you) {
+	deposit( mybank, `-`me2you );			$\C{// debit}$
+	deposit( yourbank, me2you );			$\C{// credit}$
 }
 \end{cfa}
 This example shows a trivial solution to the bank-account transfer problem~\cite{BankTransfer}.
-Without \textbf{multi-acq} and \textbf{bulk-acq}, the solution to this problem is much more involved and requires careful engineering.
+Without multi- and bulk acquire, the solution to this problem requires careful engineering.
 
 
 \subsection{\protect\lstinline|mutex| statement} \label{mutex-stmt}
 
-The call semantics discussed above have one software engineering issue: only a routine can acquire the mutual-exclusion of a set of monitor. \CFA offers the @mutex@ statement to work around the need for unnecessary names, avoiding a major software engineering problem~\cite{2FTwoHardThings}.
-Table \ref{f:mutex-stmt} shows an example of the @mutex@ statement, which introduces a new scope in which the mutual-exclusion of a set of monitor is acquired.
-Beyond naming, the @mutex@ statement has no semantic difference from a routine call with @mutex@ parameters.
-
-\begin{table}
-\begin{center}
-\begin{tabular}{|c|c|}
-function call & @mutex@ statement \\
-\hline
-\begin{cfa}[tabsize=3]
+The monitor call-semantics associate all locking semantics to routines.
+Like Java, \CFA offers an alternative @mutex@ statement to reduce refactoring and naming.
+\begin{cquote}
+\begin{tabular}{@{}c|@{\hspace{\parindentlnth}}c@{}}
+routine call & @mutex@ statement \\
+\begin{cfa}
 monitor M {};
 void foo( M & mutex m1, M & mutex m2 ) {
 	// critical section
 }
-
 void bar( M & m1, M & m2 ) {
 	foo( m1, m2 );
 }
-\end{cfa}&\begin{cfa}[tabsize=3]
-monitor M {};
+\end{cfa}
+&
+\begin{cfa}
+
 void bar( M & m1, M & m2 ) {
-	mutex(m1, m2) {
+	mutex( m1, m2 ) {	// remove refactoring and naming
 		// critical section
 	}
 }
 
-
 \end{cfa}
 \end{tabular}
-\end{center}
-\caption{Regular call semantics vs. \protect\lstinline|mutex| statement}
-\label{f:mutex-stmt}
-\end{table}
-
-% ======================================================================
-% ======================================================================
-\subsection{Data semantics} \label{data}
-% ======================================================================
-% ======================================================================
-Once the call semantics are established, the next step is to establish data semantics.
-Indeed, until now a monitor is used simply as a generic handle but in most cases monitors contain shared data.
-This data should be intrinsic to the monitor declaration to prevent any accidental use of data without its appropriate protection.
-For example, here is a complete version of the counter shown in section \ref{call}:
-\begin{cfa}
-monitor counter_t {
-	int value;
+\end{cquote}
+
+
+\section{Scheduling}
+\label{s:Scheduling}
+
+While monitor mutual-exclusion provides safe access to shared data, the monitor data may indicate that a thread accessing it cannot proceed.
+For example, Figure~\ref{f:GenericBoundedBuffer} shows a bounded buffer that may be full/empty so produce/consumer threads must block.
+Leaving the monitor and trying again (busy waiting) is impractical for high-level programming.
+Monitors eliminate busy waiting by providing internal synchronization to schedule threads needing access to the shared data, where the synchronization is blocking (threads are parked) versus spinning.
+Synchronization is generally achieved with internal~\cite{Hoare74} or external~\cite[\S~2.9.2]{uC++} scheduling, where \newterm{scheduling} defines which thread acquires the critical section next.
+\newterm{Internal scheduling} is characterized by each thread entering the monitor and making an individual decision about proceeding or blocking, while \newterm{external scheduling} is characterized by an entering thread making a decision about proceeding for itself and on behalf of other threads attempting entry.
+
+Figure~\ref{f:BBInt} shows a \CFA bounded-buffer with internal scheduling, where producers/consumers enter the monitor, see the buffer is full/empty, and block on an appropriate condition lock, @full@/@empty@.
+The @wait@ routine atomically blocks the calling thread and implicitly releases the monitor lock(s) for all monitors in the routine's parameter list.
+The appropriate condition lock is signalled to unblock an opposite kind of thread after an element is inserted/removed from the buffer.
+Signalling is unconditional, because signalling an empty condition lock does nothing.
+
+Signalling semantics cannot have the signaller and signalled thread in the monitor simultaneously, which means:
+\begin{enumerate}
+\item
+The signalling thread returns immediately, and the signalled thread continues.
+\item
+The signalling thread continues and the signalled thread is marked for urgent unblocking at the next scheduling point (exit/wait).
+\item
+The signalling thread blocks but is marked for urgrent unblocking at the next scheduling point and the signalled thread continues.
+\end{enumerate}
+The first approach is too restrictive, as it precludes solving a reasonable class of problems, \eg dating service.
+\CFA supports the next two semantics as both are useful.
+Finally, while it is common to store a @condition@ as a field of the monitor, in \CFA, a @condition@ variable can be created/stored independently.
+Furthermore, a condition variable is tied to a \emph{group} of monitors on first use (called \newterm{branding}), which means that using internal scheduling with distinct sets of monitors requires one condition variable per set of monitors.
+
+\begin{figure}
+\centering
+\newbox\myboxA
+\begin{lrbox}{\myboxA}
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
+forall( otype T ) { // distribute forall
+	monitor Buffer {
+		`condition` full, empty;
+		int front, back, count;
+		T elements[10];
+	};
+	void ?{}( Buffer(T) & buffer ) with(buffer) {
+		[front, back, count] = 0;
+	}
+
+	void insert( Buffer(T) & mutex buffer, T elem )
+				with(buffer) {
+		if ( count == 10 ) `wait( empty )`;
+		// insert elem into buffer
+		`signal( full )`;
+	}
+	T remove( Buffer(T) & mutex buffer ) with(buffer) {
+		if ( count == 0 ) `wait( full )`;
+		// remove elem from buffer
+		`signal( empty )`;
+		return elem;
+	}
+}
+\end{cfa}
+\end{lrbox}
+
+\newbox\myboxB
+\begin{lrbox}{\myboxB}
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
+forall( otype T ) { // distribute forall
+	monitor Buffer {
+
+		int front, back, count;
+		T elements[10];
+	};
+	void ?{}( Buffer(T) & buffer ) with(buffer) {
+		[front, back, count] = 0;
+	}
+	T remove( Buffer(T) & mutex buffer ); // forward
+	void insert( Buffer(T) & mutex buffer, T elem )
+				with(buffer) {
+		if ( count == 10 ) `waitfor( remove, buffer )`;
+		// insert elem into buffer
+
+	}
+	T remove( Buffer(T) & mutex buffer ) with(buffer) {
+		if ( count == 0 ) `waitfor( insert, buffer )`;
+		// remove elem from buffer
+
+		return elem;
+	}
+}
+\end{cfa}
+\end{lrbox}
+
+\subfloat[Internal Scheduling]{\label{f:BBInt}\usebox\myboxA}
+%\qquad
+\subfloat[External Scheduling]{\label{f:BBExt}\usebox\myboxB}
+\caption{Generic Bounded-Buffer}
+\label{f:GenericBoundedBuffer}
+\end{figure}
+
+Figure~\ref{f:BBExt} shows a \CFA bounded-buffer with external scheduling, where producers/consumers detecting a full/empty buffer block and prevent more producers/consumers from entering the monitor until the buffer has a free/empty slot.
+External scheduling is controlled by the @waitfor@ statement, which atomically blocks the calling thread, releases the monitor lock, and restricts the routine calls that can next acquire mutual exclusion.
+If the buffer is full, only calls to @remove@ can acquire the buffer, and if the buffer is empty, only calls to @insert@ can acquire the buffer.
+Threads making calls to routines that are currently excluded block outside (external) of the monitor on a calling queue, versus blocking on condition queues inside (internal) of the monitor.
+% External scheduling is more constrained and explicit, which helps programmers reduce the non-deterministic nature of concurrency.
+External scheduling allows users to wait for events from other threads without concern of unrelated events occurring.
+The mechnaism can be done in terms of control flow, \eg Ada @accept@ or \uC @_Accept@, or in terms of data, \eg Go channels.
+While both mechanisms have strengths and weaknesses, this project uses a control-flow mechanism to stay consistent with other language semantics.
+Two challenges specific to \CFA for external scheduling are loose object-definitions (see Section~\ref{s:LooseObjectDefinitions}) and multiple-monitor routines (see Section~\ref{s:Multi-MonitorScheduling}).
+
+For internal scheduling, non-blocking signalling (as in the producer/consumer example) is used when the signaller is providing the cooperation for a waiting thread;
+the signaller enters the monitor and changes state, detects a waiting threads that can use the state, performs a non-blocking signal on the condition queue for the waiting thread, and exits the monitor to run concurrently.
+The waiter unblocks next, uses/takes the state, and exits the monitor.
+Blocking signalling is the reverse, where the waiter is providing the cooperation for the signalling thread;
+the signaller enters the monitor, detects a waiting thread providing the necessary state, performs a blocking signal to place it on the urgent queue and unblock the waiter.
+The waiter changes state and exits the monitor, and the signaller unblocks next from the urgent queue to use/take the state.
+
+Figure~\ref{f:DatingService} shows a dating service demonstrating the two forms of signalling: non-blocking and blocking.
+The dating service matches girl and boy threads with matching compatibility codes so they can exchange phone numbers.
+A thread blocks until an appropriate partner arrives.
+The complexity is exchanging phone number in the monitor because the monitor mutual-exclusion property prevents exchanging numbers.
+For internal scheduling, the @exchange@ condition is necessary to block the thread finding the match, while the matcher unblocks to take the oppose number, post its phone number, and unblock the partner. 
+For external scheduling, the implicit urgent-condition replaces the explict @exchange@-condition and @signal_block@ puts the finding thread on the urgent condition and unblocks the matcher..
+
+The dating service is an example of a monitor that cannot be written using external scheduling because it requires knowledge of calling parameters to make scheduling decisions, and parameters of waiting threads are unavailable;
+as well, an arriving thread may not find a partner and must wait, which requires a condition variable, and condition variables imply internal scheduling.
+
+\begin{figure}
+\centering
+\newbox\myboxA
+\begin{lrbox}{\myboxA}
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
+enum { CCodes = 20 };
+monitor DS {
+	int GirlPhNo, BoyPhNo;
+	condition Girls[CCodes], Boys[CCodes];
+	condition exchange;
 };
-
-void ?{}(counter_t & this) {
-	this.cnt = 0;
-}
-
-int ?++(counter_t & mutex this) {
-	return ++this.value;
-}
-
-// need for mutex is platform dependent here
-void ?{}(int * this, counter_t & mutex cnt) {
-	*this = (int)cnt;
-}
-\end{cfa}
-
-Like threads and coroutines, monitors are defined in terms of traits with some additional language support in the form of the @monitor@ keyword.
-The monitor trait is:
-\begin{cfa}
-trait is_monitor(dtype T) {
-	monitor_desc * get_monitor( T & );
-	void ^?{}( T & mutex );
+int girl( DS & mutex ds, int phNo, int ccode ) {
+	if ( is_empty( Boys[ccode] ) ) {
+		wait( Girls[ccode] );
+		GirlPhNo = phNo;
+		exchange.signal();
+	} else {
+		GirlPhNo = phNo;
+		signal( Boys[ccode] );
+		exchange.wait();
+	} // if
+	return BoyPhNo;
+}
+int boy( DS & mutex ds, int phNo, int ccode ) {
+	// as above with boy/girl interchanged
+}
+\end{cfa}
+\end{lrbox}
+
+\newbox\myboxB
+\begin{lrbox}{\myboxB}
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
+
+monitor DS {
+	int GirlPhNo, BoyPhNo;
+	condition Girls[CCodes], Boys[CCodes];
+
 };
-\end{cfa}
-Note that the destructor of a monitor must be a @mutex@ routine to prevent deallocation while a thread is accessing the monitor.
-As with any object, calls to a monitor, using @mutex@ or otherwise, is undefined behaviour after the destructor has run.
-
-% ======================================================================
-% ======================================================================
-\section{Internal Scheduling} \label{intsched}
-% ======================================================================
-% ======================================================================
-In addition to mutual exclusion, the monitors at the core of \CFA's concurrency can also be used to achieve synchronization.
-With monitors, this capability is generally achieved with internal or external scheduling as in~\cite{Hoare74}.
-With \textbf{scheduling} loosely defined as deciding which thread acquires the critical section next, \textbf{internal scheduling} means making the decision from inside the critical section (\ie with access to the shared state), while \textbf{external scheduling} means making the decision when entering the critical section (\ie without access to the shared state).
-Since internal scheduling within a single monitor is mostly a solved problem, this paper concentrates on extending internal scheduling to multiple monitors.
-Indeed, like the \textbf{bulk-acq} semantics, internal scheduling extends to multiple monitors in a way that is natural to the user but requires additional complexity on the implementation side.
-
-First, here is a simple example of internal scheduling:
-
-\begin{cfa}
-monitor A {
-	condition e;
-}
-
-void foo(A& mutex a1, A& mutex a2) {
+int girl( DS & mutex ds, int phNo, int ccode ) {
+	if ( is_empty( Boys[ccode] ) ) { // no compatible
+		wait( Girls[ccode] ); // wait for boy
+		GirlPhNo = phNo; // make phone number available
+
+	} else {
+		GirlPhNo = phNo; // make phone number available
+		signal_block( Boys[ccode] ); // restart boy
+
+	} // if
+	return BoyPhNo;
+}
+int boy( DS & mutex ds, int phNo, int ccode ) {
+	// as above with boy/girl interchanged
+}
+\end{cfa}
+\end{lrbox}
+
+\subfloat[\lstinline@signal@]{\label{f:DatingSignal}\usebox\myboxA}
+\qquad
+\subfloat[\lstinline@signal_block@]{\label{f:DatingSignalBlock}\usebox\myboxB}
+\caption{Dating service. }
+\label{f:DatingService}
+\end{figure}
+
+Both internal and external scheduling extend to multiple monitors in a natural way.
+\begin{cquote}
+\begin{tabular}{@{}l@{\hspace{3\parindentlnth}}l@{}}
+\begin{cfa}
+monitor M { `condition e`; ... };
+void foo( M & mutex m1, M & mutex m2 ) {
+	... wait( `e` ); ...   // wait( e, m1, m2 )
+	... wait( `e, m1` ); ...
+	... wait( `e, m2` ); ...
+}
+\end{cfa}
+&
+\begin{cfa}
+void rtn$\(_1\)$( M & mutex m1, M & mutex m2 );
+void rtn$\(_2\)$( M & mutex m1 );
+void bar( M & mutex m1, M & mutex m2 ) {
+	... waitfor( `rtn` ); ...       // $\LstCommentStyle{waitfor( rtn\(_1\), m1, m2 )}$
+	... waitfor( `rtn, m1` ); ... // $\LstCommentStyle{waitfor( rtn\(_2\), m1 )}$
+}
+\end{cfa}
+\end{tabular}
+\end{cquote}
+For @wait( e )@, the default semantics is to atomically block the signaller and release all acquired mutex types in the parameter list, \ie @wait( e, m1, m2 )@.
+To override the implicit multi-monitor wait, specific mutex parameter(s) can be specified, \eg @wait( e, m1 )@.
+Wait statically verifies the released monitors are the acquired mutex-parameters so unconditional release is safe.
+Finally, a signaller,
+\begin{cfa}
+void baz( M & mutex m1, M & mutex m2 ) {
+	... signal( e ); ...
+}
+\end{cfa}
+must have acquired monitor locks that are greater than or equal to the number of locks for the waiting thread signalled from the condition queue.
+
+Similarly, for @waitfor( rtn )@, the default semantics is to atomically block the acceptor and release all acquired mutex types in the parameter list, \ie @waitfor( rtn, m1, m2 )@.
+To override the implicit multi-monitor wait, specific mutex parameter(s) can be specified, \eg @waitfor( rtn, m1 )@.
+Waitfor statically verifies the released monitors are the same as the acquired mutex-parameters of the given routine or routine pointer.
+To statically verify the released monitors match with the accepted routine's mutex parameters, the routine (pointer) prototype must be accessible.
+
+Given the ability to release a subset of acquired monitors can result in a \newterm{nested monitor}~\cite{Lister77} deadlock.
+\begin{cfa}
+void foo( M & mutex m1, M & mutex m2 ) {
+	... wait( `e, m1` ); ...				$\C{// release m1, keeping m2 acquired )}$
+void bar( M & mutex m1, M & mutex m2 ) {	$\C{// must acquire m1 and m2 )}$
+	... signal( `e` ); ...
+\end{cfa}
+The @wait@ only releases @m1@ so the signalling thread cannot acquire both @m1@ and @m2@ to  enter @bar@ to get to the @signal@.
+While deadlock issues can occur with multiple/nesting acquisition, this issue results from the fact that locks, and by extension monitors, are not perfectly composable.
+
+Finally, an important aspect of monitor implementation is barging, \ie can calling threads barge ahead of signalled threads?
+If barging is allowed, synchronization between a singller and signallee is difficult, often requiring multiple unblock/block cycles (looping around a wait rechecking if a condition is met).
+\begin{quote}
+However, we decree that a signal operation be followed immediately by resumption of a waiting program, without possibility of an intervening procedure call from yet a third program.
+It is only in this way that a waiting program has an absolute guarantee that it can acquire the resource just released by the signalling program without any danger that a third program will interpose a monitor entry and seize the resource instead.~\cite[p.~550]{Hoare74}
+\end{quote}
+\CFA scheduling \emph{precludes} barging, which simplifies synchronization among threads in the monitor and increases correctness.
+For example, there are no loops in either bounded buffer solution in Figure~\ref{f:GenericBoundedBuffer}.
+Supporting barging prevention as well as extending internal scheduling to multiple monitors is the main source of complexity in the design and implementation of \CFA concurrency.
+
+
+\subsection{Barging Prevention}
+
+Figure~\ref{f:BargingPrevention} shows \CFA code where bulk acquire adds complexity to the internal-signalling semantics.
+The complexity begins at the end of the inner @mutex@ statement, where the semantics of internal scheduling need to be extended for multiple monitors.
+The problem is that bulk acquire is used in the inner @mutex@ statement where one of the monitors is already acquired.
+When the signalling thread reaches the end of the inner @mutex@ statement, it should transfer ownership of @m1@ and @m2@ to the waiting threads to prevent barging into the outer @mutex@ statement by another thread.
+However, both the signalling and waiting thread W1 still need monitor @m1@.
+
+\begin{figure}
+\newbox\myboxA
+\begin{lrbox}{\myboxA}
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
+monitor M m1, m2;
+condition c;
+mutex( m1 ) { // $\LstCommentStyle{\color{red}outer}$
 	...
-	// Wait for cooperation from bar()
-	wait(a1.e);
+	mutex( m1, m2 ) { // $\LstCommentStyle{\color{red}inner}$
+		... `signal( c )`; ...
+		// m1, m2 acquired
+	} // $\LstCommentStyle{\color{red}release m2}$
+	// m1 acquired
+} // release m1
+\end{cfa}
+\end{lrbox}
+
+\newbox\myboxB
+\begin{lrbox}{\myboxB}
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
+
+
+mutex( m1 ) {
 	...
-}
-
-void bar(A& mutex a1, A& mutex a2) {
-	// Provide cooperation for foo()
-	...
-	// Unblock foo
-	signal(a1.e);
-}
-\end{cfa}
-There are two details to note here.
-First, @signal@ is a delayed operation; it only unblocks the waiting thread when it reaches the end of the critical section.
-This semantics is needed to respect mutual-exclusion, \ie the signaller and signalled thread cannot be in the monitor simultaneously.
-The alternative is to return immediately after the call to @signal@, which is significantly more restrictive.
-Second, in \CFA, while it is common to store a @condition@ as a field of the monitor, a @condition@ variable can be stored/created independently of a monitor.
-Here routine @foo@ waits for the @signal@ from @bar@ before making further progress, ensuring a basic ordering.
-
-An important aspect of the implementation is that \CFA does not allow barging, which means that once function @bar@ releases the monitor, @foo@ is guaranteed to be the next thread to acquire the monitor (unless some other thread waited on the same condition).
-This guarantee offers the benefit of not having to loop around waits to recheck that a condition is met.
-The main reason \CFA offers this guarantee is that users can easily introduce barging if it becomes a necessity but adding barging prevention or barging avoidance is more involved without language support.
-Supporting barging prevention as well as extending internal scheduling to multiple monitors is the main source of complexity in the design and implementation of \CFA concurrency.
-
-% ======================================================================
-% ======================================================================
-\subsection{Internal Scheduling - Multi-Monitor}
-% ======================================================================
-% ======================================================================
-It is easy to understand the problem of multi-monitor scheduling using a series of pseudo-code examples.
-Note that for simplicity in the following snippets of pseudo-code, waiting and signalling is done using an implicit condition variable, like Java built-in monitors.
-Indeed, @wait@ statements always use the implicit condition variable as parameters and explicitly name the monitors (A and B) associated with the condition.
-Note that in \CFA, condition variables are tied to a \emph{group} of monitors on first use (called branding), which means that using internal scheduling with distinct sets of monitors requires one condition variable per set of monitors.
-The example below shows the simple case of having two threads (one for each column) and a single monitor A.
-
-\begin{multicols}{2}
-thread 1
-\begin{cfa}
-acquire A
-	wait A
-release A
-\end{cfa}
-
-\columnbreak
-
-thread 2
-\begin{cfa}
-acquire A
-	signal A
-release A
-\end{cfa}
-\end{multicols}
-One thread acquires before waiting (atomically blocking and releasing A) and the other acquires before signalling.
-It is important to note here that both @wait@ and @signal@ must be called with the proper monitor(s) already acquired.
-This semantic is a logical requirement for barging prevention.
-
-A direct extension of the previous example is a \textbf{bulk-acq} version:
-\begin{multicols}{2}
-\begin{cfa}
-acquire A & B
-	wait A & B
-release A & B
-\end{cfa}
-\columnbreak
-\begin{cfa}
-acquire A & B
-	signal A & B
-release A & B
-\end{cfa}
-\end{multicols}
-\noindent This version uses \textbf{bulk-acq} (denoted using the {\sf\&} symbol), but the presence of multiple monitors does not add a particularly new meaning.
-Synchronization happens between the two threads in exactly the same way and order.
-The only difference is that mutual exclusion covers a group of monitors.
-On the implementation side, handling multiple monitors does add a degree of complexity as the next few examples demonstrate.
-
-While deadlock issues can occur when nesting monitors, these issues are only a symptom of the fact that locks, and by extension monitors, are not perfectly composable.
-For monitors, a well-known deadlock problem is the Nested Monitor Problem~\cite{Lister77}, which occurs when a @wait@ is made by a thread that holds more than one monitor.
-For example, the following cfa-code runs into the nested-monitor problem:
-\begin{multicols}{2}
-\begin{cfa}
-acquire A
-	acquire B
-		wait B
-	release B
-release A
-\end{cfa}
-
-\columnbreak
-
-\begin{cfa}
-acquire A
-	acquire B
-		signal B
-	release B
-release A
-\end{cfa}
-\end{multicols}
-\noindent The @wait@ only releases monitor @B@ so the signalling thread cannot acquire monitor @A@ to get to the @signal@.
-Attempting release of all acquired monitors at the @wait@ introduces a different set of problems, such as releasing monitor @C@, which has nothing to do with the @signal@.
-
-However, for monitors as for locks, it is possible to write a program using nesting without encountering any problems if nesting is done correctly.
-For example, the next cfa-code snippet acquires monitors {\sf A} then {\sf B} before waiting, while only acquiring {\sf B} when signalling, effectively avoiding the Nested Monitor Problem~\cite{Lister77}.
-
-\begin{multicols}{2}
-\begin{cfa}
-acquire A
-	acquire B
-		wait B
-	release B
-release A
-\end{cfa}
-
-\columnbreak
-
-\begin{cfa}
-
-acquire B
-	signal B
-release B
-
-\end{cfa}
-\end{multicols}
-
-\noindent However, this simple refactoring may not be possible, forcing more complex restructuring.
-
-% ======================================================================
-% ======================================================================
-\subsection{Internal Scheduling - In Depth}
-% ======================================================================
-% ======================================================================
-
-A larger example is presented to show complex issues for \textbf{bulk-acq} and its implementation options are analyzed.
-Figure~\ref{f:int-bulk-cfa} shows an example where \textbf{bulk-acq} adds a significant layer of complexity to the internal signalling semantics, and listing \ref{f:int-bulk-cfa} shows the corresponding \CFA code to implement the cfa-code in listing \ref{f:int-bulk-cfa}.
-For the purpose of translating the given cfa-code into \CFA-code, any method of introducing a monitor is acceptable, \eg @mutex@ parameters, global variables, pointer parameters, or using locals with the @mutex@ statement.
-
-\begin{figure}
-\begin{multicols}{2}
-Waiting thread
-\begin{cfa}[numbers=left]
-acquire A
-	// Code Section 1
-	acquire A & B
-		// Code Section 2
-		wait A & B
-		// Code Section 3
-	release A & B
-	// Code Section 4
-release A
-\end{cfa}
-\columnbreak
-Signalling thread
-\begin{cfa}[numbers=left, firstnumber=10,escapechar=|]
-acquire A
-	// Code Section 5
-	acquire A & B
-		// Code Section 6
-		|\label{line:signal1}|signal A & B
-		// Code Section 7
-	|\label{line:releaseFirst}|release A & B
-	// Code Section 8
-|\label{line:lastRelease}|release A
-\end{cfa}
-\end{multicols}
-\begin{cfa}[caption={Internal scheduling with \textbf{bulk-acq}},label={f:int-bulk-cfa}]
-\end{cfa}
-\begin{center}
-\begin{cfa}[xleftmargin=.4\textwidth]
-monitor A a;
-monitor B b;
-condition c;
-\end{cfa}
-\end{center}
-\begin{multicols}{2}
-Waiting thread
-\begin{cfa}
-mutex(a) {
-	// Code Section 1
-	mutex(a, b) {
-		// Code Section 2
-		wait(c);
-		// Code Section 3
-	}
-	// Code Section 4
-}
-\end{cfa}
-\columnbreak
-Signalling thread
-\begin{cfa}
-mutex(a) {
-	// Code Section 5
-	mutex(a, b) {
-		// Code Section 6
-		signal(c);
-		// Code Section 7
-	}
-	// Code Section 8
-}
-\end{cfa}
-\end{multicols}
-\begin{cfa}[caption={Equivalent \CFA code for listing \ref{f:int-bulk-cfa}},label={f:int-bulk-cfa}]
-\end{cfa}
-\begin{multicols}{2}
-Waiter
-\begin{cfa}[numbers=left]
-acquire A
-	acquire A & B
-		wait A & B
-	release A & B
-release A
-\end{cfa}
-
-\columnbreak
-
-Signaller
-\begin{cfa}[numbers=left, firstnumber=6,escapechar=|]
-acquire A
-	acquire A & B
-		signal A & B
-	release A & B
-	|\label{line:secret}|// Secretly keep B here
-release A
-// Wakeup waiter and transfer A & B
-\end{cfa}
-\end{multicols}
-\begin{cfa}[caption={Figure~\ref{f:int-bulk-cfa}, with delayed signalling comments},label={f:int-secret}]
-\end{cfa}
+	mutex( m1, m2 ) {
+		... `wait( c )`; // block and release m1, m2
+		// m1, m2 acquired
+	} // $\LstCommentStyle{\color{red}release m2}$
+	// m1 acquired
+} // release m1
+\end{cfa}
+\end{lrbox}
+
+\newbox\myboxC
+\begin{lrbox}{\myboxC}
+\begin{cfa}[aboveskip=0pt,belowskip=0pt]
+
+
+mutex( m2 ) {
+	... `wait( c )`; ...
+	// m2 acquired
+} // $\LstCommentStyle{\color{red}release m2}$
+
+
+
+
+\end{cfa}
+\end{lrbox}
+
+\begin{cquote}
+\subfloat[Signalling Thread]{\label{f:SignallingThread}\usebox\myboxA}
+\hspace{2\parindentlnth}
+\subfloat[Waiting Thread (W1)]{\label{f:WaitingThread}\usebox\myboxB}
+\hspace{2\parindentlnth}
+\subfloat[Waiting Thread (W2)]{\label{f:OtherWaitingThread}\usebox\myboxC}
+\end{cquote}
+\caption{Barging Prevention}
+\label{f:BargingPrevention}
 \end{figure}
 
-The complexity begins at code sections 4 and 8 in listing \ref{f:int-bulk-cfa}, which are where the existing semantics of internal scheduling needs to be extended for multiple monitors.
-The root of the problem is that \textbf{bulk-acq} is used in a context where one of the monitors is already acquired, which is why it is important to define the behaviour of the previous cfa-code.
-When the signaller thread reaches the location where it should ``release @A & B@'' (listing \ref{f:int-bulk-cfa} line \ref{line:releaseFirst}), it must actually transfer ownership of monitor @B@ to the waiting thread.
-This ownership transfer is required in order to prevent barging into @B@ by another thread, since both the signalling and signalled threads still need monitor @A@.
-There are three options:
-
-\subsubsection{Delaying Signals}
-The obvious solution to the problem of multi-monitor scheduling is to keep ownership of all locks until the last lock is ready to be transferred.
-It can be argued that that moment is when the last lock is no longer needed, because this semantics fits most closely to the behaviour of single-monitor scheduling.
-This solution has the main benefit of transferring ownership of groups of monitors, which simplifies the semantics from multiple objects to a single group of objects, effectively making the existing single-monitor semantic viable by simply changing monitors to monitor groups.
-This solution releases the monitors once every monitor in a group can be released.
-However, since some monitors are never released (\eg the monitor of a thread), this interpretation means a group might never be released.
-A more interesting interpretation is to transfer the group until all its monitors are released, which means the group is not passed further and a thread can retain its locks.
-
-However, listing \ref{f:int-secret} shows this solution can become much more complicated depending on what is executed while secretly holding B at line \ref{line:secret}, while avoiding the need to transfer ownership of a subset of the condition monitors.
+One scheduling solution is for the signaller to keep ownership of all locks until the last lock is ready to be transferred, because this semantics fits most closely to the behaviour of single-monitor scheduling.
+However, Figure~\ref{f:OtherWaitingThread} shows this solution is complex depending on other waiters, resulting is choices when the signaller finishes the inner mutex-statement.
+The singaller can retain @m2@ until completion of the outer mutex statement and pass the locks to waiter W1, or it can pass @m2@ to waiter W2 after completing the inner mutex-statement, while continuing to hold @m1@.
+In the latter case, waiter W2 must eventually pass @m2@ to waiter W1, which is complex because W1 may have waited before W2, so W2 is unaware of it.
+Furthermore, there is an execution sequence where the signaller always finds waiter W2, and hence, waiter W1 starves.
+
+While a number of approaches were examined~\cite[\S~4.3]{Delisle18}, the solution chosen for \CFA is a novel techique called \newterm{partial signalling}.
+Signalled threads are moved to an urgent queue and the waiter at the front defines the set of monitors necessary for it to unblock.
+Partial signalling transfers ownership of monitors to the front waiter.
+When the signaller thread exits or waits in the monitor the front waiter is unblocked if all its monitors are released.
+This solution has the benefit that complexity is encapsulated into only two actions: passing monitors to the next owner when they should be released and conditionally waking threads if all conditions are met.
+
+\begin{comment}
 Figure~\ref{f:dependency} shows a slightly different example where a third thread is waiting on monitor @A@, using a different condition variable.
 Because the third thread is signalled when secretly holding @B@, the goal  becomes unreachable.
@@ -1800,6 +1773,6 @@
 In both cases, the threads need to be able to distinguish, on a per monitor basis, which ones need to be released and which ones need to be transferred, which means knowing when to release a group becomes complex and inefficient (see next section) and therefore effectively precludes this approach.
 
+
 \subsubsection{Dependency graphs}
-
 
 \begin{figure}
@@ -1878,113 +1851,10 @@
 The extra challenge is that this dependency graph is effectively post-mortem, but the runtime system needs to be able to build and solve these graphs as the dependencies unfold.
 Resolving dependency graphs being a complex and expensive endeavour, this solution is not the preferred one.
-
-\subsubsection{Partial Signalling} \label{partial-sig}
-Finally, the solution that is chosen for \CFA is to use partial signalling.
-Again using listing \ref{f:int-bulk-cfa}, the partial signalling solution transfers ownership of monitor @B@ at lines \ref{line:signal1} to the waiter but does not wake the waiting thread since it is still using monitor @A@.
-Only when it reaches line \ref{line:lastRelease} does it actually wake up the waiting thread.
-This solution has the benefit that complexity is encapsulated into only two actions: passing monitors to the next owner when they should be released and conditionally waking threads if all conditions are met.
-This solution has a much simpler implementation than a dependency graph solving algorithms, which is why it was chosen.
-Furthermore, after being fully implemented, this solution does not appear to have any significant downsides.
-
-Using partial signalling, listing \ref{f:dependency} can be solved easily:
-\begin{itemize}
-	\item When thread $\gamma$ reaches line \ref{line:release-ab} it transfers monitor @B@ to thread $\alpha$ and continues to hold monitor @A@.
-	\item When thread $\gamma$ reaches line \ref{line:release-a}  it transfers monitor @A@ to thread $\beta$  and wakes it up.
-	\item When thread $\beta$  reaches line \ref{line:release-aa} it transfers monitor @A@ to thread $\alpha$ and wakes it up.
-\end{itemize}
-
-% ======================================================================
-% ======================================================================
-\subsection{Signalling: Now or Later}
-% ======================================================================
-% ======================================================================
-\begin{table}
-\begin{tabular}{|c|c|}
-@signal@ & @signal_block@ \\
-\hline
-\begin{cfa}[tabsize=3]
-monitor DatingService {
-	// compatibility codes
-	enum{ CCodes = 20 };
-
-	int girlPhoneNo
-	int boyPhoneNo;
-};
-
-condition girls[CCodes];
-condition boys [CCodes];
-condition exchange;
-
-int girl(int phoneNo, int cfa) {
-	// no compatible boy ?
-	if(empty(boys[cfa])) {
-		wait(girls[cfa]);		// wait for boy
-		girlPhoneNo = phoneNo;		// make phone number available
-		signal(exchange);		// wake boy from chair
-	} else {
-		girlPhoneNo = phoneNo;		// make phone number available
-		signal(boys[cfa]);		// wake boy
-		wait(exchange);		// sit in chair
-	}
-	return boyPhoneNo;
-}
-int boy(int phoneNo, int cfa) {
-	// same as above
-	// with boy/girl interchanged
-}
-\end{cfa}&\begin{cfa}[tabsize=3]
-monitor DatingService {
-
-	enum{ CCodes = 20 }; 	// compatibility codes
-
-	int girlPhoneNo;
-	int boyPhoneNo;
-};
-
-condition girls[CCodes];
-condition boys [CCodes];
-// exchange is not needed
-
-int girl(int phoneNo, int cfa) {
-	// no compatible boy ?
-	if(empty(boys[cfa])) {
-		wait(girls[cfa]);		// wait for boy
-		girlPhoneNo = phoneNo;		// make phone number available
-		signal(exchange);		// wake boy from chair
-	} else {
-		girlPhoneNo = phoneNo;		// make phone number available
-		signal_block(boys[cfa]); 		// wake boy
-
-		// second handshake unnecessary
-
-	}
-	return boyPhoneNo;
-}
-
-int boy(int phoneNo, int cfa) {
-	// same as above
-	// with boy/girl interchanged
-}
-\end{cfa}
-\end{tabular}
-\caption{Dating service example using \protect\lstinline|signal| and \protect\lstinline|signal_block|. }
-\label{tbl:datingservice}
-\end{table}
-An important note is that, until now, signalling a monitor was a delayed operation.
-The ownership of the monitor is transferred only when the monitor would have otherwise been released, not at the point of the @signal@ statement.
-However, in some cases, it may be more convenient for users to immediately transfer ownership to the thread that is waiting for cooperation, which is achieved using the @signal_block@ routine.
-
-The example in table \ref{tbl:datingservice} highlights the difference in behaviour.
-As mentioned, @signal@ only transfers ownership once the current critical section exits; this behaviour requires additional synchronization when a two-way handshake is needed.
-To avoid this explicit synchronization, the @condition@ type offers the @signal_block@ routine, which handles the two-way handshake as shown in the example.
-This feature removes the need for a second condition variables and simplifies programming.
-Like every other monitor semantic, @signal_block@ uses barging prevention, which means mutual-exclusion is baton-passed both on the front end and the back end of the call to @signal_block@, meaning no other thread can acquire the monitor either before or after the call.
-
-% ======================================================================
-% ======================================================================
+\end{comment}
+
+
+\begin{comment}
 \section{External scheduling} \label{extsched}
-% ======================================================================
-% ======================================================================
-An alternative to internal scheduling is external scheduling (see Table~\ref{tbl:sched}).
+
 \begin{table}
 \begin{tabular}{|c|c|c|}
@@ -2050,84 +1920,58 @@
 \label{tbl:sched}
 \end{table}
-This method is more constrained and explicit, which helps users reduce the non-deterministic nature of concurrency.
-Indeed, as the following examples demonstrate, external scheduling allows users to wait for events from other threads without the concern of unrelated events occurring.
-External scheduling can generally be done either in terms of control flow (\eg Ada with @accept@, \uC with @_Accept@) or in terms of data (\eg Go with channels).
-Of course, both of these paradigms have their own strengths and weaknesses, but for this project, control-flow semantics was chosen to stay consistent with the rest of the languages semantics.
-Two challenges specific to \CFA arise when trying to add external scheduling with loose object definitions and multiple-monitor routines.
-The previous example shows a simple use @_Accept@ versus @wait@/@signal@ and its advantages.
-Note that while other languages often use @accept@/@select@ as the core external scheduling keyword, \CFA uses @waitfor@ to prevent name collisions with existing socket \textbf{api}s.
 
 For the @P@ member above using internal scheduling, the call to @wait@ only guarantees that @V@ is the last routine to access the monitor, allowing a third routine, say @isInUse()@, acquire mutual exclusion several times while routine @P@ is waiting.
 On the other hand, external scheduling guarantees that while routine @P@ is waiting, no other routine than @V@ can acquire the monitor.
-
-% ======================================================================
-% ======================================================================
+\end{comment}
+
+
 \subsection{Loose Object Definitions}
-% ======================================================================
-% ======================================================================
-In \uC, a monitor class declaration includes an exhaustive list of monitor operations.
-Since \CFA is not object oriented, monitors become both more difficult to implement and less clear for a user:
-
-\begin{cfa}
-monitor A {};
-
-void f(A & mutex a);
-void g(A & mutex a) {
-	waitfor(f); // Obvious which f() to wait for
-}
-
-void f(A & mutex a, int); // New different F added in scope
-void h(A & mutex a) {
-	waitfor(f); // Less obvious which f() to wait for
-}
-\end{cfa}
-
-Furthermore, external scheduling is an example where implementation constraints become visible from the interface.
-Here is the cfa-code for the entering phase of a monitor:
-\begin{center}
-\begin{tabular}{l}
-\begin{cfa}
-	if monitor is free
-		enter
-	elif already own the monitor
-		continue
-	elif monitor accepts me
-		enter
-	else
-		block
-\end{cfa}
-\end{tabular}
-\end{center}
+\label{s:LooseObjectDefinitions}
+
+In an object-oriented programming-language, a class includes an exhaustive list of operations.
+However, new members can be added via static inheritance or dynaic members, \eg JavaScript~\cite{JavaScript}.
+Similarly, monitor routines can be added at any time in \CFA, making it less clear for programmers and more difficult to implement.
+\begin{cfa}
+monitor M {};
+void `f`( M & mutex m );
+void g( M & mutex m ) { waitfor( `f` ); }	$\C{// clear which f}$
+void `f`( M & mutex m, int );				$\C{// different f}$
+void h( M & mutex m ) { waitfor( `f` ); }	$\C{// unclear which f}$
+\end{cfa}
+Hence, the cfa-code for the entering a monitor looks like:
+\begin{cfa}
+if ( $\textrm{\textit{monitor is free}}$ ) $\LstCommentStyle{// \color{red}enter}$
+else if ( $\textrm{\textit{already own monitor}}$ ) $\LstCommentStyle{// \color{red}continue}$
+else if ( $\textrm{\textit{monitor accepts me}}$ ) $\LstCommentStyle{// \color{red}enter}$
+else $\LstCommentStyle{// \color{red}block}$
+\end{cfa}
 For the first two conditions, it is easy to implement a check that can evaluate the condition in a few instructions.
-However, a fast check for @monitor accepts me@ is much harder to implement depending on the constraints put on the monitors.
-Indeed, monitors are often expressed as an entry queue and some acceptor queue as in Figure~\ref{fig:ClassicalMonitor}.
+However, a fast check for \emph{monitor accepts me} is much harder to implement depending on the constraints put on the monitors.
+Figure~\ref{fig:ClassicalMonitor} shows monitors are often expressed as an entry (calling) queue, some acceptor queues, and an urgent stack/queue.
 
 \begin{figure}
 \centering
-\subfloat[Classical Monitor] {
+\subfloat[Classical monitor] {
 \label{fig:ClassicalMonitor}
-{\resizebox{0.45\textwidth}{!}{\input{monitor}}}
+{\resizebox{0.45\textwidth}{!}{\input{monitor.pstex_t}}}
 }% subfloat
-\qquad
-\subfloat[\textbf{bulk-acq} Monitor] {
+\quad
+\subfloat[Bulk acquire monitor] {
 \label{fig:BulkMonitor}
-{\resizebox{0.45\textwidth}{!}{\input{ext_monitor}}}
+{\resizebox{0.45\textwidth}{!}{\input{ext_monitor.pstex_t}}}
 }% subfloat
-\caption{External Scheduling Monitor}
+\caption{Monitor Implementation}
+\label{f:MonitorImplementation}
 \end{figure}
 
-There are other alternatives to these pictures, but in the case of the left picture, implementing a fast accept check is relatively easy.
-Restricted to a fixed number of mutex members, N, the accept check reduces to updating a bitmask when the acceptor queue changes, a check that executes in a single instruction even with a fairly large number (\eg 128) of mutex members.
-This approach requires a unique dense ordering of routines with an upper-bound and that ordering must be consistent across translation units.
-For OO languages these constraints are common, since objects only offer adding member routines consistently across translation units via inheritance.
-However, in \CFA users can extend objects with mutex routines that are only visible in certain translation unit.
-This means that establishing a program-wide dense-ordering among mutex routines can only be done in the program linking phase, and still could have issues when using dynamically shared objects.
-
-The alternative is to alter the implementation as in Figure~\ref{fig:BulkMonitor}.
-Here, the mutex routine called is associated with a thread on the entry queue while a list of acceptable routines is kept separate.
-Generating a mask dynamically means that the storage for the mask information can vary between calls to @waitfor@, allowing for more flexibility and extensions.
-Storing an array of accepted function pointers replaces the single instruction bitmask comparison with dereferencing a pointer followed by a linear search.
-Furthermore, supporting nested external scheduling (\eg listing \ref{f:nest-ext}) may now require additional searches for the @waitfor@ statement to check if a routine is already queued.
-
+For a fixed (small) number of mutex routines (\eg 128), the accept check reduces to a bitmask of allowed callers, which can be checked with a single instruction.
+This approach requires a unique dense ordering of routines with a small upper-bound and the ordering must be consistent across translation units.
+For object-oriented languages these constraints are common, but \CFA mutex routines can be added in any scope and are only visible in certain translation unit, precluding program-wide dense-ordering among mutex routines.
+
+Figure~\ref{fig:BulkMonitor} shows the \CFA monitor implementation.
+The mutex routine called is associated with each thread on the entry queue, while a list of acceptable routines is kept separately.
+The accepted list is a variable-sized array of accepted routine pointers, so the single instruction bitmask comparison is replaced by dereferencing a pointer followed by a linear search.
+
+\begin{comment}
 \begin{figure}
 \begin{cfa}[caption={Example of nested external scheduling},label={f:nest-ext}]
@@ -2145,5 +1989,5 @@
 \end{figure}
 
-Note that in the right picture, tasks need to always keep track of the monitors associated with mutex routines, and the routine mask needs to have both a function pointer and a set of monitors, as is discussed in the next section.
+Note that in the right picture, tasks need to always keep track of the monitors associated with mutex routines, and the routine mask needs to have both a routine pointer and a set of monitors, as is discussed in the next section.
 These details are omitted from the picture for the sake of simplicity.
 
@@ -2153,72 +1997,48 @@
 In the end, the most flexible approach has been chosen since it allows users to write programs that would otherwise be  hard to write.
 This decision is based on the assumption that writing fast but inflexible locks is closer to a solved problem than writing locks that are as flexible as external scheduling in \CFA.
-
-% ======================================================================
-% ======================================================================
+\end{comment}
+
+
 \subsection{Multi-Monitor Scheduling}
-% ======================================================================
-% ======================================================================
+\label{s:Multi-MonitorScheduling}
 
 External scheduling, like internal scheduling, becomes significantly more complex when introducing multi-monitor syntax.
-Even in the simplest possible case, some new semantics needs to be established:
+Even in the simplest possible case, new semantics needs to be established:
 \begin{cfa}
 monitor M {};
-
-void f(M & mutex a);
-
-void g(M & mutex b, M & mutex c) {
-	waitfor(f); // two monitors M => unknown which to pass to f(M & mutex)
-}
-\end{cfa}
-The obvious solution is to specify the correct monitor as follows:
-
+void f( M & mutex m1 );
+void g( M & mutex m1, M & mutex m2 ) {
+	waitfor( f ); 							$\C{// pass m1 or m2 to f?}$
+}
+\end{cfa}
+The solution is for the programmer to disambiguate:
+\begin{cfa}
+	waitfor( f, m2 );						$\C{// wait for call to f with argument m2}$
+\end{cfa}
+Routine @g@ has acquired both locks, so when routine @f@ is called, the lock for monitor @m2@ is passed from @g@ to @f@ (while @g@ still holds lock @m1@).
+This behaviour can be extended to the multi-monitor @waitfor@ statement.
 \begin{cfa}
 monitor M {};
-
-void f(M & mutex a);
-
-void g(M & mutex a, M & mutex b) {
-	// wait for call to f with argument b
-	waitfor(f, b);
-}
-\end{cfa}
-This syntax is unambiguous.
-Both locks are acquired and kept by @g@.
-When routine @f@ is called, the lock for monitor @b@ is temporarily transferred from @g@ to @f@ (while @g@ still holds lock @a@).
-This behaviour can be extended to the multi-monitor @waitfor@ statement as follows.
-
-\begin{cfa}
-monitor M {};
-
-void f(M & mutex a, M & mutex b);
-
-void g(M & mutex a, M & mutex b) {
-	// wait for call to f with arguments a and b
-	waitfor(f, a, b);
-}
-\end{cfa}
-
-Note that the set of monitors passed to the @waitfor@ statement must be entirely contained in the set of monitors already acquired in the routine. @waitfor@ used in any other context is undefined behaviour.
+void f( M & mutex m1, M & mutex m2 );
+void g( M & mutex m1, M & mutex m2 ) {
+	waitfor( f, m1, m2 );					$\C{// wait for call to f with arguments m1 and m2}$
+}
+\end{cfa}
+Again, the set of monitors passed to the @waitfor@ statement must be entirely contained in the set of monitors already acquired by accepting routine.
 
 An important behaviour to note is when a set of monitors only match partially:
-
 \begin{cfa}
 mutex struct A {};
-
 mutex struct B {};
-
-void g(A & mutex a, B & mutex b) {
-	waitfor(f, a, b);
-}
-
+void g( A & mutex m1, B & mutex m2 ) {
+	waitfor( f, m1, m2 );
+}
 A a1, a2;
 B b;
-
 void foo() {
-	g(a1, b); // block on accept
-}
-
+	g( a1, b ); // block on accept
+}
 void bar() {
-	f(a2, b); // fulfill cooperation
+	f( a2, b ); // fulfill cooperation
 }
 \end{cfa}
@@ -2227,15 +2047,12 @@
 It is also important to note that in the case of external scheduling the order of parameters is irrelevant; @waitfor(f,a,b)@ and @waitfor(f,b,a)@ are indistinguishable waiting condition.
 
-% ======================================================================
-% ======================================================================
+
 \subsection{\protect\lstinline|waitfor| Semantics}
-% ======================================================================
-% ======================================================================
-
-Syntactically, the @waitfor@ statement takes a function identifier and a set of monitors.
-While the set of monitors can be any list of expressions, the function name is more restricted because the compiler validates at compile time the validity of the function type and the parameters used with the @waitfor@ statement.
-It checks that the set of monitors passed in matches the requirements for a function call.
+
+Syntactically, the @waitfor@ statement takes a routine identifier and a set of monitors.
+While the set of monitors can be any list of expressions, the routine name is more restricted because the compiler validates at compile time the validity of the routine type and the parameters used with the @waitfor@ statement.
+It checks that the set of monitors passed in matches the requirements for a routine call.
 Figure~\ref{f:waitfor} shows various usages of the waitfor statement and which are acceptable.
-The choice of the function type is made ignoring any non-@mutex@ parameter.
+The choice of the routine type is made ignoring any non-@mutex@ parameter.
 One limitation of the current implementation is that it does not handle overloading, but overloading is possible.
 \begin{figure}
@@ -2263,5 +2080,5 @@
 	waitfor(f2, a1, a2); // Incorrect : Mutex arguments don't match
 	waitfor(f1, 1);      // Incorrect : 1 not a mutex argument
-	waitfor(f9, a1);     // Incorrect : f9 function does not exist
+	waitfor(f9, a1);     // Incorrect : f9 routine does not exist
 	waitfor(*fp, a1 );   // Incorrect : fp not an identifier
 	waitfor(f4, a1);     // Incorrect : f4 ambiguous
@@ -2273,7 +2090,7 @@
 
 Finally, for added flexibility, \CFA supports constructing a complex @waitfor@ statement using the @or@, @timeout@ and @else@.
-Indeed, multiple @waitfor@ clauses can be chained together using @or@; this chain forms a single statement that uses baton pass to any function that fits one of the function+monitor set passed in.
-To enable users to tell which accepted function executed, @waitfor@s are followed by a statement (including the null statement @;@) or a compound statement, which is executed after the clause is triggered.
-A @waitfor@ chain can also be followed by a @timeout@, to signify an upper bound on the wait, or an @else@, to signify that the call should be non-blocking, which checks for a matching function call already arrived and otherwise continues.
+Indeed, multiple @waitfor@ clauses can be chained together using @or@; this chain forms a single statement that uses baton pass to any routine that fits one of the routine+monitor set passed in.
+To enable users to tell which accepted routine executed, @waitfor@s are followed by a statement (including the null statement @;@) or a compound statement, which is executed after the clause is triggered.
+A @waitfor@ chain can also be followed by a @timeout@, to signify an upper bound on the wait, or an @else@, to signify that the call should be non-blocking, which checks for a matching routine call already arrived and otherwise continues.
 Any and all of these clauses can be preceded by a @when@ condition to dynamically toggle the accept clauses on or off based on some current state.
 Figure~\ref{f:waitfor2} demonstrates several complex masks and some incorrect ones.
@@ -2330,9 +2147,7 @@
 \end{figure}
 
-% ======================================================================
-% ======================================================================
+
 \subsection{Waiting For The Destructor}
-% ======================================================================
-% ======================================================================
+
 An interesting use for the @waitfor@ statement is destructor semantics.
 Indeed, the @waitfor@ statement can accept any @mutex@ routine, which includes the destructor (see section \ref{data}).
@@ -2361,12 +2176,6 @@
 
 
-% ######     #    ######     #    #       #       ####### #       ###  #####  #     #
-% #     #   # #   #     #   # #   #       #       #       #        #  #     # ##   ##
-% #     #  #   #  #     #  #   #  #       #       #       #        #  #       # # # #
-% ######  #     # ######  #     # #       #       #####   #        #   #####  #  #  #
-% #       ####### #   #   ####### #       #       #       #        #        # #     #
-% #       #     # #    #  #     # #       #       #       #        #  #     # #     #
-% #       #     # #     # #     # ####### ####### ####### ####### ###  #####  #     #
 \section{Parallelism}
+
 Historically, computer performance was about processor speeds and instruction counts.
 However, with heat dissipation being a direct consequence of speed increase, parallelism has become the new source for increased performance~\cite{Sutter05, Sutter05b}.
@@ -2378,6 +2187,10 @@
 While there are many variations of the presented paradigms, most of these variations do not actually change the guarantees or the semantics, they simply move costs in order to achieve better performance for certain workloads.
 
+
 \section{Paradigms}
+
+
 \subsection{User-Level Threads}
+
 A direct improvement on the \textbf{kthread} approach is to use \textbf{uthread}.
 These threads offer most of the same features that the operating system already provides but can be used on a much larger scale.
@@ -2388,5 +2201,7 @@
 Examples of languages that support \textbf{uthread} are Erlang~\cite{Erlang} and \uC~\cite{uC++book}.
 
+
 \subsection{Fibers : User-Level Threads Without Preemption} \label{fibers}
+
 A popular variant of \textbf{uthread} is what is often referred to as \textbf{fiber}.
 However, \textbf{fiber} do not present meaningful semantic differences with \textbf{uthread}.
@@ -2397,5 +2212,7 @@
 An example of a language that uses fibers is Go~\cite{Go}
 
+
 \subsection{Jobs and Thread Pools}
+
 An approach on the opposite end of the spectrum is to base parallelism on \textbf{pool}.
 Indeed, \textbf{pool} offer limited flexibility but at the benefit of a simpler user interface.
@@ -2408,5 +2225,7 @@
 The gold standard of this implementation is Intel's TBB library~\cite{TBB}.
 
+
 \subsection{Paradigm Performance}
+
 While the choice between the three paradigms listed above may have significant performance implications, it is difficult to pin down the performance implications of choosing a model at the language level.
 Indeed, in many situations one of these paradigms may show better performance but it all strongly depends on the workload.
@@ -2416,5 +2235,7 @@
 Finally, if the units of uninterrupted work are large, enough the paradigm choice is largely amortized by the actual work done.
 
+
 \section{The \protect\CFA\ Kernel : Processors, Clusters and Threads}\label{kernel}
+
 A \textbf{cfacluster} is a group of \textbf{kthread} executed in isolation. \textbf{uthread} are scheduled on the \textbf{kthread} of a given \textbf{cfacluster}, allowing organization between \textbf{uthread} and \textbf{kthread}.
 It is important that \textbf{kthread} belonging to a same \textbf{cfacluster} have homogeneous settings, otherwise migrating a \textbf{uthread} from one \textbf{kthread} to the other can cause issues.
@@ -2424,5 +2245,7 @@
 Currently \CFA only supports one \textbf{cfacluster}, the initial one.
 
+
 \subsection{Future Work: Machine Setup}\label{machine}
+
 While this was not done in the context of this paper, another important aspect of clusters is affinity.
 While many common desktop and laptop PCs have homogeneous CPUs, other devices often have more heterogeneous setups.
@@ -2430,5 +2253,7 @@
 OS support for CPU affinity is now common~\cite{affinityLinux, affinityWindows, affinityFreebsd, affinityNetbsd, affinityMacosx}, which means it is both possible and desirable for \CFA to offer an abstraction mechanism for portable CPU affinity.
 
+
 \subsection{Paradigms}\label{cfaparadigms}
+
 Given these building blocks, it is possible to reproduce all three of the popular paradigms.
 Indeed, \textbf{uthread} is the default paradigm in \CFA.
@@ -2438,8 +2263,8 @@
 
 
-
 \section{Behind the Scenes}
+
 There are several challenges specific to \CFA when implementing concurrency.
-These challenges are a direct result of \textbf{bulk-acq} and loose object definitions.
+These challenges are a direct result of bulk acquire and loose object definitions.
 These two constraints are the root cause of most design decisions in the implementation.
 Furthermore, to avoid contention from dynamically allocating memory in a concurrent environment, the internal-scheduling design is (almost) entirely free of mallocs.
@@ -2449,16 +2274,13 @@
 The main memory concern for concurrency is queues.
 All blocking operations are made by parking threads onto queues and all queues are designed with intrusive nodes, where each node has pre-allocated link fields for chaining, to avoid the need for memory allocation.
-Since several concurrency operations can use an unbound amount of memory (depending on \textbf{bulk-acq}), statically defining information in the intrusive fields of threads is insufficient.The only way to use a variable amount of memory without requiring memory allocation is to pre-allocate large buffers of memory eagerly and store the information in these buffers.
+Since several concurrency operations can use an unbound amount of memory (depending on bulk acquire), statically defining information in the intrusive fields of threads is insufficient.The only way to use a variable amount of memory without requiring memory allocation is to pre-allocate large buffers of memory eagerly and store the information in these buffers.
 Conveniently, the call stack fits that description and is easy to use, which is why it is used heavily in the implementation of internal scheduling, particularly variable-length arrays.
 Since stack allocation is based on scopes, the first step of the implementation is to identify the scopes that are available to store the information, and which of these can have a variable-length array.
 The threads and the condition both have a fixed amount of memory, while @mutex@ routines and blocking calls allow for an unbound amount, within the stack size.
 
-Note that since the major contributions of this paper are extending monitor semantics to \textbf{bulk-acq} and loose object definitions, any challenges that are not resulting of these characteristics of \CFA are considered as solved problems and therefore not discussed.
-
-% ======================================================================
-% ======================================================================
+Note that since the major contributions of this paper are extending monitor semantics to bulk acquire and loose object definitions, any challenges that are not resulting of these characteristics of \CFA are considered as solved problems and therefore not discussed.
+
+
 \section{Mutex Routines}
-% ======================================================================
-% ======================================================================
 
 The first step towards the monitor implementation is simple @mutex@ routines.
@@ -2495,5 +2317,7 @@
 \end{figure}
 
+
 \subsection{Details: Interaction with polymorphism}
+
 Depending on the choice of semantics for when monitor locks are acquired, interaction between monitors and \CFA's concept of polymorphism can be more complex to support.
 However, it is shown that entry-point locking solves most of the issues.
@@ -2564,5 +2388,5 @@
 void foo(T * mutex t);
 
-// Correct: this function only works on monitors (any monitor)
+// Correct: this routine only works on monitors (any monitor)
 forall(dtype T | is_monitor(T))
 void bar(T * mutex t));
@@ -2571,13 +2395,10 @@
 Both entry point and \textbf{callsite-locking} are feasible implementations.
 The current \CFA implementation uses entry-point locking because it requires less work when using \textbf{raii}, effectively transferring the burden of implementation to object construction/destruction.
-It is harder to use \textbf{raii} for call-site locking, as it does not necessarily have an existing scope that matches exactly the scope of the mutual exclusion, \ie the function body.
+It is harder to use \textbf{raii} for call-site locking, as it does not necessarily have an existing scope that matches exactly the scope of the mutual exclusion, \ie the routine body.
 For example, the monitor call can appear in the middle of an expression.
 Furthermore, entry-point locking requires less code generation since any useful routine is called multiple times but there is only one entry point for many call sites.
 
-% ======================================================================
-% ======================================================================
+
 \section{Threading} \label{impl:thread}
-% ======================================================================
-% ======================================================================
 
 Figure \ref{fig:system1} shows a high-level picture if the \CFA runtime system in regards to concurrency.
@@ -2592,5 +2413,7 @@
 \end{figure}
 
+
 \subsection{Processors}
+
 Parallelism in \CFA is built around using processors to specify how much parallelism is desired. \CFA processors are object wrappers around kernel threads, specifically @pthread@s in the current implementation of \CFA.
 Indeed, any parallelism must go through operating-system libraries.
@@ -2600,5 +2423,7 @@
 Processors internally use coroutines to take advantage of the existing context-switching semantics.
 
+
 \subsection{Stack Management}
+
 One of the challenges of this system is to reduce the footprint as much as possible.
 Specifically, all @pthread@s created also have a stack created with them, which should be used as much as possible.
@@ -2607,9 +2432,11 @@
 In order to respect C user expectations, the stack of the initial kernel thread, the main stack of the program, is used by the main user thread rather than the main processor, which can grow very large.
 
+
 \subsection{Context Switching}
+
 As mentioned in section \ref{coroutine}, coroutines are a stepping stone for implementing threading, because they share the same mechanism for context-switching between different stacks.
-To improve performance and simplicity, context-switching is implemented using the following assumption: all context-switches happen inside a specific function call.
+To improve performance and simplicity, context-switching is implemented using the following assumption: all context-switches happen inside a specific routine call.
 This assumption means that the context-switch only has to copy the callee-saved registers onto the stack and then switch the stack registers with the ones of the target coroutine/thread.
-Note that the instruction pointer can be left untouched since the context-switch is always inside the same function.
+Note that the instruction pointer can be left untouched since the context-switch is always inside the same routine
 Threads, however, do not context-switch between each other directly.
 They context-switch to the scheduler.
@@ -2621,5 +2448,7 @@
 This option is not currently present in \CFA, but the changes required to add it are strictly additive.
 
+
 \subsection{Preemption} \label{preemption}
+
 Finally, an important aspect for any complete threading system is preemption.
 As mentioned in section \ref{basics}, preemption introduces an extra degree of uncertainty, which enables users to have multiple threads interleave transparently, rather than having to cooperate among threads for proper scheduling and CPU distribution.
@@ -2648,5 +2477,5 @@
 As a result, a signal handler can start on one kernel thread and terminate on a second kernel thread (but the same user thread).
 It is important to note that signal handlers save and restore signal masks because user-thread migration can cause a signal mask to migrate from one kernel thread to another.
-This behaviour is only a problem if all kernel threads, among which a user thread can migrate, differ in terms of signal masks\footnote{Sadly, official POSIX documentation is silent on what distinguishes ``async-signal-safe'' functions from other functions.}.
+This behaviour is only a problem if all kernel threads, among which a user thread can migrate, differ in terms of signal masks\footnote{Sadly, official POSIX documentation is silent on what distinguishes ``async-signal-safe'' routines from other routines}.
 However, since the kernel thread handling preemption requires a different signal mask, executing user threads on the kernel-alarm thread can cause deadlocks.
 For this reason, the alarm thread is in a tight loop around a system call to @sigwaitinfo@, requiring very little CPU time for preemption.
@@ -2655,4 +2484,5 @@
 Indeed, @sigwait@ can differentiate signals sent from @pthread_sigqueue@ from signals sent from alarms or the kernel.
 
+
 \subsection{Scheduler}
 Finally, an aspect that was not mentioned yet is the scheduling algorithm.
@@ -2660,14 +2490,12 @@
 Further discussion on scheduling is present in section \ref{futur:sched}.
 
-% ======================================================================
-% ======================================================================
+
 \section{Internal Scheduling} \label{impl:intsched}
-% ======================================================================
-% ======================================================================
+
 The following figure is the traditional illustration of a monitor (repeated from page~\pageref{fig:ClassicalMonitor} for convenience):
 
 \begin{figure}
 \begin{center}
-{\resizebox{0.4\textwidth}{!}{\input{monitor}}}
+{\resizebox{0.4\textwidth}{!}{\input{monitor.pstex_t}}}
 \end{center}
 \caption{Traditional illustration of a monitor}
@@ -2678,5 +2506,5 @@
 
 For \CFA, this picture does not have support for blocking multiple monitors on a single condition.
-To support \textbf{bulk-acq} two changes to this picture are required.
+To support bulk acquire two changes to this picture are required.
 First, it is no longer helpful to attach the condition to \emph{a single} monitor.
 Secondly, the thread waiting on the condition has to be separated across multiple monitors, seen in figure \ref{fig:monitor_cfa}.
@@ -2727,5 +2555,5 @@
 \end{figure}
 
-The solution discussed in \ref{intsched} can be seen in the exit routine of listing \ref{f:entry2}.
+The solution discussed in \ref{s:InternalScheduling} can be seen in the exit routine of listing \ref{f:entry2}.
 Basically, the solution boils down to having a separate data structure for the condition queue and the AS-stack, and unconditionally transferring ownership of the monitors but only unblocking the thread when the last monitor has transferred ownership.
 This solution is deadlock safe as well as preventing any potential barging.
@@ -2963,5 +2791,5 @@
 }
 \end{cfa}
-This function is called by the kernel to fetch the default preemption rate, where 0 signifies an infinite time-slice, \ie no preemption.
+This routine is called by the kernel to fetch the default preemption rate, where 0 signifies an infinite time-slice, \ie no preemption.
 However, once clusters are fully implemented, it will be possible to create fibers and \textbf{uthread} in the same system, as in listing \ref{f:fiber-uthread}
 \begin{figure}
@@ -3148,5 +2976,5 @@
 For monitors, the simplest approach is to measure how long it takes to enter and leave a monitor routine.
 Figure~\ref{f:mutex} shows the code for \CFA.
-To put the results in context, the cost of entering a non-inline function and the cost of acquiring and releasing a @pthread_mutex@ lock is also measured.
+To put the results in context, the cost of entering a non-inline routine and the cost of acquiring and releasing a @pthread_mutex@ lock is also measured.
 The results can be shown in table \ref{tab:mutex}.
 
@@ -3399,5 +3227,5 @@
 Therefore, there is still significant work to improve performance.
 Many of the data structures and algorithms may change in the future to more efficient versions.
-For example, the number of monitors in a single \textbf{bulk-acq} is only bound by the stack size, this is probably unnecessarily generous.
+For example, the number of monitors in a single bulk acquire is only bound by the stack size, this is probably unnecessarily generous.
 It may be possible that limiting the number helps increase performance.
 However, it is not obvious that the benefit would be significant.
Index: doc/papers/concurrency/figures/ext_monitor.fig
===================================================================
--- doc/papers/concurrency/figures/ext_monitor.fig	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/papers/concurrency/figures/ext_monitor.fig	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -8,89 +8,89 @@
 -2
 1200 2
-5 1 0 1 -1 -1 0 0 -1 0.000 0 1 0 0 3150.000 3450.000 3150 3150 2850 3450 3150 3750
-5 1 0 1 -1 -1 0 0 -1 0.000 0 1 0 0 3150.000 4350.000 3150 4050 2850 4350 3150 4650
-6 5850 1950 6150 2250
-1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 6000 2100 105 105 6000 2100 6105 2205
-4 1 -1 0 0 0 10 0.0000 2 105 90 6000 2160 d\001
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 0 0 1575.000 3450.000 1575 3150 1275 3450 1575 3750
+5 1 0 1 -1 -1 0 0 -1 0.000 0 1 0 0 1575.000 4350.000 1575 4050 1275 4350 1575 4650
+6 4275 1950 4575 2250
+1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 4425 2100 105 105 4425 2100 4530 2205
+4 1 -1 0 0 0 10 0.0000 2 105 90 4425 2160 d\001
 -6
-6 5100 2100 5400 2400
-1 3 0 1 -1 -1 1 0 4 0.000 1 0.0000 5250 2250 105 105 5250 2250 5355 2250
-4 1 -1 0 0 0 10 0.0000 2 105 120 5250 2295 X\001
+6 4275 1650 4575 1950
+1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 4425 1800 105 105 4425 1800 4530 1905
+4 1 -1 0 0 0 10 0.0000 2 105 90 4425 1860 b\001
 -6
-6 5100 1800 5400 2100
-1 3 0 1 -1 -1 1 0 4 0.000 1 0.0000 5250 1950 105 105 5250 1950 5355 1950
-4 1 -1 0 0 0 10 0.0000 2 105 120 5250 2010 Y\001
+6 1495 5445 5700 5655
+1 3 0 1 -1 -1 0 0 20 0.000 1 0.0000 1575 5550 80 80 1575 5550 1655 5630
+1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2925 5550 105 105 2925 5550 3030 5655
+1 3 0 1 -1 -1 0 0 4 0.000 1 0.0000 4425 5550 105 105 4425 5550 4530 5655
+4 0 -1 0 0 0 12 0.0000 2 135 1035 3150 5625 blocked task\001
+4 0 -1 0 0 0 12 0.0000 2 135 870 1725 5625 active task\001
+4 0 -1 0 0 0 12 0.0000 2 135 1050 4650 5625 routine mask\001
 -6
-6 5850 1650 6150 1950
-1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 6000 1800 105 105 6000 1800 6105 1905
-4 1 -1 0 0 0 10 0.0000 2 105 90 6000 1860 b\001
+6 3525 1800 3825 2400
+1 3 0 1 -1 -1 1 0 4 0.000 1 0.0000 3675 1950 105 105 3675 1950 3780 1950
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3525 1800 3825 1800 3825 2400 3525 2400 3525 1800
+4 1 4 0 0 0 10 0.0000 2 105 120 3675 2010 Y\001
 -6
-6 3070 5445 7275 5655
-1 3 0 1 -1 -1 0 0 20 0.000 1 0.0000 3150 5550 80 80 3150 5550 3230 5630
-1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 4500 5550 105 105 4500 5550 4605 5655
-1 3 0 1 -1 -1 0 0 4 0.000 1 0.0000 6000 5550 105 105 6000 5550 6105 5655
-4 0 -1 0 0 0 12 0.0000 2 135 1035 4725 5625 blocked task\001
-4 0 -1 0 0 0 12 0.0000 2 135 870 3300 5625 active task\001
-4 0 -1 0 0 0 12 0.0000 2 135 1050 6225 5625 routine mask\001
+6 3525 2100 3825 2400
+1 3 0 1 -1 -1 1 0 4 0.000 1 0.0000 3675 2250 105 105 3675 2250 3780 2250
+4 1 4 0 0 0 10 0.0000 2 105 120 3675 2295 X\001
 -6
-1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3300 3600 105 105 3300 3600 3405 3705
-1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 3600 3600 105 105 3600 3600 3705 3705
-1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 6600 3900 105 105 6600 3900 6705 4005
-1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 6900 3900 105 105 6900 3900 7005 4005
-1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 6000 2700 105 105 6000 2700 6105 2805
-1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 6000 2400 105 105 6000 2400 6105 2505
-1 3 0 1 -1 -1 0 0 20 0.000 1 0.0000 5100 4575 80 80 5100 4575 5180 4655
+1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 1725 3600 105 105 1725 3600 1830 3705
+1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 2025 3600 105 105 2025 3600 2130 3705
+1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 5025 3900 105 105 5025 3900 5130 4005
+1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 5325 3900 105 105 5325 3900 5430 4005
+1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 4425 2700 105 105 4425 2700 4530 2805
+1 3 0 1 -1 -1 0 0 -1 0.000 1 0.0000 4425 2400 105 105 4425 2400 4530 2505
+1 3 0 1 -1 -1 0 0 20 0.000 1 0.0000 3525 4575 80 80 3525 4575 3605 4655
 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
-	 4050 2925 5475 2925 5475 3225 4050 3225 4050 2925
+	 2475 2925 3900 2925 3900 3225 2475 3225 2475 2925
 2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 4
-	 3150 3750 3750 3750 3750 4050 3150 4050
+	 1575 3750 2175 3750 2175 4050 1575 4050
 2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 3
-	 3150 3450 3750 3450 3900 3675
+	 1575 3450 2175 3450 2325 3675
 2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 2
-	 3750 3150 3600 3375
+	 2175 3150 2025 3375
 2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 3
-	 3150 4350 3750 4350 3900 4575
+	 1575 4350 2175 4350 2325 4575
 2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 2
-	 3750 4050 3600 4275
+	 2175 4050 2025 4275
 2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 4
-	 3150 4650 3750 4650 3750 4950 4950 4950
+	 1575 4650 2175 4650 2175 4950 3375 4950
 2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 2
-	 6450 3750 6300 3975
+	 4875 3750 4725 3975
 2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 2
-	 4950 4950 5175 5100
+	 3375 4950 3600 5100
 2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 9
-	 5250 4950 6450 4950 6450 4050 7050 4050 7050 3750 6450 3750
-	 6450 2850 6150 2850 6150 1650
+	 3675 4950 4875 4950 4875 4050 5475 4050 5475 3750 4875 3750
+	 4875 2850 4575 2850 4575 1650
 2 2 1 1 -1 -1 0 0 -1 4.000 0 0 0 0 0 5
-	 5850 4200 5850 3300 4350 3300 4350 4200 5850 4200
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2
+	 4275 4200 4275 3300 2775 3300 2775 4200 4275 4200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
 	1 1 1.00 60.00 120.00
-	7 1 1.00 60.00 120.00
-	 5250 3150 5250 2400
+	 3675 3075 3675 2400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4125 2850 4575 3000
 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
-	 3150 3150 3750 3150 3750 2850 5700 2850 5700 1650
-2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
-	 5700 2850 6150 3000
-2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
-	 5100 1800 5400 1800 5400 2400 5100 2400 5100 1800
-4 1 -1 0 0 0 10 0.0000 2 75 75 6000 2745 a\001
-4 1 -1 0 0 0 10 0.0000 2 75 75 6000 2445 c\001
-4 1 -1 0 0 0 12 0.0000 2 135 315 5100 5325 exit\001
-4 1 -1 0 0 0 12 0.0000 2 135 135 3300 3075 A\001
-4 1 -1 0 0 0 12 0.0000 2 135 795 3300 4875 condition\001
-4 1 -1 0 0 0 12 0.0000 2 135 135 3300 5100 B\001
-4 0 -1 0 0 0 12 0.0000 2 135 420 6600 3675 stack\001
-4 0 -1 0 0 0 12 0.0000 2 180 750 6600 3225 acceptor/\001
-4 0 -1 0 0 0 12 0.0000 2 180 750 6600 3450 signalled\001
-4 1 -1 0 0 0 12 0.0000 2 135 795 3300 2850 condition\001
-4 1 -1 0 0 0 12 0.0000 2 165 420 6000 1350 entry\001
-4 1 -1 0 0 0 12 0.0000 2 135 495 6000 1575 queue\001
-4 0 -1 0 0 0 12 0.0000 2 135 525 6300 2400 arrival\001
-4 0 -1 0 0 0 12 0.0000 2 135 630 6300 2175 order of\001
-4 1 -1 0 0 0 12 0.0000 2 135 525 5100 3675 shared\001
-4 1 -1 0 0 0 12 0.0000 2 135 735 5100 3975 variables\001
-4 0 0 50 -1 0 11 0.0000 2 165 855 4275 3150 Acceptables\001
-4 0 0 50 -1 0 11 0.0000 2 120 165 5775 2700 W\001
-4 0 0 50 -1 0 11 0.0000 2 120 135 5775 2400 X\001
-4 0 0 50 -1 0 11 0.0000 2 120 105 5775 2100 Z\001
-4 0 0 50 -1 0 11 0.0000 2 120 135 5775 1800 Y\001
+	 1575 3150 2175 3150 2175 2850 4125 2850 4125 1650
+4 1 -1 0 0 0 10 0.0000 2 75 75 4425 2745 a\001
+4 1 -1 0 0 0 10 0.0000 2 75 75 4425 2445 c\001
+4 1 -1 0 0 0 12 0.0000 2 135 315 3525 5325 exit\001
+4 1 -1 0 0 0 12 0.0000 2 135 135 1725 3075 A\001
+4 1 -1 0 0 0 12 0.0000 2 135 795 1725 4875 condition\001
+4 1 -1 0 0 0 12 0.0000 2 135 135 1725 5100 B\001
+4 0 -1 0 0 0 12 0.0000 2 135 420 5025 3675 stack\001
+4 0 -1 0 0 0 12 0.0000 2 180 750 5025 3225 acceptor/\001
+4 0 -1 0 0 0 12 0.0000 2 180 750 5025 3450 signalled\001
+4 1 -1 0 0 0 12 0.0000 2 135 795 1725 2850 condition\001
+4 1 -1 0 0 0 12 0.0000 2 165 420 4425 1350 entry\001
+4 1 -1 0 0 0 12 0.0000 2 135 495 4425 1575 queue\001
+4 0 -1 0 0 0 12 0.0000 2 135 525 4725 2400 arrival\001
+4 0 -1 0 0 0 12 0.0000 2 135 630 4725 2175 order of\001
+4 1 -1 0 0 0 12 0.0000 2 135 525 3525 3675 shared\001
+4 1 -1 0 0 0 12 0.0000 2 135 735 3525 3975 variables\001
+4 0 4 50 -1 0 11 0.0000 2 120 135 4150 1875 Y\001
+4 0 4 50 -1 0 11 0.0000 2 120 105 4150 2175 Z\001
+4 0 4 50 -1 0 11 0.0000 2 120 135 4150 2475 X\001
+4 0 4 50 -1 0 11 0.0000 2 120 165 4150 2775 W\001
+4 0 -1 0 0 3 12 0.0000 2 150 540 5025 4275 urgent\001
+4 1 0 50 -1 0 11 0.0000 2 165 600 3150 3150 accepted\001
Index: doc/papers/concurrency/figures/monitor.fig
===================================================================
--- doc/papers/concurrency/figures/monitor.fig	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/papers/concurrency/figures/monitor.fig	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -72,6 +72,4 @@
 2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 4
 	 3600 1500 3600 2100 4200 2100 4200 900
-2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 4
-	 2700 1500 2700 2100 3300 2100 3300 1500
 2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 9
 	 3600 4200 4800 4200 4800 3300 5400 3300 5400 3000 4800 3000
@@ -79,4 +77,6 @@
 2 2 1 1 -1 -1 0 0 -1 4.000 0 0 0 0 0 5
 	 4200 3450 4200 2550 2700 2550 2700 3450 4200 3450
+2 1 0 1 -1 -1 0 0 -1 0.000 0 0 -1 0 0 4
+	 2700 1500 2700 2100 3300 2100 3300 1500
 4 1 -1 0 0 0 10 0.0000 2 75 75 4350 1995 a\001
 4 1 -1 0 0 0 10 0.0000 2 75 75 4350 1695 c\001
@@ -89,6 +89,6 @@
 4 0 -1 0 0 0 12 0.0000 2 180 750 4950 2700 signalled\001
 4 1 -1 0 0 0 12 0.0000 2 135 795 1650 2100 condition\001
-4 1 -1 0 0 0 12 0.0000 2 135 135 2550 1425 X\001
-4 1 -1 0 0 0 12 0.0000 2 135 135 3450 1425 Y\001
+4 1 4 0 0 0 12 0.0000 2 135 135 2550 1425 X\001
+4 1 4 0 0 0 12 0.0000 2 135 135 3450 1425 Y\001
 4 1 -1 0 0 0 12 0.0000 2 165 420 4350 600 entry\001
 4 1 -1 0 0 0 12 0.0000 2 135 495 4350 825 queue\001
@@ -100,2 +100,3 @@
 4 1 -1 0 0 0 10 0.0000 2 75 75 3450 1995 c\001
 4 1 -1 0 0 0 12 0.0000 2 135 570 3000 1200 queues\001
+4 0 -1 0 0 3 12 0.0000 2 150 540 4950 3525 urgent\001
Index: doc/papers/general/Makefile
===================================================================
--- doc/papers/general/Makefile	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/papers/general/Makefile	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -59,6 +59,6 @@
 	dvips ${Build}/$< -o $@
 
-${BASE}.dvi : Makefile ${Build} ${BASE}.out.ps WileyNJD-AMA.bst ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
-		../../bibliography/pl.bib
+${BASE}.dvi : Makefile ${BASE}.out.ps WileyNJD-AMA.bst ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
+		../../bibliography/pl.bib | ${Build}
 	# Must have *.aux file containing citations for bibtex
 	if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
@@ -75,5 +75,5 @@
 	mkdir -p ${Build}
 
-${BASE}.out.ps : ${Build}
+${BASE}.out.ps : | ${Build}
 	ln -fs ${Build}/Paper.out.ps .
 
@@ -84,11 +84,11 @@
 	gnuplot -e Build="'${Build}/'" evaluation/timing.gp
 
-%.tex : %.fig ${Build}
+%.tex : %.fig | ${Build}
 	fig2dev -L eepic $< > ${Build}/$@
 
-%.ps : %.fig ${Build}
+%.ps : %.fig | ${Build}
 	fig2dev -L ps $< > ${Build}/$@
 
-%.pstex : %.fig ${Build}
+%.pstex : %.fig | ${Build}
 	fig2dev -L pstex $< > ${Build}/$@
 	fig2dev -L pstex_t -p ${Build}/$@ $< > ${Build}/$@_t
Index: doc/papers/general/Paper.tex
===================================================================
--- doc/papers/general/Paper.tex	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/papers/general/Paper.tex	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -201,5 +201,5 @@
 
 \abstract[Summary]{
-The C programming language is a foundational technology for modern computing with millions of lines of code implementing everything from commercial operating-systems to hobby projects.
+The C programming language is a foundational technology for modern computing with millions of lines of code implementing everything from hobby projects to commercial operating-systems.
 This installation base and the programmers producing it represent a massive software-engineering investment spanning decades and likely to continue for decades more.
 Nevertheless, C, first standardized almost forty years ago, lacks many features that make programming in more modern languages safer and more productive.
@@ -224,5 +224,5 @@
 \section{Introduction}
 
-The C programming language is a foundational technology for modern computing with millions of lines of code implementing everything from commercial operating-systems to hobby projects.
+The C programming language is a foundational technology for modern computing with millions of lines of code implementing everything from hobby projects to commercial operating-systems.
 This installation base and the programmers producing it represent a massive software-engineering investment spanning decades and likely to continue for decades more.
 The TIOBE~\cite{TIOBE} ranks the top 5 most \emph{popular} programming languages as: Java 15\%, \Textbf{C 12\%}, \Textbf{\CC 5.5\%}, Python 5\%, \Csharp 4.5\% = 42\%, where the next 50 languages are less than 4\% each with a long tail.
Index: doc/proposals/ctordtor/Makefile
===================================================================
--- doc/proposals/ctordtor/Makefile	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/proposals/ctordtor/Makefile	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -1,10 +1,15 @@
-## Define the appropriate configuration variables.
+## Define the configuration variables.
 
-MACROS = ../../LaTeXmacros
-BIB = ../../bibliography
+Build = build
+Figures = figures
+Macros = ../../LaTeXmacros
+Bib = ../../bibliography
 
-TeXLIB = .:$(MACROS):$(MACROS)/listings:$(MACROS)/enumitem:$(BIB)/:
-LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex -halt-on-error
+TeXLIB = .:${Macros}:${MACROS}/listings:${MACROS}/enumitem:${Bib}/:
+LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex -halt-on-error -output-directory=${Build}
 BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex
+
+MAKEFLAGS = --no-print-directory # --silent
+VPATH = ${Build} ${Figures}
 
 ## Define the text source files.
@@ -29,33 +34,36 @@
 
 DOCUMENT = ctor.pdf
+BASE = ${basename ${DOCUMENT}}
 
 # Directives #
+
+.PHONY : all clean					# not file names
 
 all : ${DOCUMENT}
 
 clean :
-	rm -f *.bbl *.aux *.dvi *.idx *.ilg *.ind *.brf *.out *.log *.toc *.blg *.pstex_t *.cf \
-		${FIGURES} ${PICTURES} ${PROGRAMS} ${GRAPHS} ${basename ${DOCUMENT}}.ps ${DOCUMENT}
+	@rm -frv ${DOCUMENT} ${BASE}.ps ${Build}
 
 # File Dependencies #
 
-${DOCUMENT} : ${basename ${DOCUMENT}}.ps
+${DOCUMENT} : ${BASE}.ps
 	ps2pdf $<
 
-${basename ${DOCUMENT}}.ps : ${basename ${DOCUMENT}}.dvi
-	dvips $< -o $@
+${BASE}.ps : ${BASE}.dvi
+	dvips ${Build}/$< -o $@
 
-${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \
-		$(MACROS)/common.tex $(MACROS)/indexstyle $(BIB)/cfa.bib
+${BASE}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
+		${Macros}/common.tex ${Macros}/indexstyle ${Bib}/pl.bib | ${Build}
 	# Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
-	if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
+	#if [ ! -r ${basename $@}.ind ] ; then touch ${Build}/${basename $@}.ind ; fi
 	# Must have *.aux file containing citations for bibtex
 	if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
-	-${BibTeX} ${basename $@}
-	# Some citations reference others so run steps again to resolve these citations
+	-${BibTeX} ${Build}/${basename $@}
+	# Some citations reference others so run again to resolve these citations
 	${LaTeX} ${basename $@}.tex
-	-${BibTeX} ${basename $@}
+	-${BibTeX} ${Build}/${basename $@}
 	# Make index from *.aux entries and input index at end of document
-	makeindex -s $(MACROS)/indexstyle ${basename $@}.idx
+	#makeindex -s ${Macros}/indexstyle ${Build}/${basename $@}.idx
+	# Run again to finish citations
 	${LaTeX} ${basename $@}.tex
 	# Run again to get index title into table of contents
@@ -67,13 +75,16 @@
 ## Define the default recipes.
 
-%.tex : %.fig
-	fig2dev -L eepic $< > $@
+${Build}:
+	mkdir -p ${Build}
 
-%.ps : %.fig
-	fig2dev -L ps $< > $@
+%.tex : %.fig | ${Build}
+	fig2dev -L eepic $< > ${Build}/$@
 
-%.pstex : %.fig
-	fig2dev -L pstex $< > $@
-	fig2dev -L pstex_t -p $@ $< > $@_t
+%.ps : %.fig | ${Build}
+	fig2dev -L ps $< > ${Build}/$@
+
+%.pstex : %.fig | ${Build}
+	fig2dev -L pstex $< > ${Build}/$@
+	fig2dev -L pstex_t -p ${Build}/$@ $< > ${Build}/$@_t
 
 # Local Variables: #
Index: doc/proposals/ctordtor/ctor.tex
===================================================================
--- doc/proposals/ctordtor/ctor.tex	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/proposals/ctordtor/ctor.tex	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -1,10 +1,2 @@
-% inline code ©...© (copyright symbol) emacs: C-q M-)
-% red highlighting ®...® (registered trademark symbol) emacs: C-q M-.
-% blue highlighting ß...ß (sharp s symbol) emacs: C-q M-_
-% green highlighting ¢...¢ (cent symbol) emacs: C-q M-"
-% LaTex escape §...§ (section symbol) emacs: C-q M-'
-% keyword escape ¶...¶ (pilcrow symbol) emacs: C-q M-^
-% math escape $...$ (dollar symbol)
-
 \documentclass[twoside,11pt]{article}
 
@@ -15,13 +7,14 @@
 \usepackage{textcomp}
 \usepackage[latin1]{inputenc}
+
 \usepackage{fullpage,times,comment}
 \usepackage{epic,eepic}
-\usepackage{upquote}									% switch curled `'" to straight
+\usepackage{upquote}					% switch curled `'" to straight
 \usepackage{calc}
 \usepackage{xspace}
 \usepackage{graphicx}
-\usepackage{varioref}									% extended references
-\usepackage{listings}									% format program code
-\usepackage[flushmargin]{footmisc}						% support label/reference in footnote
+\usepackage{varioref}					% extended references
+\usepackage{listings}					% format program code
+\usepackage[flushmargin]{footmisc}			% support label/reference in footnote
 \usepackage{latexsym}                                   % \Box glyph
 \usepackage{mathptmx}                                   % better math font with "times"
@@ -34,5 +27,5 @@
 \renewcommand{\UrlFont}{\small\sf}
 
-\setlength{\topmargin}{-0.45in}							% move running title into header
+\setlength{\topmargin}{-0.45in}				% move running title into header
 \setlength{\headsep}{0.25in}
 
@@ -43,4 +36,14 @@
 
 \interfootnotelinepenalty=10000
+
+\CFAStyle						% use default CFA format-style
+% inline code ©...© (copyright symbol) emacs: C-q M-)
+% red highlighting ®...® (registered trademark symbol) emacs: C-q M-.
+% blue highlighting ß...ß (sharp s symbol) emacs: C-q M-_
+% green highlighting ¢...¢ (cent symbol) emacs: C-q M-"
+% LaTex escape §...§ (section symbol) emacs: C-q M-'
+% keyword escape ¶...¶ (pilcrow symbol) emacs: C-q M-^
+% math escape $...$ (dollar symbol)
+
 
 \title{
@@ -83,5 +86,4 @@
 \thispagestyle{plain}
 \pagenumbering{arabic}
-
 
 
Index: doc/proposals/tuples/Makefile
===================================================================
--- doc/proposals/tuples/Makefile	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/proposals/tuples/Makefile	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -1,10 +1,15 @@
-## Define the appropriate configuration variables.
+## Define the configuration variables.
 
-MACROS = ../../LaTeXmacros
-BIB = ../../bibliography
+Build = build
+Figures = figures
+Macros = ../../LaTeXmacros
+Bib = ../../bibliography
 
-TeXLIB = .:$(MACROS):$(MACROS)/listings:$(MACROS)/enumitem:$(BIB)/:
-LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex -halt-on-error
+TeXLIB = .:${Macros}:${MACROS}/listings:${MACROS}/enumitem:${Bib}/:
+LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex -halt-on-error -output-directory=${Build}
 BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex
+
+MAKEFLAGS = --no-print-directory --silent #
+VPATH = ${Build} ${Figures}
 
 ## Define the text source files.
@@ -29,33 +34,36 @@
 
 DOCUMENT = tuples.pdf
+BASE = ${basename ${DOCUMENT}}
 
 # Directives #
+
+.PHONY : all clean					# not file names
 
 all : ${DOCUMENT}
 
 clean :
-	rm -f *.bbl *.aux *.dvi *.idx *.ilg *.ind *.brf *.out *.log *.toc *.blg *.pstex_t *.cf \
-		${FIGURES} ${PICTURES} ${PROGRAMS} ${GRAPHS} ${basename ${DOCUMENT}}.ps ${DOCUMENT}
+	@rm -frv ${DOCUMENT} ${BASE}.ps ${Build}
 
 # File Dependencies #
 
-${DOCUMENT} : ${basename ${DOCUMENT}}.ps
+${DOCUMENT} : ${BASE}.ps
 	ps2pdf $<
 
-${basename ${DOCUMENT}}.ps : ${basename ${DOCUMENT}}.dvi
-	dvips $< -o $@
+${BASE}.ps : ${BASE}.dvi
+	dvips ${Build}/$< -o $@
 
-${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \
-		$(MACROS)/common.tex $(MACROS)/indexstyle $(BIB)/cfa.bib
+${BASE}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
+		${Macros}/common.tex ${Macros}/indexstyle ${Bib}/pl.bib | ${Build}
 	# Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
-	if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
+	#if [ ! -r ${basename $@}.ind ] ; then touch ${Build}/${basename $@}.ind ; fi
 	# Must have *.aux file containing citations for bibtex
 	if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
-	-${BibTeX} ${basename $@}
-	# Some citations reference others so run steps again to resolve these citations
+	-${BibTeX} ${Build}/${basename $@}
+	# Some citations reference others so run again to resolve these citations
 	${LaTeX} ${basename $@}.tex
-	-${BibTeX} ${basename $@}
+	-${BibTeX} ${Build}/${basename $@}
 	# Make index from *.aux entries and input index at end of document
-	makeindex -s $(MACROS)/indexstyle ${basename $@}.idx
+	#makeindex -s ${Macros}/indexstyle ${Build}/${basename $@}.idx
+	# Run again to finish citations
 	${LaTeX} ${basename $@}.tex
 	# Run again to get index title into table of contents
@@ -67,13 +75,16 @@
 ## Define the default recipes.
 
-%.tex : %.fig
-	fig2dev -L eepic $< > $@
+${Build}:
+	mkdir -p ${Build}
 
-%.ps : %.fig
-	fig2dev -L ps $< > $@
+%.tex : %.fig | ${Build}
+	fig2dev -L eepic $< > ${Build}/$@
 
-%.pstex : %.fig
-	fig2dev -L pstex $< > $@
-	fig2dev -L pstex_t -p $@ $< > $@_t
+%.ps : %.fig | ${Build}
+	fig2dev -L ps $< > ${Build}/$@
+
+%.pstex : %.fig | ${Build}
+	fig2dev -L pstex $< > ${Build}/$@
+	fig2dev -L pstex_t -p ${Build}/$@ $< > ${Build}/$@_t
 
 # Local Variables: #
Index: doc/proposals/tuples/tuples.tex
===================================================================
--- doc/proposals/tuples/tuples.tex	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/proposals/tuples/tuples.tex	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -1,10 +1,2 @@
-% inline code ©...© (copyright symbol) emacs: C-q M-)
-% red highlighting ®...® (registered trademark symbol) emacs: C-q M-.
-% blue highlighting ß...ß (sharp s symbol) emacs: C-q M-_
-% green highlighting ¢...¢ (cent symbol) emacs: C-q M-"
-% LaTex escape §...§ (section symbol) emacs: C-q M-'
-% keyword escape ¶...¶ (pilcrow symbol) emacs: C-q M-^
-% math escape $...$ (dollar symbol)
-
 \documentclass[twoside,11pt]{article}
 
@@ -15,13 +7,14 @@
 \usepackage{textcomp}
 \usepackage[latin1]{inputenc}
+
 \usepackage{fullpage,times,comment}
 \usepackage{epic,eepic}
-\usepackage{upquote}									% switch curled `'" to straight
+\usepackage{upquote}					% switch curled `'" to straight
 \usepackage{calc}
 \usepackage{xspace}
 \usepackage{graphicx}
-\usepackage{varioref}									% extended references
-\usepackage{listings}									% format program code
-\usepackage[flushmargin]{footmisc}						% support label/reference in footnote
+\usepackage{varioref}					% extended references
+\usepackage{listings}					% format program code
+\usepackage[flushmargin]{footmisc}			% support label/reference in footnote
 \usepackage{latexsym}                                   % \Box glyph
 \usepackage{mathptmx}                                   % better math font with "times"
@@ -34,5 +27,5 @@
 \renewcommand{\UrlFont}{\small\sf}
 
-\setlength{\topmargin}{-0.45in}							% move running title into header
+\setlength{\topmargin}{-0.45in}				% move running title into header
 \setlength{\headsep}{0.25in}
 
@@ -42,4 +35,14 @@
 
 \interfootnotelinepenalty=10000
+
+\CFAStyle						% use default CFA format-style
+% inline code ©...© (copyright symbol) emacs: C-q M-)
+% red highlighting ®...® (registered trademark symbol) emacs: C-q M-.
+% blue highlighting ß...ß (sharp s symbol) emacs: C-q M-_
+% green highlighting ¢...¢ (cent symbol) emacs: C-q M-"
+% LaTex escape §...§ (section symbol) emacs: C-q M-'
+% keyword escape ¶...¶ (pilcrow symbol) emacs: C-q M-^
+% math escape $...$ (dollar symbol)
+
 
 \title{
Index: doc/proposals/user_conversions.md
===================================================================
--- doc/proposals/user_conversions.md	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/proposals/user_conversions.md	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -5,20 +5,16 @@
 There is also a set of _explicit_ conversions that are only allowed through a 
 cast expression.
-Based on Glen's notes on conversions [1], I propose that safe and unsafe 
-conversions be expressed as constructor variants, though I make explicit 
-(cast) conversions a constructor variant as well rather than a dedicated 
-operator. 
+I propose that safe, unsafe, and explicit (cast) conversions be expressed as 
+constructor variants. 
 Throughout this article, I will use the following operator names for 
 constructors and conversion functions from `From` to `To`:
 
-	void ?{} ( To*, To );            // copy constructor
-	void ?{} ( To*, From );          // explicit constructor
-	void ?{explicit} ( To*, From );  // explicit cast conversion
-	void ?{safe} ( To*, From );      // implicit safe conversion
-	void ?{unsafe} ( To*, From );    // implicit unsafe conversion
-
-[1] http://plg.uwaterloo.ca/~cforall/Conversions/index.html
-
-Glen's design made no distinction between constructors and unsafe implicit 
+	void ?{} ( To&, To );            // copy constructor
+	void ?{} ( To&, From );          // explicit constructor
+	void ?{explicit} ( To&, From );  // explicit cast conversion
+	void ?{safe} ( To&, From );      // implicit safe conversion
+	void ?{unsafe} ( To&, From );    // implicit unsafe conversion
+
+It has been suggested that all constructors would define unsafe implicit 
 conversions; this is elegant, but interacts poorly with tuples. 
 Essentially, without making this distinction, a constructor like the following 
@@ -26,5 +22,5 @@
 multiplying the space of possible interpretations of all functions:
 
-	void ?{}( Coord *this, int x, int y );
+	void ?{}( Coord& this, int x, int y );
 
 That said, it would certainly be possible to make a multiple-argument implicit 
@@ -32,8 +28,8 @@
 used infrequently:
 
-	void ?{unsafe}( Coord *this, int x, int y );
+	void ?{unsafe}( Coord& this, int x, int y );
 
 An alternate possibility would be to only count two-arg constructors 
-`void ?{} ( To*, From )` as unsafe conversions; under this semantics, safe and 
+`void ?{} ( To&, From )` as unsafe conversions; under this semantics, safe and 
 explicit conversions should also have a compiler-enforced restriction to 
 ensure that they are two-arg functions (this restriction may be valuable 
@@ -43,9 +39,16 @@
 is convertable to `To`. 
 If user-defined conversions are not added to the language, 
-`void ?{} ( To*, From )` may be a suitable representation, relying on 
+`void ?{} ( To&, From )` may be a suitable representation, relying on 
 conversions on the argument types to account for transitivity. 
-On the other hand, `To*` should perhaps match its target type exactly, so 
-another assertion syntax specific to conversions may be required, e.g. 
-`From -> To`.
+Since `To&` should be an exact match on `To`, this should put all the implicit 
+conversions on the RHS.
+On the other hand, under some models (like [1]), implicit conversions are not 
+allowed in assertion parameters, so another assertion syntax specific to 
+conversions may be required, e.g. `From -> To`. 
+It has also been suggested that, for programmer control, no implicit 
+conversions (except, possibly, for polymorphic specialization) should be 
+allowed in resolution of cast operators.
+
+[1] ../working/assertion_resolution.md
 
 ### Constructor Idiom ###
@@ -53,13 +56,14 @@
 that we can use the full range of Cforall features for conversions, including 
 polymorphism.
-Glen [1] defines a _constructor idiom_ that can be used to create chains of 
-safe conversions without duplicating code; given a type `Safe` which members 
-of another type `From` can be directly converted to, the constructor idiom 
-allows us to write a conversion for any type `To` which `Safe` converts to: 
-
-	forall(otype To | { void ?{safe}( To*, Safe ) })
-	void ?{safe}( To *this, From that ) {
+In an earlier version of this proposal, Glen Ditchfield defines a 
+_constructor idiom_ that can be used to create chains of safe conversions 
+without duplicating code; given a type `Safe` which members of another type 
+`From` can be directly converted to, the constructor idiom allows us to write 
+a conversion for any type `To` which `Safe` converts to: 
+
+	forall(otype To | { void ?{safe}( To&, Safe ) })
+	void ?{safe}( To& this, From that ) {
 		Safe tmp = /* some expression involving that */;
-		*this = tmp; // uses assertion parameter
+		this{ tmp }; // initialize from assertion parameter
 	}
 
@@ -67,14 +71,46 @@
 unsafe conversions.
 
+Glen's original suggestion said the copy constructor for `To` should also be 
+accepted as a resolution for `void ?{safe}( To&, Safe )` (`Safe` == `To`), 
+allowing this same code to be used for the single-step conversion as well. 
+This proposal does come at the cost of an extra copy initialization of the 
+target value, though.
+
+Contrariwise, if a monomorphic conversion from `From` to `Safe` is written, 
+e.g:
+
+	void ?{safe}( Safe& this, From that ) {
+		this{ /* some parameters involving that */ };
+	}
+
+Then the code for a transitive conversion from `From` to any `To` type 
+convertable from `Safe` is written:
+
+	forall(otype To | { void ?{safe}( To&, Safe ) })
+	void ?{safe}( To& this, From that ) {
+		Safe tmp = that;  // uses monomorphic conversion
+		this{ tmp };      // initialize from assertion parameter
+	}
+
+Given the entirely-boilerplate nature of this code, but negative performance 
+implications of the unmodified constructor idiom, it might be fruitful to have 
+transitive and single step conversion operators, and let CFA build the 
+transitive conversions; some possible names:
+
+	void ?{safe}  (To&, From);    void ?{final safe} (To&, From);  // single-step
+	void ?{safe*} (To&, From);    void ?{safe}       (To&, From);  // transitive
+
 What selective non-use of the constructor idiom gives us is the ability to 
 define a conversion that may only be the *last* conversion in a chain of such. 
-Constructing a conversion graph able to unambiguously represent the full 
-hierarchy of implicit conversions in C is provably impossible using only 
-single-step conversions with no additional information (see Appendix A), but 
-this mechanism is sufficiently powerful (see [1], though the design there has 
-some minor bugs; the general idea is to use the constructor idiom to define 
-two chains of conversions, one among the signed integral types, another among 
-the unsigned, and to use monomorphic conversions to allow conversions between 
-signed and unsigned integer types).
+One use for this is to solve the problem that `explicit` conversions were 
+added to C++ for, that of conversions to `bool` chaining to become conversions 
+to any arithmetic type.
+Another use is to unambiguously represent the full hierarchy of implicit 
+conversions in C by making sign conversions non-transitive, allowing the 
+compiler to resolve e.g. `int -> unsigned long` as 
+`int -> long -> unsigned long` over `int -> unsigned int -> unsigned long`. 
+See [2] for more details.
+
+[2] ../working/glen_conversions/index.html#usual
 
 ### Appendix A: Partial and Total Orders ###
@@ -153,5 +189,5 @@
 convert from `int` to `unsigned long`, so we just put in a direct conversion 
 and make the compiler smart enough to figure out the costs" - this is the 
-approach taken by the existing compipler, but given that in a user-defined 
+approach taken by the existing compiler, but given that in a user-defined 
 conversion proposal the users can build an arbitrary graph of conversions, 
 this case still needs to be handled. 
@@ -160,5 +196,5 @@
 exists a chain of conversions from `a` to `b` (see Appendix A for description 
 of preorders and related constructs). 
-This preorder corresponds roughly to a more usual type-theoretic concept of 
+This preorder roughly corresponds to a more usual type-theoretic concept of 
 subtyping ("if I can convert `a` to `b`, `a` is a more specific type than 
 `b`"); however, since this graph is arbitrary, it may contain cycles, so if 
@@ -192,5 +228,5 @@
 and so is considered to be the nearer type. 
 By transitivity, then, the conversion from `X` to `Y2` should be cheaper than 
-the conversion from `X` to `W`, but in this case the `X` and `W` are 
+the conversion from `X` to `W`, but in this case the `Y2` and `W` are 
 incomparable by the conversion preorder, so the tie is broken by the shorter 
 path from `X` to `W` in favour of `W`, contradicting the transitivity property 
Index: doc/refrat/Makefile
===================================================================
--- doc/refrat/Makefile	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/refrat/Makefile	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -53,6 +53,6 @@
 	dvips ${Build}/$< -o $@
 
-${BASE}.dvi : Makefile ${Build} ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
-		${Macros}/common.tex ${Macros}/lstlang.sty ${Macros}/indexstyle ../bibliography/pl.bib
+${BASE}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
+		${Macros}/common.tex ${Macros}/lstlang.sty ${Macros}/indexstyle ../bibliography/pl.bib | ${Build}
 	# Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
 	if [ ! -r ${basename $@}.ind ] ; then touch ${Build}/${basename $@}.ind ; fi
@@ -78,11 +78,11 @@
 	mkdir -p ${Build}
 
-%.tex : %.fig ${Build}
+%.tex : %.fig | ${Build}
 	fig2dev -L eepic $< > ${Build}/$@
 
-%.ps : %.fig ${Build}
+%.ps : %.fig | ${Build}
 	fig2dev -L ps $< > ${Build}/$@
 
-%.pstex : %.fig ${Build}
+%.pstex : %.fig | ${Build}
 	fig2dev -L pstex $< > ${Build}/$@
 	fig2dev -L pstex_t -p ${Build}/$@ $< > ${Build}/$@_t
Index: doc/theses/aaron_moss/comp_II/Makefile
===================================================================
--- doc/theses/aaron_moss/comp_II/Makefile	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/theses/aaron_moss/comp_II/Makefile	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -32,4 +32,5 @@
 
 DOCUMENT = comp_II.pdf
+BASE = ${basename ${DOCUMENT}}
 
 # Directives #
@@ -40,16 +41,16 @@
 
 clean :
-	@rm -frv ${DOCUMENT} ${basename ${DOCUMENT}}.ps ${Build}
+	@rm -frv ${DOCUMENT} ${BASE}.ps ${Build}
 
 # File Dependencies #
 
-${DOCUMENT} : ${basename ${DOCUMENT}}.ps
+${DOCUMENT} : ${BASE}.ps
 	ps2pdf $<
 
-${basename ${DOCUMENT}}.ps : ${basename ${DOCUMENT}}.dvi
+${BASE}.ps : ${BASE}.dvi
 	dvips ${Build}/$< -o $@
 
-${basename ${DOCUMENT}}.dvi : Makefile ${Build} ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
-		${Macros}/common.tex ${Macros}/indexstyle ../../../bibliography/pl.bib
+${BASE}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
+		${Macros}/common.tex ${Macros}/indexstyle ../../../bibliography/pl.bib | ${Build}
 	# Must have *.aux file containing citations for bibtex
 	if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
@@ -66,11 +67,11 @@
 	mkdir -p ${Build}
 
-%.tex : %.fig
+%.tex : %.fig ${Build}
 	fig2dev -L eepic $< > ${Build}/$@
 
-%.ps : %.fig
+%.ps : %.fig | ${Build}
 	fig2dev -L ps $< > ${Build}/$@
 
-%.pstex : %.fig
+%.pstex : %.fig | ${Build}
 	fig2dev -L pstex $< > ${Build}/$@
 	fig2dev -L pstex_t -p ${Build}/$@ $< > ${Build}/$@_t
Index: doc/theses/thierry_delisle/.gitignore
===================================================================
--- doc/theses/thierry_delisle/.gitignore	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/theses/thierry_delisle/.gitignore	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -25,4 +25,5 @@
 *.pdf
 *.png
+*.ps
 figures/*.tex
 
Index: doc/theses/thierry_delisle/Makefile
===================================================================
--- doc/theses/thierry_delisle/Makefile	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/theses/thierry_delisle/Makefile	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -51,4 +51,5 @@
 
 DOCUMENT = thesis.pdf
+BASE = ${basename ${DOCUMENT}}
 
 # Directives #
@@ -59,16 +60,16 @@
 
 clean :
-	@rm -frv ${DOCUMENT} ${basename ${DOCUMENT}}.ps ${Build}
+	@rm -frv ${DOCUMENT} ${BASE}.ps ${Build}
 
 # File Dependencies #
 
-${DOCUMENT} : ${basename ${DOCUMENT}}.ps
+${DOCUMENT} : ${BASE}.ps
 	ps2pdf $<
 
-${basename ${DOCUMENT}}.ps : ${basename ${DOCUMENT}}.dvi
+${BASE}.ps : ${BASE}.dvi
 	dvips ${Build}/$< -o $@
 
-${basename ${DOCUMENT}}.dvi : Makefile ${Build} ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
-		${Macros}/common.tex ${Macros}/indexstyle annex/local.bib ../../bibliography/pl.bib
+${BASE}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
+		${Macros}/common.tex ${Macros}/indexstyle annex/local.bib ../../bibliography/pl.bib | ${Build}
 	# Must have *.aux file containing citations for bibtex
 	if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
@@ -88,11 +89,11 @@
 	mkdir -p ${Build}
 
-%.tex : %.fig
+%.tex : %.fig ${Build}
 	fig2dev -L eepic $< > ${Build}/$@
 
-%.ps : %.fig
+%.ps : %.fig | ${Build}
 	fig2dev -L ps $< > ${Build}/$@
 
-%.pstex : %.fig
+%.pstex : %.fig | ${Build}
 	fig2dev -L pstex $< > ${Build}/$@
 	fig2dev -L pstex_t -p ${Build}/$@ $< > ${Build}/$@_t
@@ -101,5 +102,5 @@
 # Tools to generate png files
 # to create a png we create a pdf and convert it to png
-%.png : build/%.pstex figures/%.tex
+%.png : build/%.pstex figures/%.tex ${Build}
 	echo ${basename $@}
 	${LaTeX} figures/${basename $@}.tex
@@ -109,5 +110,5 @@
 
 # creating a pdf of a figure requires generating some latex that just includes the figure
-figures/%.tex: build/%.pstex
+figures/%.tex: build/%.pstex ${Build}
 	echo -n 	"\documentclass[preview]{standalone}\n" 	\
 			"\usepackage[T1]{fontenc}\n" 			\
Index: doc/user/Makefile
===================================================================
--- doc/user/Makefile	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ doc/user/Makefile	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -57,6 +57,6 @@
 	dvips ${Build}/$< -o $@
 
-${BASE}.dvi : Makefile ${Build} ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
-		${Macros}/common.tex ${Macros}/lstlang.sty ${Macros}/indexstyle ../bibliography/pl.bib
+${BASE}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} \
+		${Macros}/common.tex ${Macros}/lstlang.sty ${Macros}/indexstyle ../bibliography/pl.bib | ${Build}
 	# Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
 	if [ ! -r ${basename $@}.ind ] ; then touch ${Build}/${basename $@}.ind ; fi
@@ -79,11 +79,11 @@
 	mkdir -p ${Build}
 
-%.tex : %.fig ${Build}
+%.tex : %.fig | ${Build}
 	fig2dev -L eepic $< > ${Build}/$@
 
-%.ps : %.fig ${Build}
+%.ps : %.fig | ${Build}
 	fig2dev -L ps $< > ${Build}/$@
 
-%.pstex : %.fig ${Build}
+%.pstex : %.fig | ${Build}
 	fig2dev -L pstex $< > ${Build}/$@
 	fig2dev -L pstex_t -p ${Build}/$@ $< > ${Build}/$@_t
Index: doc/working/glen_conversions/index.html
===================================================================
--- doc/working/glen_conversions/index.html	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ doc/working/glen_conversions/index.html	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,1462 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+            "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>Conversions for Cforall</title>
+<style type='text/css'>
+.rationale { font-size: smaller; background-color: #F0F0FF }
+pre { margin-left: 2em; border-width: 1px; }
+code, pre { font-family: courier; font-weight: bold; }
+pre i {font-weight: normal; }
+dfn {font-weight: bold; font-style: italic; }
+</style>
+</head>
+
+<body>
+<h1>Conversions for Cforall</h1>
+
+<p><b>NOTE:</b> This proposal for constructors and user-defined conversions 
+does not represent the current state of Cforall language development, but is 
+maintained for its possible utility in building user-defined conversions. See 
+<tt>doc/proposals/user_conversions.md</tt> for a more current presentation of 
+these ideas.</p>
+
+<p>This is the first draft of a description of a possible extension to the
+current definition of Cforall ("Cforall-as-is") that would let programmers
+fit new types into Cforall's system of conversions.</p>
+
+<ol>
+  <li><a href="#notes">Design Notes</a>
+      <ol>
+	<li><a href="#goals">Goals</a></li>
+	<li><a href="#conversions">Conversions</a></li>
+	<li><a href="#constructors">Constructors</a></li>
+	<li><a href="#ambiguity">Ambiguity</a></li>
+      </ol>
+  </li>
+  <li><a href="#extension">Proposed Extension</a>
+      <ol>
+	<li><a href="#ops">New Operator Identifiers</a></li>
+	<li><a href="#casts">Cast Expressions</a></li>
+	<li><a href='#definitions'>Object Definitions</a></li>
+	<li><a href='#default'>Default Functions</a></li>
+      </ol>
+  </li>
+  <li><a href="#chaining">Conversion Composition</a></li>
+  <li><a href='#cost'>Constructors and Cost</a></li>
+  <li><a href='#heap'>Heap Allocation</a></li>
+  <li><a href='#generic'>Generic Conversions and Constructors</a></li>
+  <li><a href="#usual">C's "Usual Arithmetic Conversions"</a>
+      <ol>
+	<li><a href="#floating">Floating-Point Types</a></li>
+	<li><a href="#largeint">Large Integer Types</a></li>
+	<li><a href="#intpromo">C's "Integer Promotions"</a></li>
+      </ol>
+  </li>
+  <li><a href="#otherpromo">Other Promotions</a></li>
+  <li><a href="#demotions">Other Pre-Defined Implicit Conversions</a></li>
+  <li><a href="#explicit">Pre-Defined Explicit Conversions</a></li>
+  <li><a href="#nonconversions">Non-Conversions</a></li>
+  <li><a href="#assignment">Assignment Operators</a></li>
+  <li><a href="#overload">Overload Resolution</a></li>
+  <li><a href="#final">Final Notes</a></li>
+</ol>
+
+<h2 id="notes">Design Notes</h2>
+
+<h3 id='goals'>Goals</h3>
+<p>My design goal for this extension is to provide a framework that
+explains the bulk of C's conversion semantics in terms of more basic
+languages, just as Cforall explains most expression semantics in terms of
+overloaded function calls.</p>
+
+<p>My pragmatic goal is to allow a programmer to define a portable rational
+number data type, fit it into the existing C type system, and use it in
+mixed-mode arithmetic expressions, all in a convenient and esthetically
+pleasing manner.</p>
+
+<h3 id="conversions">Conversions</h3>
+
+<p>A <dfn>conversion</dfn> creates a value from a value of a different
+type.  C defines a large number of conversions, especially between
+arithmetic types.  A subset of these can be performed by <dfn>implicit
+conversions</dfn>, which occurs in certain contexts: in assignment
+expressions, when passing arguments to function (where parameters are
+"assigned the value of the corresponding argument"), in initialized
+declarations (where "the same type constraints and conversions as for
+simple assignment apply"), and in mixed mode arithmetic.  All conversions
+can be performed explicitly by cast expressions.</p>
+
+<p>C prefers some implicit conversions, the <dfn>promotions</dfn>, to the
+others.  The promotions are ranked among themselves, creating a hierarchy
+of types.  In mixed-mode operations, the "usual arithmetic conversions"
+promote the operands to what amounts to their least common supertype.
+Cforall-as-is uses a slightly larger set of promotions to choose the
+smallest possible promotion when resolving overloading.</p>
+
+<p>An extension should allow Cforall to explain C's conversions as a set of
+pre-defined functions, including its explicit conversions, implicit
+conversions, and preferences among conversions.  The extension must let the
+programmer define new conversions for programmer-defined types, for
+instance so that new arithmetic types can be used conveniently in
+mixed-mode arithmetic.</p>
+
+<h3 id="constructors">Constructors</h3>
+
+<p>C++ introduced constructors to the C language family, and I will use its
+terminology.  A <dfn>constructor</dfn> is a function that initializes an
+object.  C does not have constructors; instead, it makes do with
+initialization, which works like assignment.  Cforall-as-is does not have
+constructors, either: instead, by analogy with C's semantics, a
+programmer-defined assignment function may be called during initialization.
+However, there is a key difference between a function that implements
+assignment and a constructor: constructors assume that the object is
+uninitialized, and must set up any data structure invariants that the
+object is supposed to obey.  An assignment function assumes that the target
+object obeys its invariants.</p>
+
+<p>A <dfn>default constructor</dfn> has no parameters other than the object it
+initializes.  It establishes invariants, but need not do anything else.  A
+default constructor for a rational number type might set the denominator to be
+non-zero, but leave the numerator undefined.</p>
+
+<p>A <dfn>copy constructor</dfn> has two parameters: the object it
+initializes, and a value of the same type.  Its purpose is to copy the
+value into the object, and so it is very similar to an assignment
+function.  In fact, it could be expressed as a call to a default constructor
+followed by an assignment.</p>
+
+<p>A <dfn>converting constructor</dfn> also has two parameters, but the
+second parameter is a value of some type different from the type
+of the object it initializes.  Its purpose is to convert the value to the
+object's type before copying it, and so it is very similar to a C
+assignment operation that performs an implicit conversion.</p>
+
+<p>C++ sensibly defines parameter passing as call by initialization, since
+the parameter is uninitialized when the argument value is placed in it.
+Extended Cforall should do the same.  However, parameter passing is one of
+the main places where implicit conversions occur.  Hence in extended
+Cforall <em>constructors define the implicit conversions</em>.  Cforall
+should also encourage programmers to maintain the similarity between
+constructors and assignment.</p>
+
+<h3 id="ambiguity">Ambiguity</h3>
+
+<p>In extended Cforall, programmer-defined conversions should fit in with
+the predefined conversions.  For instance, programmer-defined promotions
+should interact with the normal promotions so that programmer-defined types
+can take part in mixed-mode arithmetic expressions.  The first design that
+springs to mind is to define a minimal set of conversions between
+neighbouring types in the type hierarchy, and to have Cforall create
+conversions between more distant types by composition of predefined and
+programmer-defined conversions.  Unfortunately, if one draws a graph of C's
+promotions, with C's types as vertices and C's promotions as edges, the
+result is a directed acyclic graph, not a tree.  This means that an attempt
+to build the full set of promotions by composition of a minimal set of
+promotions will fail.</p>
+
+<p> Consider a simple processor with 32-bit <code>int</code> and
+<code>long</code> types.  On such a machine, C's "usual arithmetic
+conversions" dictate that mixed-mode arithmetic that combines a signed
+integer with an unsigned integer must promote the signed integer to an
+unsigned type.  Here is a directed graph showing the some of the minimal
+set of promotions.  Each of the four promotions is necessary, because each
+could be required by some mixed-mode expression, and none can be decomposed
+into simpler conversions.</p>
+
+<pre>
+long --------> unsigned long
+ ^               ^
+ |               |
+int ---------> unsigned int
+</pre>
+
+<p>Now imagine attempting to compose an <code>int</code>-to-<code>unsigned
+long</code> conversion from the minimal set: there are two paths through
+the graph, so the composition is ambiguous.</p>
+
+<p>(In C, and in Cforall-as-is, no ambiguity exists: there is just one
+<code>int</code>-to-<code>unsigned long</code> promotion, defined by the
+language semantics.  In Cforall-as-is, the preference for
+<code>int</code>-to-<code>long</code> over
+<code>int</code>-to-<code>unsigned long</code> is determined by a
+"conversion cost" calculated from the graph of the full set of promotions,
+but the calculation depends on maximal path lengths, not the exact
+path.)</p>
+
+<p>Unfortunately, the same problem with ambiguity creeps in any time
+conversions might be chained together.  The extension must carefully
+control conversion composition, so that programmers can avoid ambiguous
+conversions.</p>
+
+<h2 id='extension'>Proposed Extension</h2>
+
+<p>The rest of this document describes my proposal to add
+programmer-definable conversions and constructors to Cforall.</p>
+
+<p class='rationale'>If your browser supports CSS style sheets, the
+proposal will appear in "normal" paragraphs, and commentary on the proposal
+will have the same appearance as this paragraph.</p>
+
+<h3 id='ops'>New Operator Identifiers</h3>
+
+<p>Cforall would be given a <dfn>cast identifier</dfn>, two
+<dfn>constructor identifiers</dfn>, and a <dfn>destructor
+identifier</dfn>:</p>
+
+<ul>
+  <li> <code>(?)?</code>, for cast functions.</li>
+  <li> <code>(?create)?</code>, for constructors.</li>
+  <li> <code>(?promote)?</code>, for constructors that are promotions.</li>
+  <li> <code>(?destroy)?</code>, for destructors.</li>
+</ul>
+
+<div class='rationale'>
+<p>The ugly identifier <code>(?)?</code> is meant to be mnemonic for the
+cast expression.  The other identifiers are pretty weak (suggestions,
+anyone?) but are supposed to remind the programmer of the connection
+between conversions and constructors.</p>
+
+<p>We could instead use a single <code>(?create)?</code> identifier for
+constructors and add a <code>promote</code> storage class specifier, at
+some small risk clashes of with identifiers in existing code.</p> </div>
+
+<p>It is an error to declare two functions with different constructor
+identifiers that have the same type in the same translation unit.</p>
+
+<p>Functions declared with these identifiers can be polymorphic.  Unlike
+other polymorphic functions, the return type of a polymorphic cast function
+need not be derivable from the type of its parameters</p>
+
+<div class='rationale'>
+<p>The return type of a call to a polymorphic cast
+function can be deduced from the calling context.</p>
+
+<pre>
+forall(type T1) T1 (?)?(T2);  // <i>Legal.</i>
+forall(type T1) T1 pfun(T2);  // <i>Illegal -- no way to infer </i>T1.
+</pre>
+</div>
+
+<p>A <dfn>cast function</dfn> from type <code>T1</code> to type
+<code>T2</code> is named "<code>(?)?</code>", accepts exactly one explicit
+argument of type <i>T1</i>, and returns a value of type <i>T2</i>.</p>
+
+<p class='rationale'>If the cast function is polymorphic, it will have
+type parameters and assertion parameters as well, and can be said to be a
+cast function from many different types to many different types.
+</p>
+
+<p>A <dfn>default constructor function</dfn> for type <i>T</i> is named
+"<code>(?create)?</code>", accepts exactly one explicit argument of type
+<i>T</i><code>*</code>, and returns <code>void</code>.</p>
+
+<p>A <dfn>copy constructor function</dfn> for type <i>T</i> is named
+<code>"(?create)?</code>", accepts exactly two explicit arguments of types
+<i>T</i><code>*</code> and <i>T</i>, and returns <code>void</code>.</p>
+
+<p>A <dfn>converting constructor function</dfn> for type <i>T1</i> from
+<i>T2</i> is named "<code>(?create)?</code>" or "<code>(?promote)?</code>",
+accepts exactly two explicit arguments of types <i>T1</i><code>*</code> and
+<i>T2</i>, and returns <code>void</code>.</p>
+
+<p>A <dfn>destructor function</dfn> for type <i>T</i> is named
+"<code>(?destroy)?</code>", accepts exactly one explicit argument of type
+<i>T</i><code>*</code>, and returns <code>void</code>.</p>
+
+<div class='rationale'>
+
+<p>The monomorphic function prototypes for these functions are</p>
+<pre>
+<i>T1</i>   (?)?(<i>T2</i>);
+void (?create)?(<i>T1</i>*);
+void (?create)?(<i>T1</i>*, <i>T2</i>);
+void (?promote)?(<i>T1</i>*, <i>T2</i>);
+void (?destroy)?(<i>T1</i>*);
+</pre>
+</div>
+
+<h3 id='casts'>Cast Expressions</h3>
+
+<p>In most cases the cast expression <code>(<i>T</i>)<i>e</i></code> would
+be treated like the function call <code>(?)?(<i>e</i>)</code>, except that
+only cast functions to type <i>T</i> would be valid interpretations of
+<code>(?)?</code>, and <code><i>e</i></code> would not be implicitly
+converted to the cast function's parameter type.  In particular, the usual
+rules for resolving function overloading (see <a href='#overload'>below</a>)
+would be used to choose the best interpretation of the expression.</p>
+
+<div class='rationale'>
+<p>For example, in</p>
+<pre>
+type Wazzit;
+type Thingum;
+Wazzit w;
+(Thingum)w;
+</pre>
+<p>the cast function that is called must be "<code>Thingum
+(?)?(Wazzit)</code>", or a polymorphic function that can be specialized to
+that.</p>
+
+<p>The ban on implicit conversions within the cast allows programmers to
+explicitly control composition of conversions and avoid ambiguity.  I also
+hope that this will make it easier for compilers and programmers to
+determine which conversions will be applied in which circumstances.  If
+implicit conversions could be applied to the inputs and outputs of casts,
+when any and all of the conversion functions involved could be polymorphic
+... the possibilities seem endless, unfortunately.</p>
+
+</div>
+
+<h3 id='definitions'>Object Definitions</h3>
+<p>A definition of an object <i>x</i> would call a constructor function.  Let
+<i>T</i> be <i>x</i>'s type with type qualifiers removed, and let <i>a</i>
+be <i>x</i>'s address (with type <code><i>T</i>*</code>).</p>
+
+<p class='rationale'>If type qualifiers weren't ignored, <code>const</code>
+objects couldn't be initialized, and every constructor would have to be
+duplicated, with one version for <i>T</i>* objects and one for
+<code>volatile</code> <i>T</i>* objects.</p>
+
+<ul>
+  <li>A definition with an initializer that is a single expression
+      <i>e</i>, optionally enclosed in braces, would call a copy or converting
+      constructor.  The call would be treated much like the function call
+      <code><i>f</i>(<i>a</i>,<i>e</i>)</code>, except that only copy and 
+      converting constructors for type <i>T</i> would be valid interpretations
+      of <code><i>f</i></code>, and <i>e</i> would not be  implicitly
+      converted to the type of the constructor's second parameter.</li>
+  <li>If <i>x</i> has automatic storage duration and is not initialized
+      explicitly, the definition would call a default constructor function.
+      The call would be treated much like the function call
+      <code><i>f</i>(<i>a</i>)</code>, except that only default
+      constructor functions for type <i>T</i> would be valid interpretations of
+      <code><i>f</i></code>.</li>
+  <li><p>If <i>x</i> has static storage duration and is not initialized
+      explicitly, and is defined within the scope of a type definition that
+      defines <i>T</i>, then <i>T</i>'s implementation type would determine how
+      <i>x</i> is initialized.</p>
+      <div class='rationale'>
+      <pre>
+      type Rational = struct { int numerator; unsigned denominator; };
+      Rational r; // Both members initialized to 0.
+      </pre>
+      </div>
+  </li>
+  <li><p>If <i>x</i> has static storage duration and is not initialized
+      explicitly, and the type <i>T</i> is an opaque type, the definition
+      would be treated as if <i>x</i> was initialized with the expression
+      <code>0</code>.</p>
+      <div class='rationale'>
+      <p>This is a simple extension of C's rules for static objects,
+      which initialized them all to 0.  Frequently, the 0 involved
+      will have type <i>T</i>, and the definition will call a copy
+      constructor.</p>
+      <pre>
+      extern type Rational;
+      extern Rational 0;
+      static Rational r;  // initialized with the Rational 0.
+      </pre>
+      <p>In other cases, the 0 will be an integer or null pointer, and the
+      definition will call a converting constructor.</p>
+
+      <p>The obvious alternative design would call <i>T</i>'s default
+      constructor.  That design would be inconsistent, because some static
+      objects would go uninitialized.  It would also cause subtle problems,
+      because a particular static definition could be uninitialized or
+      initialized to 0 depending on whether <i>T</i> is an <code>extern
+      type</code> or a <code>typedef</code>.</p>
+      </div>
+  </li>
+</ul>
+
+<p>Except when calling constructors, parameter passing invokes constructor
+functions.  Passing argument expression <i>e</i> to a parameter would be
+equivalent to initializing the parameter with that expression.  When
+calling constructors, the value of the argument would be copied into the
+parameter.</p>
+
+<p>When the lifetime of <i>x</i> ends, a destructor function would be called.
+The call would be treated much like the function call
+<code>(?destroy)?(<i>a</i>)</code>.  When a block ends, the objects that were
+defined in the block would be destroyed in the reverse of the order in which
+they are declared.</p>
+
+<p>The storage class specifier <code>register</code> will have the
+semantics that it has in C++, instead of the semantics of C: it is merely a
+hint to the implementation that the object will be heavily used, and does
+not prevent programs from computing the address of the object.</p>
+
+<h3 id='default'>Default Functions</h3>
+
+<p>In Cforall-as-is, every declaration with type-class <code>type</code>
+implicitly declares a default assignment function, with the same scope and
+linkage as the type.  Extended Cforall would also declare a <dfn>default
+default constructor</dfn> and a <dfn>default destructor</dfn>.</p>
+
+<div class='rationale'>
+<pre>
+{
+    extern type T;
+    T t;           // <i>calls external constructor for T.</i>
+    }              // <i>calls external destructor for T.</i>
+</pre>
+<p>The destructor and some sort of constructor are necessary to instantiate
+the type.  I include the default constructor because it is the most basic.
+Arguably the declaration should also declare a default copy constructor,
+but I chose not to because Cforall can construct a copy constructor from
+the default constructor and the assignment operator, as will be seen
+<a href="#generic">below</a>.</p>
+
+<p>If the type does not need to be instantiated, it probably should have
+been declared by <code>dtype</code> instead of by <code>type</code>.</p>
+</div>
+
+<p>A type definition would implicitly define a default constructor and
+destructor by inheriting the implementation type's default constructor and
+destructor, just as is done for the implicitly defined default assignment
+function.</p>
+
+<h2 id='chaining'>Conversion Composition</h2>
+
+<p>As mentioned above, Cforall does not apply implicit conversions to the
+arguments and results of cast expressions or constructor calls.  Neither
+does it automatically create conversions or constructors by composing
+programmer-defined compositions: given</p>
+
+<pre>
+T1 (?)?(T2);
+T2 (?)?(T3);
+T3 v3;
+(T1)v3;
+</pre>
+
+<p>then Cforall does not automatically create</p>
+
+<pre>
+T1 (?)?(T3 p) { return (T1)(T2)p; }
+</pre>
+
+<p>Composition of conversions does show up through a third mechanism where
+the programmer has more control: assertion lists.  Consider a
+<code>Month</code> type, that represents months as integers between 0 and
+11.  Clearly a <code>Month</code> can be promoted to <code>unsigned</code>,
+and to any type above <code>unsigned</code> in the arithmetic type
+hierarchy as well.</p>
+
+<pre id='monthpromo'>
+type Month = unsigned;
+
+forall(type T | void (?promote)(T*, unsigned))
+  void (?promote)?(T* target, Month source) {
+    unsigned u_temp = (unsigned)source;
+    T t_temp = u_temp;           // <i>calls the assertion parameter.</i>
+    *target = t_temp;
+  }
+</pre>
+
+<p>The intimidating polymorphic promotion declaration says that, if
+<code>T</code> is a type and <code>unsigned</code> can be promoted to
+<code>T</code>, then the function can promote <code>Month</code> to
+<code>T</code>.</p>
+
+<pre>
+Month m;
+unsigned long ul = m;
+</pre>
+
+<p>To initialize <code>ul</code>, Cforall must bind <code>T</code> to
+<code>unsigned long</code>, find the (pre-defined)
+<code>unsigned</code>-to-<code>unsigned long</code> promotion, and pass it
+to the assertion parameter of the polymorphic
+<code>Month</code>-to-<code>T</code> function.</p>
+
+<p>But what about converting from <code>Month</code> to
+<code>unsigned</code> itself?</p>
+
+<pre>
+unsigned u = m;  // <i>How?</i>
+</pre>
+
+<p>A monomorphic <code>Month</code>-to-<code>unsigned</code> constructor
+would do the job, but its body would mostly duplicate the body of the
+polymorphic function.</p>
+
+<p>Instead, Cforall should use the polymorphic promotion and the
+<code>unsigned</code> copy constructor.  To initialize <code>u</code>,
+Cforall should pass the <code>unsigned</code> copy constructor to the assertion
+parameter of the polymorphic <code>Month</code> promotion, and bind
+<code>T</code> to <code>unsigned</code>.</p>
+
+<p>Note that the polymorphic promotion can promote <code>Month</code> to
+the standard types, to implementation-defined extended types, and to
+programmer-defined types that have yet to be written.  This is much better
+than writing a flock of monomorphic promotions, with function bodies that
+would be nearly identical, to convert <code>Month</code> to each unsigned
+type individually.  The predefined constructors make heavy use of this
+<dfn id='idiom'>constructor idiom</dfn>: instead of writing</p>
+
+<pre>
+void (?promote)? (T1*, T2);
+</pre>
+
+<p>("You can make a T2 into a T1"), write</p>
+<pre>
+forall(type T | void (?promote)?(T*, T1) ) void (?promote)?(T*, T2);
+</pre>
+
+<p>("You can make a T2 into anything that can be made from a T1").</p>
+
+<h2 id='cost'>Constructors and Cost</h2>
+
+<p>Calls to constructors have <dfn>construction costs</dfn>, which let
+Cforall choose the least expensive implicit conversion when given a
+choice.</p>
+
+<ol>
+  <li>The cost of a call to a copy constructor is 0.</li>
+  <li>The cost of a call to a monomorphic constructor is 1.</li>
+  <li>The cost of a call to a polymorphic constructor, or a specialization
+      of it, is 1 plus the sum of the construction costs of constructors
+      that are passed to it through assertion parameters.</li>
+</ol>
+
+<div class='rationale'>
+
+<p>Note that, although point 3 refers to constructors that are
+passed at run-time, the translator statically matches arguments to
+assertion parameters, so it can determine construction costs statically.</p>
+
+<p>Construction cost is defined for <em>every</em>
+constructor, not just the promotions (which are the equivalent of the safe
+conversions of Cforall-as-is).  This seemed like the easiest way to handle
+(admittedly dicey) "mixed" constructors, where the constructor and its
+assertion parameter have different identifiers:</p>
+
+<pre>
+type Thingum;
+type Wazzit;
+forall(type T | void (?create)?(T*, Thingum) )
+  void (?promote)?(T*, Wazzit);
+</pre>
+</div>
+
+<h3>Examples:</h3>
+<p>"<code>unsigned ui = 42U;</code>" calls a copy constructor, and so has
+cost 0.</p>
+
+<p>"<code>unsigned ui = m;</code>", where <code>m</code> has type
+<code>Month</code>, calls the polymorphic <code>Month</code> promotion
+defined <a href="#monthpromo">previously</a>.  It passes the
+<code>unsigned</code>-to-<code>unsigned</code> copy constructor to the
+assertion parameter, and so has cost 1+0&nbsp;=&nbsp;1.</p>
+
+<p>"<code>unsigned long ul = m;</code>" calls the polymorphic
+<code>Month</code> promotion, passing the
+<code>unsigned</code>-to-<code>unsigned long</code> constructor to the
+assertion parameter.  <code>unsigned</code>-to-<code>unsigned long</code>
+is defined below and will turn out to have cost 1, so the total cost is 2.</p>
+
+<p>Inside the body of the <code>Month</code> promotion, the assertion
+parameter has a monomorphic type, and so has a construction cost of 1 where
+it is called by the initialization of <code>t_temp</code>.  The cost of the
+<em>argument</em> passed through the assertion parameter has no relevance
+inside the body of the promotion.</p>
+
+<h2 id='overload'>Overload Resolution</h2>
+
+<p>In Cforall-as-is, there is at most one language-defined implicit
+conversion between any two types.  In extended Cforall, more than one
+conversion may be applicable, and overload resolution must be adapted to
+account for that, by using the lowest-cost conversion.</p>
+
+<p>The <dfn>unsafe conversion cost</dfn> of a function call expression
+would be the total conversion cost of implicit calls of
+<code>(?create)?()</code> constructors applied directly to arguments of the
+function -- 0 if there are none.</p>
+
+<p class='rationale'>This would replace a rule in Cforall-as-is, which
+considers all unsafe conversions to be equally bad and just counts them.  I
+think the difference would be subtle and unimportant.</p>
+
+<p>The <dfn>promotion cost</dfn> would be the total conversion costs of
+implicit calls of <code>(?promote)?()</code> constructors applied directly
+to arguments of the function -- 0 if there are none.</p>
+
+<p>Overload resolution would examine each argument expression individually.
+The best interpretations of an expression would be:</p>
+
+<ol>
+  <li>the interpretations with the lowest unsafe conversion cost;</li>
+  <li>of these, the interpretations with the lowest promotion cost;</li>
+  <li>of these, if any can be promoted to the parameter type, then just
+      those that can be converted at minimal cost; otherwise, all remaining
+      interpretations.</li>
+</ol>
+
+<p>The best interpretation would be implicitly converted to the parameter
+type, by calling the conversion function with minimal cost.  If there is
+more than one best interpretation, or if there is more than one
+minimal-cost conversion, the argument is ambiguous.</p>
+
+<p>A maximal set of interpretations of the function call expression that
+have compatible result types produces a single interpretation: the
+interpretations with the lowest unsafe conversion cost, and of these, the
+interpretations with the lowest promotion cost.  If there is more than one
+such interpretation, the function call expression is ambiguous.</p>
+
+<h2 id='heap'>Heap Allocation</h2>
+
+<p>Cforall would define new heap allocation functions that would ensure
+that constructors and destructors would be applied to objects in the
+heap.  There's lots of room for ambitious design here, but a simple
+facility might look like this:</p>
+
+<pre>
+forall(type T) void delete(T const volatile restrict* ptr) {
+  if (ptr) (?destroy)?(ptr);
+  free(ptr);
+}
+</pre>
+
+<div class='rationale'>
+<p>In a call to <code>delete()</code>, the argument might be a pointer to a
+pointer: <code>T</code> would be a pointer type, and the argument might
+have all three type qualifiers.  (If it doesn't, pointer conversions will add
+missing qualifiers to the argument.)</p>
+<pre>
+// <i>Pointer to a const volatile restricted pointer to an int:</i>
+int * const volatile restrict * pcvrpi;
+// <i>...</i>
+delete(cvrpi);    // T<i> bound to </i>int *
+</pre>
+</div>
+
+<p>A <code>new()</code> function would take the address of a pointer and an
+initial value, and points the pointer at heap storage initialized to that
+value.</p>
+<pre>
+forall(type T | void (?create)?(T*, T))
+  void new(T* volatile restrict* ptr, T val) {
+    *ptr = malloc(sizeof(T));
+    if (*ptr) (?create)?(*ptr, val);  // <i>explicit constructor call</i>
+}
+
+forall(type T | void (?create)?(T*, T))
+  void new(T const* volatile restrict* ptr, T val),
+       new(T volatile* volatile restrict* ptr, T val),
+       new(T restrict* volatile restrict* ptr, T val),
+       new(T const volatile* volatile restrict* ptr, T val),
+       new(T const restrict* volatile restrict* ptr, T val),
+       new(T volatile restrict* volatile restrict* ptr, T val),
+       new(T const volatile restrict* volatile restrict* ptr, T val);
+</pre>
+<p class='rationale'>Cforall can't add type qualifiers to pointed-at
+pointer types, so <code>new()</code> needs one variation for each set of
+type qualifiers.</p>
+
+<p>Another <code>new()</code> function would omit the initial value, and
+apply the default constructor.  <span class='rationale'>Obviously, there's
+no point in allocating <code>const</code>-qualified uninitialized
+storage.</span></p>
+<pre>
+forall(type T)
+  void new(T* volatile restrict * ptr) {
+    *ptr = malloc(sizeof(T));
+    if (*ptr) (?create)?(*ptr);   // <i>Explicit default constructor call.</i>
+}
+
+forall(type T)
+  void new(T volatile* volatile restrict*),
+  void new(T restrict* volatile restrict*),
+  void new(T volatile restrict* volatile restrict*);
+</pre>
+
+<h2 id='generic'>Generic Conversions and Constructors</h2>
+
+<p>Cforall would provide a polymorphic default constructor function and
+destructor function, for types that do not have their own:</p>
+
+<pre>
+forall(type T)
+  void (?create)?(T*) { return; };
+
+forall(type T)
+  void (?destroy)?(T*) { return; };
+</pre>
+
+<p class='rationale'>The generic default constructor and destructor provide
+C semantics for uninitialized variables: "do nothing".</p>
+
+<p>For every structure type <code>struct <i>s</i></code> Cforall would define a
+default constructor function that applies a default constructor to each
+member, in no particular order.  Similarly, it would define a destructor that
+applies the destructor of each member in no particular order.</p>
+
+<p>Any promotion would be treated as a plain constructor:</p>
+<pre>
+forall(type T, type S | void (?promote)(T*, S))
+  void (?create)?(T*, S) {
+    (?promote)?(T*, S);    // <i>Explicit constructor call!</i>
+  }
+</pre>
+
+<p>A predefined cast function would allow explicit conversions anywhere
+that implicit conversions are possible:</p>
+<pre>
+forall(type T, type S | void (?create)?(T*, S))
+  T (?)?(S source) {
+    T temp = source;
+    return temp;
+  }
+</pre>
+
+<p>A predefined converting constructor would allow initialization anywhere
+that assignment is defined:</p>
+<pre>
+forall(type T | void (?create)?(T*), type S | T ?=?(T*, S))
+  void (?create)?(T* target, S source) {
+    (?create)?(target);
+    *target = source;
+  }
+</pre>
+
+<p class='rationale'>This implements the typical semantic link between
+assignment and initialization.</p>
+
+<p>The predefined copy constructor function is</p>
+<pre>
+forall(type T)
+  void (?promote)?(T* target, T source) {
+    (?create)?(target);
+    *target = source;
+  }
+</pre>
+
+<p class='rationale'>Since Cforall defines assignment and default
+constructors for structure types, this provides the copy constructor for
+structure types.</p>
+
+<p>Finally, Cforall defines the conversion to <code>void</code>, which
+discards its argument.</p>
+<pre>
+forall(type T) void (?promote)(void*, T);
+</pre>
+
+<h2 id='usual'>C's "Usual Arithmetic Conversions"</h2>
+
+<p>C has five groups of arithmetic types: signed integers, unsigned
+integers, complex floating-point numbers, imaginary floating-point numbers,
+and real floating-point numbers.  (Implementations are not required to
+provide complex and imaginary types.)  Some of the "usual arithmetic
+conversions" promote upward within a group or to a more general group: from
+<code>int</code> to <code>long long</code>, for instance.   Others
+promote across from a type in one group to a similar type in another group:
+for instance, from <code>int</code> to <code>unsigned int</code>.</p>
+
+<h3 id='floating'>Floating-Point Types</h3>
+
+<p>The floating point types would use the <a href="#idiom">constructor
+idiom</a> for upward promotions, and monomorphic constructors for
+promotions across from real and imaginary types to complex types with the
+same precision.</p> 
+
+<p>I will use a macro to abbreviate the constructor idiom.
+"<code>Promoter(T,S)</code>" promotes <code>S</code> to any type that
+<code>T</code> can be promoted to</p>
+<pre>
+#define Promoter(Target, Source) \
+  forall(type T | void (?promote)?(T*, Target)) void (?promote)?(T*, Source)
+
+Promoter(long double _Complex, double _Complex);      // <i>a</i>
+Promoter(double _Complex,      float _Complex);       // <i>b</i>
+Promoter(long double, double);                        // <i>c</i>
+Promoter(double,      float);                         // <i>d</i>
+Promoter(long double _Imaginary, double _Imaginary);  // <i>e</i>
+Promoter(double _Imaginary,      float _Imaginary);   // <i>f</i>
+
+void (?promote)?(long double _Complex*, long double);             // <i>g</i>
+void (?promote)?(long double _Complex*, long double _Imaginary);  // <i>h</i>
+void (?promote)?(double _Complex*, double);                       // <i>i</i>
+void (?promote)?(double _Complex*, double _Imaginary);            // <i>j</i>
+void (?promote)?(float _Complex*, float);                         // <i>k</i>
+void (?promote)?(float _Complex*, float _Imaginary);              // <i>l</i>
+</pre>
+
+<div class='rationale'>
+<p>It helps to draw a graph of the promotions.  In this diagram,
+monomorphic promotions are solid arrows from the source type to the target
+type, and polymorphic promotions are dotted arrows from the source type to
+a bubble that surrounds all possible target types.  (Twenty years after
+first hearing about them, I have finally found a use for directed
+multigraphs!)  To determine the promotion from one type to another, find a
+path of zero or more dotted arrows optionally ending with a solid arrow.</p>
+<div>
+<img alt="Floating point promotions" src="./float_promo.png">
+</div>
+
+<p>A <code>long double _Complex</code> can be constructed from</p>
+<ol>
+  <li>a <code>double _Complex</code>, via <i>a</i>, with a <code>double
+      _Complex</code> copy constructor passed as the assertion
+      parameter.</li>
+  <li>a <code>long double</code>, via constructor <i>g</i>.</li>
+  <li>a <code>double</code>, via <i>c</i> (which promotes
+      <code>double</code> to <code>long double</code> and higher), with
+      <i>g</i> passed as the assertion parameter.  In other words, the path
+      from <code>double</code> to <code>long double _Complex</code> passes
+      through <code>long double</code></li>
+  <li>a <code>float _Complex</code>, via <i>b</i>.  For the assertion
+      parameter, Cforall passes a <code>double
+      _Complex</code>-to-<code>long double _Complex</code> constructor that
+      it makes by specializing <i>a</i>; for the assertion parameter of the
+      specialization, it passes a <code>long double
+      _Complex</code>-to-<code>long double _Complex</code> copy
+      constructor.</li>
+  <li>a <code>float</code>, via <i>d</i>, with a specialization of <i>c</i>
+      passed as its assertion parameter, with <i>g</i> passed as the
+      specialization's assertion parameter.</li>
+</ol>
+
+<p>Note how "upward" and "across" promotions interact.  Polymorphic
+"upward" promotions connect widely separated types by composing
+constructors through their assertion parameters.  Monomorphic "across"
+promotions extend composition one step across to corresponding types in
+different groups.</p>
+
+<p>Defining the set of predefined promotions turned out to be quite tricky.
+For example, if "across" promotions used the constructor idiom, ambiguity
+would result: a conversion from <code>float</code> to <code>double
+_Complex</code> could convert upward through <code>double</code> or across
+through <code>float _Complex</code>.  The key points are:</p>
+<ol>
+  <li>Monomorphic constructors are only used to connect neighbouring types
+      in the conversion hierarchy, because they have constructor cost 1.</li>
+  <li>Polymorphic constructors only connect directly to neighbours, because
+      their minimal cost is 1.  They reach other types by composition.</li>
+  <li>The types in the assertion parameter of a polymorphic constructor
+      specify the exact path between two types by specifying the
+      next type in a sequence of composed constructors.</li>
+  <li>There can be more than one path between two types, provided that the
+      paths have different construction costs or degrees of
+      polymorphism.</li>
+</ol>
+
+</div>
+
+<h3 id='largeint'>Large Integer Types</h3>
+
+<p class='rationale'>The conversions for the integer types cannot be
+defined by a simple list, because the set of integer types is
+implementation-defined, the range of each type is implementation-defined,
+and the set of promotions depend on whether a particular signed type can
+represent all values of a particular unsigned type.  As I read the C
+standard, every signed type has a matching unsigned type, but the reverse
+is not true.  This complicates the definitions below.</p>
+
+<ul>
+  <li>Let the <dfn>rank</dfn> of an integer type be the integer conversion
+      rank defined in C99, with the added condition that the ranks form a
+      continuous sequence of integers.</li>
+  <li>Let <dfn><i>r</i><sub>int</sub></dfn> be the rank of
+      <code>int</code>.</li>
+  <li>Let <dfn><code>signed(<i>r</i>)</code></dfn> and
+      <dfn><code>unsigned(<i>r</i>)</code></dfn>
+      be the signed integer type and unsigned integer type with rank
+      <i>r</i>.</li>
+</ul>
+
+<p>Integers promote upward to floating-point types.  Let <i>SMax</i> be the
+highest ranking signed integer type, and let <i>UMax</i> be the highest
+ranking unsigned integer type.  Then Cforall would define</p>
+
+<pre>
+Promoter(float, <i>SMax</i>);
+Promoter(float, <i>Umax</i>);
+</pre>
+
+<p>Signed types promote across to unsigned types with the same rank.  For
+every <i>r</i> &gt;= <i>r</i><sub>int</sub> such that
+<code>signed(<i>r</i>)</code> exists, Cforall would define</p>
+
+<pre>
+void (?promote)?( unsigned(<i>r</i>)*, signed(<i>r</i>) );
+</pre>
+
+<p>Lower-ranking signed integers promote to higher-ranking signed integers.
+For every signed integer type <i>T</i> with rank greater than
+<i>r</i><sub>int</sub>, let <i>S</i> be the signed integer type with the
+next lowest rank.  Then Cforall would define</p>
+
+<pre>
+Promoter(<i>T</i>, <i>S</i>);
+</pre>
+
+<p>Similarly, lower-ranking unsigned integers promote to higher-ranking
+unsigned integers.  For every <i>r</i> &gt; <i>r</i><sub>int</sub>, Cforall
+would define</p>
+
+<pre>
+Promoter(unsigned(<i>r</i>), unsigned(<i>r</i>-1));
+</pre>
+
+<p>C's usual arithmetic conversions may promote an unsigned type to a
+signed type, but only if the signed type can represent every value of the
+unsigned type.  For every <i>r</i> &gt;= <i>r</i><sub>int</sub>, if there
+are any signed types that can represent every value in
+<code>unsigned(<i>r</i>)</code>, let <i>S</i> be the
+lowest ranking of these types; then Cforall defines</p>
+
+<pre>
+Promoter(<i>S</i>, unsigned(<i>r</i>));
+</pre>
+
+<h3 id='intpromo'>C's "Integer Promotions"</h3>
+
+<div class='rationale'>
+
+<p>C's <dfn>integer promotions</dfn> apply to "small" types (those with
+rank less than <i>r</i><sub>int</sub>): they promote to <code>int</code> if
+<code>int</code> can hold all of their values, and to <code>unsigned
+int</code> otherwise.  At least one unsigned type, <code>_Bool</code>,
+will promote to <code>int</code>.  This breaks the pattern set by the usual
+arithmetic conversions, where unsigned types always promote to the next
+larger unsigned type.  Consider a machine with 32-bit <code>int</code>s and
+16-bit <code>unsigned short</code>s: if two <code>unsigned short</code>s
+are added, they must be promoted to <code>int</code> instead of
+<code>unsigned int</code>.  Hence for this machine there must <em>not</em>
+be a promotion from <code>unsigned short</code> to <code>unsigned
+int</code>.</p>
+
+<p>Since the C integer promotions always promote small signed types to
+<code>int</code>, Cforall would extend the chain of polymorphic "upward"
+and monomorphic "across" signed integer promotions to the small
+signed types.</p>
+</div>
+
+<p>For every signed integer type <i>S</i> with rank less than
+<i>r</i><sub>int</sub>, Cforall would define</p>
+<pre>
+Promoter(<i>T</i>, <i>S</i>);
+</pre>
+<p>where <i>T</i> is the signed integer type with the next highest
+rank.</p>
+
+<p>Let <i>r</i><sub>break</sub> be the rank of the highest-ranking unsigned
+type whose values can all be represented by <code>int</code>, and let
+<i>T</i> be the lowest-ranking signed type that can represent all of the
+values of <code>unsigned(<i>r</i><sub>break</sub>)</code>.  Cforall would
+define</p>
+
+<pre>
+Promoter(T, unsigned(<i>r</i><sub>break</sub>));
+</pre>
+
+<p>For every
+<i>r</i> less than <i>r</i><sub>int</sub> except
+<i>r</i><sub>break</sub>, Cforall would define</p>
+<pre>
+Promoter(unsigned(<i>r+1</i>), unsigned(<i>r</i>));
+</pre>
+
+<p class='rationale'><i>r</i><sub>break</sub> is the point where the normal
+pattern of unsigned promotion breaks.  Unsigned types with higher rank
+promote upward toward <code>unsigned int</code>.  Unsigned types with
+lower rank promote upward to the type at the break, which promotes upward
+to a signed type and onward toward <code>int</code>.</p>
+
+<p>For each <i>r</i> &lt; <i>r</i><sub>int</sub> such that
+<code>signed(<i>r</i>)</code> exists, Cforall would define</p>
+<pre>
+void (?promote)?(unsigned(<i>r</i>)*, signed(<i>r</i>));
+</pre>
+
+<p class='rationale'>These "across" promotions are not strictly necessary,
+but it seems useful to extend the pattern of signed-to-unsigned monomorphic
+conversions established by the larger integer types.  Note that because of
+these promotions, <code>unsigned(<i>r</i><sub>break</sub>)</code> does
+promote to the next larger unsigned type, after a detour through a signed
+type that increases the conversion cost.</p>
+
+<p>Finally, <code>char</code> is equivalent to <code>signed char</code> or
+<code>unsigned char</code>, on an implementation-defined basis.  If
+<code>char</code> is equivalent to <code>signed char</code>, the
+implementation would define</p>
+
+<pre>
+Promoter(signed char, char);
+</pre>
+
+<p>Otherwise, it would define</p>
+<pre>
+Promoter(unsigned char, char);
+</pre>
+
+<h2 id="otherpromo">Other Promotions</h2>
+<p>Promotions can add qualifiers to the pointed-to type of a
+pointer type.</p>
+<pre>
+forall(dtype DT) void (?promote)?(const DT**, DT*);
+forall(dtype DT) void (?promote)?(volatile DT**, DT*);
+forall(dtype DT) void (?promote)?(restrict DT**, DT*);
+forall(dtype DT) void (?promote)?(const volatile DT**, DT*);
+forall(dtype DT) void (?promote)?(const restrict DT**, DT*);
+forall(dtype DT) void (?promote)?(volatile restrict DT**, DT*);
+forall(dtype DT) void (?promote)?(const volatile restrict DT**, DT*);
+
+forall(dtype DT) void (?promote)?(const volatile DT**, const DT*);
+forall(dtype DT) void (?promote)?(const restrict DT**, const DT*);
+forall(dtype DT) void (?promote)?(const volatile restrict DT**, const DT*);
+
+forall(dtype DT) void (?promote)?(const volatile DT**, volatile DT*);
+forall(dtype DT) void (?promote)?(volatile restrict DT**, volatile DT*);
+forall(dtype DT) void (?promote)?(const volatile restrict DT**, volatile DT*);
+
+forall(dtype DT) void (?promote)?(const restrict DT**, restrict DT*);
+forall(dtype DT) void (?promote)?(volatile restrict DT**, restrict DT*);
+forall(dtype DT) void (?promote)?(const volatile restrict DT**, restrict
+DT*);
+
+forall(dtype DT) void (?promote)?(const volatile restrict DT**, const volatile DT);
+forall(dtype DT) void (?promote)?(const volatile restrict DT**, const restrict DT);
+forall(dtype DT) void (?promote)?(const volatile restrict DT**, volatile restrict DT);
+</pre>
+
+<p class='rationale'> The type qualifier promotions are simple, but verbose
+because Cforall doesn't abstract over type qualifiers very well.  They also
+give <em>every</em> type qualifier promotion a cost of 1.  It is possible
+to define a smaller set of promotions, some using the constructor idiom,
+that gives greater cost to promotions that add more qualifiers, but the set
+is arbitrary and asymmetric: only one of the three promotions that add one
+qualifier to an unqualified pointer type can use the constructor idiom, or
+else ambiguity results.</p>
+
+<p>Within the scope of a type definition <code>type <i>T1</i> =
+<i>T2</i>;</code>, constructors would convert between the new type and its
+implementation type.</p>
+
+<pre>
+void (?promote)(<i>T2</i>*, <i>T1</i>);
+void (?promote)(<i>T2</i>**, <i>T1</i>*);
+void (?create)?(<i>T1</i>*, <i>T2</i>);
+void (?create)?(<i>T1</i>**, <i>T2</i>*);
+</pre>
+
+<p class='rationale'>The conversion from the implementation type
+<code><i>T2</i></code> to the new type <code><i>T1</i></code> gives
+functions that implement operations on <code><i>T1</i></code> access to the
+type's implementation.  The conversion is a promotion because most such
+functions work with the implementation most of the time.  The reverse
+conversion is merely implicit, so that mixed operations won't be
+ambiguous.</p>
+
+<h2 id="demotions">Other Pre-Defined Implicit Conversions</h2>
+<h3>Arithmetic Conversions</h3>
+
+<p class='rationale'>C defines implicit conversions between any two
+arithmetic types.  In Cforall terms, the conversions that are not
+promotions are ordinary conversions.  Most of the ordinary conversions
+follow a pattern that looks like the <a href='#usual'>Usual Arithmetic
+Conversions</a> in reverse.  Once again, I will use a macro to hide details
+of the constructor idiom.</p>
+
+<pre>
+#define Creator(Target, Source) \
+  forall(type T | void (?create)?(T*, Target)) void (?create)?(T*, Source)
+
+Creator(double _Complex, long double _Complex);
+Creator(float _Complex,  double _Complex);
+Creator(double, long double);
+Creator(float,  double);
+Creator(double _Imaginary, long double _Imaginary);
+Creator(float _Imaginary,  double _Imaginary);
+
+void (?create)?(long double*,            long double _Complex);
+void (?create)?(long double _Imaginary*, long double _Complex);
+void (?create)?(double*,            double _Complex);
+void (?create)?(double _Imaginary*, double _Complex);
+void (?create)?(float*,            float _Complex);
+void (?create)?(float _Imaginary*, float _Complex);
+</pre>
+
+<p class='rationale'>The C99 draft standards that I have access to state
+that real types and imaginary types are implicitly interconvertible.  This
+seems like a mistake, since the result of the conversion will always be
+zero, but ...</p>
+
+<pre>
+void (?create)?(long double*, long double _Imaginary);
+void (?create)?(long double _Imaginary*, long double);
+void (?create)?(double*, double _Imaginary);
+void (?create)?(double _Imaginary*, double);
+void (?create)?(float*, float _Imaginary);
+void (?create)?(float _Imaginary*, float);
+</pre>
+
+<p>Let <i>SMax</i> be the highest ranking signed integer type, and let
+<i>UMax</i> be the highest ranking unsigned integer type.  Then Cforall
+would define</p>
+
+<pre>
+Creator(<i>SMax</i>, float);
+Creator(<i>SMax</i>, float _Complex);
+Creator(<i>SMax</i>, float _Imaginary);
+Creator(<i>UMax</i>, float);
+Creator(<i>UMax</i>, float _Complex);
+Creator(<i>UMax</i>, float _Imaginary);
+</pre>
+
+<p>For every signed integer type <i>T</i> with rank greater than that of
+<code>signed char</code>, Cforall would define</p>
+
+<pre>
+Creator(<i>S</i>, <i>T</i>);
+</pre>
+<p>where <i>S</i> is the signed integer type with the next lowest rank.</p>
+
+<p>For every rank <i>r</i> greater than the rank of <code>_Bool</code>,
+Cforall would define</p>
+
+<pre>
+Creator(unsigned(<i>r</i>-1), unsigned(<i>r</i>));
+</pre>
+
+<p>For every rank <i>r</i> such that <code>signed(<i>r</i>)</code> exists,
+Cforall would define</p>
+
+<pre>
+void (?create)?( signed(<i>r</i>)*, unsigned(<i>r</i>) );
+</pre>
+
+<p><code>char</code> and <code>_Bool</code> are interconvertible.</p>
+<pre>
+void (?create)?(char*, _Bool);
+void (?create)?(_Bool*, char);
+</pre>
+
+<p>If <code>char</code> is equivalent to <code>signed char</code>, the
+implementation would define</p>
+
+<pre>
+Creator(char, signed char);
+void (?create)?(char*, unsigned char);
+</pre>
+
+<p>Otherwise, the implementation would define</p>
+<pre>
+Creator(char, unsigned char);
+void (?create)?(char*, signed char);
+void (?create)?(_Bool*, signed char);
+void (?create)?(signed char*, _Bool);
+</pre>
+
+<h3>Pointer conversions</h3>
+
+<p>Pointer types are implicitly interconvertible with pointers to void,
+provided that the target type has all of the qualifiers of the source
+type.</p>
+
+<pre>
+forall(dtype SourceType,
+       type QVPtr | void (?promote)?(QVPtr*, void*))
+  void (?create)?(QVPtr*, SourceType*);
+</pre>
+
+<p class='rationale'>This conversion uses the constructor idiom, but note
+that the assertion parameter is a promotion even though the conversion
+itself is not a promotion.  My intent is that the assertion parameter will
+be bound to a promotion that adds <a href='#otherpromo'>type qualifiers</a>
+to a pointer type.  A conversion from <code>int*</code> to <code>const
+void*</code> would bind <code>SourceType</code> to <code>int</code>,
+<code>QVPtr</code> to <code>const void*</code>, and the assertion parameter
+to a promotion from <code>void*</code> to <code>const void*</code> (which
+is a specialization of one of the polymorphic type qualifier promotions
+given above).  Because of this composition of pointer conversions, I don't
+have to define conversions for every combination of type qualifiers on the
+target type.  I do have to handle all combinations of qualifiers on the
+source type:</p>
+
+<pre>
+forall(dtype SourceType,
+       type QVPtr | void (?promote)?(QVPtr*, const void*))
+  void (?create)?(QVPtr*, const SourceType*);
+forall(dtype SourceType,
+       type QVPtr | void (?promote)?(QVPtr*, volatile void*))
+  void (?create)?(QVPtr*, volatile SourceType*);
+forall(dtype SourceType,
+       type QVPtr | void (?promote)?(QVPtr*, restrict void*))
+  void (?create)?(QVPtr*, restrict SourceType*);
+forall(dtype SourceType,
+       type QVPtr | void (?promote)?(QVPtr*, const volatile void*))
+  void (?create)?(QVPtr*, const volatile SourceType*);
+forall(dtype SourceType,
+       type QVPtr | void (?promote)?(QVPtr*, const restrict void*))
+  void (?create)?(QVPtr*, const restrict SourceType*);
+forall(dtype SourceType,
+       type QVPtr | void (?promote)?(QVPtr*, volatile restrict void*))
+  void (?create)?(QVPtr*, volatile restrict SourceType*);
+forall(dtype SourceType,
+       type QVPtr | void (?promote)?(QVPtr*, const volatile restrict void*))
+  void (?create)?(QVPtr*, const volatile restrict SourceType*);
+
+forall(type QTPtr,
+       dtype TargetType | void (?promote)?(QTPtr*, TargetType*)
+  void (?create)?(QTPtr*, void*);
+forall(type QTPtr,
+       dtype TargetType | void (?promote)?(QTPtr*, const TargetType*)
+  void (?create)?(QTPtr*, const void*);
+forall(type QTPtr,
+       dtype TargetType | void (?promote)?(QTPtr*, volatile TargetType*)
+  void (?create)?(QTPtr*, volatile void*);
+forall(type QTPtr,
+       dtype TargetType | void (?promote)?(QTPtr*, restrict TargetType*)
+  void (?create)?(QTPtr*, restrict void*);
+forall(type QTPtr,
+       dtype TargetType | void (?promote)?(QTPtr*, const volatile TargetType*)
+  void (?create)?(QTPtr*, const volatile void*);
+forall(type QTPtr,
+       dtype TargetType | void (?promote)?(QTPtr*, const restrict TargetType*)
+  void (?create)?(QTPtr*, const restrict void*);
+forall(type QTPtr,
+       dtype TargetType | void (?promote)?(QTPtr*, volatile restrict TargetType*)
+  void (?create)?(QTPtr*, volatile restrict void*);
+forall(type QTPtr,
+       dtype TargetType | void (?promote)?(QTPtr*, const volatile restrict TargetType*)
+  void (?create)?(QTPtr*, const volatile restrict void*);
+</pre>
+
+<h2 id="explicit">Pre-Defined Explicit Conversions</h2>
+<p>Function pointers are interconvertible.</p>
+<pre>
+forall(ftype FT1, ftype FT2, type T | FT1* (?)?(T) ) FT2* (?)?(FT1*);
+</pre>
+
+<p>Data pointers including pointers to <code>void</code> are
+interconvertible, regardless of type qualifiers.</p>
+
+<pre>
+forall(dtype DT1, dtype DT2) DT2*                (?)?(DT1*);
+forall(dtype DT1, dtype DT2) const DT2*          (?)?(DT1*);
+forall(dtype DT1, dtype DT2) volatile DT2*       (?)?(DT1*);
+forall(dtype DT1, dtype DT2) const volatile DT2* (?)?(DT1*);
+
+forall(dtype DT1, dtype DT2) DT2*                (?)?(const DT1*);
+forall(dtype DT1, dtype DT2) const DT2*          (?)?(const DT1*);
+forall(dtype DT1, dtype DT2) volatile DT2*       (?)?(const DT1*);
+forall(dtype DT1, dtype DT2) const volatile DT2* (?)?(const DT1*);
+
+forall(dtype DT1, dtype DT2) DT2*                (?)?(volatile DT*);
+forall(dtype DT1, dtype DT2) const DT2*          (?)?(volatile DT*);
+forall(dtype DT1, dtype DT2) volatile DT2*       (?)?(volatile DT*);
+forall(dtype DT1, dtype DT2) const volatile DT2* (?)?(volatile DT*);
+
+forall(dtype DT1, dtype DT2) DT2*                (?)?(const volatile DT*);
+forall(dtype DT1, dtype DT2) const DT2*          (?)?(const volatile DT*);
+forall(dtype DT1, dtype DT2) volatile DT2*       (?)?(const volatile DT*);
+forall(dtype DT1, dtype DT2) const volatile DT2* (?)?(const volatile DT*);
+</pre>
+
+<p>Integers and pointers are interconvertible.  For every integer type
+<i>I</i> define</p>
+<pre>
+forall(dtype DT, type T | <i>I</i> (?)?(T) ) DT* ?(?)(T);
+forall(ftype FT, type T | <i>I</i> (?)?(T) ) FT* ?(?)(T);
+
+forall(dtype DT, type T | DT* (?)?(T) ) <i>I</i> (?)?(T);
+forall(dtype DT, type T | DT* (?)?(T) ) <i>I</i> (?)?(T);
+</pre>
+
+<h2 id='nonconversions'>Non-Conversions</h2>
+<p>C99 has a few other "conversions" that don't fit into this proposal.
+Outside of some special circumstances (such as application of
+<code>sizeof</code>),</p>
+<ul>
+  <li>array lvalues "convert" to pointers</li>
+  <li>function designators "convert" to pointers to functions</li>
+  <li>non-array lvalues "convert" to plain values</li>
+  <li>bit fields undergo "integer promotion" to <code>int</code> or
+      <code>unsigned int</code> values.</li>
+</ul>
+
+<p>I'd like to stop calling these "conversions".  Perhaps they could be
+handled by some verbiage in the semantics of "Primary Expressions".</p>
+
+<p>Cforall-as-is provides "specialization", which reduces the number of
+type parameters or assertion parameters of a polymorphic object or
+function.  Specialization looks like a conversion -- it can happen
+implicitly or as a result of a cast -- but would no longer be considered to
+be a conversion.</p>
+
+<h2 id='assignment'>Assignment</h2>
+
+<p>Since extended Cforall separates conversion from assignment, it can
+simplify Cforall-as-is's set of assignment operators.  Implicit conversions
+can add type qualifiers to the target's type, and to the source's type in
+the case of pointer assignment.</p>
+
+<pre>
+char ?=?(volatile char*, char);
+char ?+=?(volatile char*, char);
+// <i>... and similarly for the rest of the basic types and</i>
+// <i>compound assignment operators.</i>
+</pre>
+<pre class='rationale'>
+char c;
+c = 'a';  // <i>=&gt; ?=?( &amp;c, 'a' );</i>
+          // <i>=&gt; ?=?( (volatile char*)&amp;c, 'a' );</i>
+</pre>
+
+<pre>
+// <i>Assignment between data pointers, where the target has all of</i>
+// <i>the qualifiers of the source.</i>
+forall(dtype DT)
+  DT* ?=?(DT* volatile restrict*, DT*);
+forall(dtype DT)
+  const DT* ?=?(const DT* volatile restrict*, const DT*);
+forall(dtype DT)
+  volatile DT* ?=?(volatile DT* volatile restrict*, volatile DT*);
+forall(dtype DT)
+  const volatile DT* ?=?(const volatile DT* volatile restrict*, const volatile DT*);
+
+// <i>Assignment to data pointers from </i>void<i>pointers.</i>
+forall(dtype DT) DT* ?=?(DT* volatile restrict*,  void*)
+forall(dtype DT)
+  const DT* ?=?(const DT* volatile restrict*, const void*);
+forall(dtype DT)
+  volatile DT* ?=?(volatile DT* volatile restrict*, volatile void*);
+forall(dtype DT)
+  const volatile DT* ?=?(const volatile DT* volatile restrict*, const volatile void*);
+
+// <i>Assignment to </i>void<i> pointers from data pointers.</i>
+forall(dtype DT)
+  void* ?=?(void* volatile restrict*, DT*);
+forall(dtype DT)
+  const void* ?=?(const void* volatile restrict*, const DT*);
+forall(dtype DT)
+  volatile void* ?=?(volatile void* volatile restrict*, volatile DT*);
+forall(dtype DT)
+  const volatile void* ?=?(const volatile void* volatile restrict*, const volatile DT*);
+
+// <i>Assignment from null pointers to other pointer types.</i>
+forall(dtype DT)
+  void* ?=?(void* volatile restrict*, forall(dtype DT2) const DT2*);
+forall(dtype DT)
+  const void* ?=?(const void* volatile restrict*, forall(dtype DT2) const DT2*);
+forall(dtype DT)
+  volatile void* ?=?(volatile void* volatile restrict*, forall(dtype DT2) const DT2*);
+forall(dtype DT)
+  const volatile void* ?=?(const volatile void* volatile restrict*, forall(dtype DT2) const DT2*);
+
+// <i>Function pointer assignment</i>
+forall(ftype FT) FT* ?=?(FT* volatile restrict*, FT*);
+forall(ftype FT) FT* ?=?(FT* volatile restrict*, forall(ftype FT2) FT2*);
+</pre>
+
+<div class='rationale'>
+
+<p>The difference, relative to Cforall-as-is, is that assignment operators
+come in one flavor (a pointer to a volatile value as the first operand)
+instead of two (a pointer to volatile in one case, a plain pointer in the
+other) or the four that <code>restrict</code> would have led to.</p>
+
+<p>However, to make this work, the type of <dfn>default assignment</dfn>
+functions must also change.  A declaration of a type <code>T</code> would
+implicitly declare</p> <pre> T ?=?(T volatile restrict*, T) </pre> </div>
+
+<h2 id='final'>Final Notes</h2>
+
+<p>The <a href='#idiom'>constructor idiom</a> is polymorphic in the
+object's type: an initial value of one particular type can initialize
+objects of many types.  The constructor that promotes a <code>Wazzit</code>
+into a <code>Thingum</code> is declared</p>
+
+<pre>
+forall(type T | void (?promote)?(T*, Thingum) )
+  void (?promote)?(T*, Wazzit);
+</pre>
+<p>("You can make a <code>Wazzit</code> into a <code>Thingum</code> and
+types higher in the hierarchy.")</p>
+
+<p>It would also be possible to use a constructor idiom where the object's
+type is fixed and the initial value's type is polymorphic:</p>
+
+<pre>
+forall(type T | void (?promote)?(Wazzit*, T) )
+  void (?promote)?(Thingum*, T);
+</pre>
+<p>("You can make a <code>Thingum</code> from a <code>Wazzit</code> and
+types lower in the hierarchy.")</p>
+
+<p>The "polymorphic value" idiom has the advantage that it is fairly
+obvious that the function is a constructor for type <code>Thingum</code>.
+In the "polymorphic object" idiom, <code>Thingum</code> is buried in the
+assertion parameter.</p>
+
+<p>However, I chose the "polymorphic object" idiom because it matches C's
+semantics for signed-to-unsigned integer conversions.  In the "polymorphic
+object" idiom, the natural way to write the polymorphic promoter from
+<code>int</code> to larger types is 
+</p>
+
+<pre>
+forall(type T | void (?promote)?(T*, long) )
+  void (?promote)?(T* tp, int i) {
+    long l = i;
+    *tp = (T)l;    // <i>calls the assertion parameter.</i>
+    }
+</pre>
+
+<p>Now consider the case of a CPU with 16-bit <code>int</code>s, where we
+need to convert an <code>int</code> value <code>-1</code> to a 32-bit
+<code>unsigned long</code>.  The assertion parameter will be bound to the
+monomorphic <code>long</code>-to-<code>unsigned long</code> promoter.  The
+function body above converts the <code>int</code> -1 to a <code>long</code>
+-1, and then uses the assertion parameter to convert the result to the
+correct <code>unsigned long</code> value: 4,294,967,295.</p>
+
+<p>In the "polymorphic value" idiom, the conversion would be done by
+calling the polymorphic promoter to <code>unsigned long</code> from smaller
+types:</p>
+
+<pre>
+forall(type T | void (?promote)?(unsigned*, T) )
+  void (?promote)?(unsigned long* ulp, T t) {
+    unsigned u = t;    // <i>calls the assertion parameter.</i>
+    *ulp = u;
+    }
+</pre>
+
+<p>This time the assertion parameter will be bound to the
+<code>int</code>-to-<code>unsigned</code> promoter.  The function body uses
+the assertion parameter to convert the integer -1 to <code>unsigned</code>
+65,565, and then converts the result to the incorrect <code>unsigned
+long</code> value 65,535.</p>
+
+<p>Clearly the "polymorphic value" idiom would require the implementation
+to do some unnatural, and probably implementation-dependent, bit mangling
+to get the right answer.  Of course, an implementation is allowed to
+perform any unnatural acts it chooses.  But programmers would have to
+conform to the prevailing constructor idiom when writing their
+constructors, and will want to write natural and portable code.</p>
+
+<!--
+Multi-argument constructors and {...} notation.  Default and keyword
+parameters?
+
+mutable.
+
+Automating implementation-dependent promotion, so new types can fit in
+easily.
+
+Cast has no cost; implicit construction does.
+
+Allow instantiation of dtype/incomplete type if the type has a constructor? 
+The problem is space allocation: constructors would have to allocate space,
+which would interfere with their use in dynamic allocation.
+
+generic function that treates promoters as creators might cause loops when
+chaining creators.
+
+-->
+</body>
+</html>
Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/CodeGen/CodeGenerator.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -133,8 +133,8 @@
 		output << "__attribute__ ((";
 		for ( list< Attribute * >::iterator attr( attributes.begin() );; ) {
-			output << (*attr)->get_name();
-			if ( ! (*attr)->get_parameters().empty() ) {
+			output << (*attr)->name;
+			if ( ! (*attr)->parameters.empty() ) {
 				output << "(";
-				genCommaList( (*attr)->get_parameters().begin(), (*attr)->get_parameters().end() );
+				genCommaList( (*attr)->parameters.begin(), (*attr)->parameters.end() );
 				output << ")";
 			} // if
@@ -172,4 +172,6 @@
 	// *** Declarations
 	void CodeGenerator::postvisit( FunctionDecl * functionDecl ) {
+		// deleted decls should never be used, so don't print them
+		if ( functionDecl->isDeleted && genC ) return;
 		extension( functionDecl );
 		genAttributes( functionDecl->get_attributes() );
@@ -185,7 +187,12 @@
 			functionDecl->get_statements()->accept( *visitor );
 		} // if
+		if ( functionDecl->isDeleted ) {
+			output << " = void";
+		}
 	}
 
 	void CodeGenerator::postvisit( ObjectDecl * objectDecl ) {
+		// deleted decls should never be used, so don't print them
+		if ( objectDecl->isDeleted && genC ) return;
 		if (objectDecl->get_name().empty() && genC ) {
 			// only generate an anonymous name when generating C code, otherwise it clutters the output too much
@@ -206,4 +213,7 @@
 			objectDecl->get_init()->accept( *visitor );
 		} // if
+		if ( objectDecl->isDeleted ) {
+			output << " = void";
+		}
 
 		if ( objectDecl->get_bitfieldWidth() ) {
@@ -827,4 +837,32 @@
 		expr->expr->accept( *visitor );
 	}
+
+	void CodeGenerator::postvisit( DefaultArgExpr * arg ) {
+		assertf( ! genC, "Default argument expressions should not reach code generation." );
+		arg->expr->accept( *visitor );
+	}
+
+	void CodeGenerator::postvisit( GenericExpr * expr ) {
+		assertf( ! genC, "C11 _Generic expressions should not reach code generation." );
+		output << "_Generic(";
+		expr->control->accept( *visitor );
+		output << ", ";
+		unsigned int numAssocs = expr->associations.size();
+		unsigned int i = 0;
+		for ( GenericExpr::Association & assoc : expr->associations ) {
+			if (assoc.isDefault) {
+				output << "default: ";
+			} else {
+				output << genType( assoc.type, "", pretty, genC ) << ": ";
+			}
+			assoc.expr->accept( *visitor );
+			if ( i+1 != numAssocs ) {
+				output << ", ";
+			}
+			i++;
+		}
+		output << ")";
+	}
+
 
 	// *** Statements
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/CodeGen/CodeGenerator.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -94,4 +94,6 @@
 		void postvisit( ConstructorExpr * );
 		void postvisit( DeletedExpr * );
+		void postvisit( DefaultArgExpr * );
+		void postvisit( GenericExpr * );
 
 		//*** Statements
Index: src/Common/Debug.h
===================================================================
--- src/Common/Debug.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Common/Debug.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -28,5 +28,5 @@
 namespace Debug {
 	/// debug codegen a translation unit
-	static inline void codeGen( __attribute__((unused)) const std::list< Declaration * > & translationUnit, __attribute__((unused)) const std::string & label, __attribute__((unused)) LinkageSpec::Spec linkageFilter = LinkageSpec::Compiler ) {
+	static inline void codeGen( __attribute__((unused)) const std::list< Declaration * > & translationUnit, __attribute__((unused)) const std::string & label, __attribute__((unused)) LinkageSpec::Spec linkageFilter = LinkageSpec::Builtin ) {
 	#ifdef DEBUG
 		std::list< Declaration * > decls;
Index: src/Common/PassVisitor.h
===================================================================
--- src/Common/PassVisitor.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Common/PassVisitor.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -125,4 +125,6 @@
 	virtual void visit( InitExpr *  initExpr ) override final;
 	virtual void visit( DeletedExpr *  delExpr ) override final;
+	virtual void visit( DefaultArgExpr * argExpr ) override final;
+	virtual void visit( GenericExpr * genExpr ) override final;
 
 	virtual void visit( VoidType * basicType ) override final;
@@ -225,4 +227,6 @@
 	virtual Expression * mutate( InitExpr *  initExpr ) override final;
 	virtual Expression * mutate( DeletedExpr *  delExpr ) override final;
+	virtual Expression * mutate( DefaultArgExpr * argExpr ) override final;
+	virtual Expression * mutate( GenericExpr * genExpr ) override final;
 
 	virtual Type * mutate( VoidType * basicType ) override final;
@@ -258,4 +262,6 @@
 
 private:
+	bool inFunction = false;
+
 	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 );
@@ -313,5 +319,5 @@
 	void indexerAddUnionFwd ( UnionDecl                 * node  ) { indexer_impl_addUnionFwd ( pass, 0, node ); }
 	void indexerAddTrait    ( TraitDecl                 * node  ) { indexer_impl_addTrait    ( pass, 0, node ); }
-	void indexerAddWith     ( std::list< Expression * > & exprs, BaseSyntaxNode * withStmt ) { indexer_impl_addWith     ( pass, 0, exprs, withStmt ); }
+	void indexerAddWith     ( std::list< Expression * > & exprs, BaseSyntaxNode * withStmt ) { indexer_impl_addWith( pass, 0, exprs, withStmt ); }
 
 
Index: src/Common/PassVisitor.impl.h
===================================================================
--- src/Common/PassVisitor.impl.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Common/PassVisitor.impl.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -404,4 +404,8 @@
 			indexerAddId( func );
 			maybeAccept_impl( node->type, *this );
+			// function body needs to have the same scope as parameters - CompoundStmt will not enter
+			// a new scope if inFunction is true
+			ValueGuard< bool > oldInFunction( inFunction );
+			inFunction = true;
 			maybeAccept_impl( node->statements, *this );
 			maybeAccept_impl( node->attributes, *this );
@@ -434,4 +438,8 @@
 			indexerAddId( func );
 			maybeMutate_impl( node->type, *this );
+			// function body needs to have the same scope as parameters - CompoundStmt will not enter
+			// a new scope if inFunction is true
+			ValueGuard< bool > oldInFunction( inFunction );
+			inFunction = true;
 			maybeMutate_impl( node->statements, *this );
 			maybeMutate_impl( node->attributes, *this );
@@ -712,6 +720,9 @@
 	VISIT_START( node );
 	{
-		auto guard1 = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
+		// do not enter a new scope if inFunction is true - needs to check old state before the assignment
+		ValueGuard< bool > oldInFunction( inFunction );
+		auto guard1 = makeFuncGuard( [this, &oldInFunction]() { if ( ! oldInFunction.old ) indexerScopeEnter(); }, [this, &oldInFunction]() { if ( ! oldInFunction.old ) indexerScopeLeave(); } );
 		auto guard2 = makeFuncGuard( [this]() { call_beginScope();   }, [this]() { call_endScope();     } );
+		inFunction = false;
 		visitStatementList( node->kids );
 	}
@@ -723,6 +734,9 @@
 	MUTATE_START( node );
 	{
-		auto guard1 = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
+		// do not enter a new scope if inFunction is true - needs to check old state before the assignment
+		ValueGuard< bool > oldInFunction( inFunction );
+		auto guard1 = makeFuncGuard( [this, &oldInFunction]() { if ( ! oldInFunction.old ) indexerScopeEnter(); }, [this, &oldInFunction]() { if ( ! oldInFunction.old ) indexerScopeLeave(); } );
 		auto guard2 = makeFuncGuard( [this]() { call_beginScope();   }, [this]() { call_endScope();     } );
+		inFunction = false;
 		mutateStatementList( node->kids );
 	}
@@ -828,6 +842,11 @@
 	VISIT_START( node );
 
-	visitExpression( node->condition );
-	node->body = visitStatement( node->body );
+	{
+		// while statements introduce a level of scope (for the initialization)
+		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
+		maybeAccept_impl( node->initialization, *this );
+		visitExpression ( node->condition );
+		node->body = visitStatement( node->body );
+	}
 
 	VISIT_END( node );
@@ -838,6 +857,12 @@
 	MUTATE_START( node );
 
-	node->condition = mutateExpression( node->condition );
-	node->body      = mutateStatement ( node->body      );
+	{
+		// while statements introduce a level of scope (for the initialization)
+		auto guard = makeFuncGuard( [this]() { indexerScopeEnter(); }, [this]() { indexerScopeLeave(); } );
+		maybeMutate_impl( node->initialization, *this );
+		node->condition = mutateExpression( node->condition );
+		node->body      = mutateStatement ( node->body      );
+	}
+
 
 	MUTATE_END( Statement, node );
@@ -2074,4 +2099,58 @@
 
 //--------------------------------------------------------------------------
+// DefaultArgExpr
+template< typename pass_type >
+void PassVisitor< pass_type >::visit( DefaultArgExpr * node ) {
+	VISIT_START( node );
+
+	indexerScopedAccept( node->result, *this );
+	maybeAccept_impl( node->expr, *this );
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Expression * PassVisitor< pass_type >::mutate( DefaultArgExpr * node ) {
+	MUTATE_START( node );
+
+	indexerScopedMutate( node->env, *this );
+	indexerScopedMutate( node->result, *this );
+	maybeMutate_impl( node->expr, *this );
+
+	MUTATE_END( Expression, node );
+}
+
+//--------------------------------------------------------------------------
+// GenericExpr
+template< typename pass_type >
+void PassVisitor< pass_type >::visit( GenericExpr * node ) {
+	VISIT_START( node );
+
+	indexerScopedAccept( node->result, *this );
+	maybeAccept_impl( node->control, *this );
+	for ( GenericExpr::Association & assoc : node->associations ) {
+		indexerScopedAccept( assoc.type, *this );
+		maybeAccept_impl( assoc.expr, *this );
+	}
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Expression * PassVisitor< pass_type >::mutate( GenericExpr * node ) {
+	MUTATE_START( node );
+
+	indexerScopedMutate( node->env, *this );
+	indexerScopedMutate( node->result, *this );
+	maybeMutate_impl( node->control, *this );
+	for ( GenericExpr::Association & assoc : node->associations ) {
+		indexerScopedMutate( assoc.type, *this );
+		maybeMutate_impl( assoc.expr, *this );
+	}
+
+	MUTATE_END( Expression, node );
+}
+
+//--------------------------------------------------------------------------
 // VoidType
 template< typename pass_type >
Index: src/Common/SemanticError.cc
===================================================================
--- src/Common/SemanticError.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Common/SemanticError.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 16 15:01:20 2018
-// Update Count     : 9
+// Last Modified On : Thu Jun  7 08:05:26 2018
+// Update Count     : 10
 //
 
@@ -97,5 +97,5 @@
 void SemanticError( CodeLocation location, std::string error ) {
 	SemanticErrorThrow = true;
-	throw SemanticErrorException(location, error);
+	throw SemanticErrorException( location, error );
 }
 
Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Concurrency/Keywords.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -192,5 +192,5 @@
 		void postvisit(   StructDecl * decl );
 
-		std::list<DeclarationWithType*> findMutexArgs( FunctionDecl* );
+		std::list<DeclarationWithType*> findMutexArgs( FunctionDecl*, bool & first );
 		void validate( DeclarationWithType * );
 		void addDtorStatments( FunctionDecl* func, CompoundStmt *, const std::list<DeclarationWithType * > &);
@@ -431,23 +431,54 @@
 	void MutexKeyword::postvisit(FunctionDecl* decl) {
 
-		std::list<DeclarationWithType*> mutexArgs = findMutexArgs( decl );
-		if( mutexArgs.empty() ) return;
-
-		if( CodeGen::isConstructor(decl->name) ) SemanticError( decl, "constructors cannot have mutex parameters" );
-
+		bool first = false;
+		std::list<DeclarationWithType*> mutexArgs = findMutexArgs( decl, first );
 		bool isDtor = CodeGen::isDestructor( decl->name );
 
+		// Is this function relevant to monitors
+		if( mutexArgs.empty() ) {
+			// If this is the destructor for a monitor it must be mutex
+			if(isDtor) {
+				Type* ty = decl->get_functionType()->get_parameters().front()->get_type();
+
+				// If it's a copy, it's not a mutex
+				ReferenceType* rty = dynamic_cast< ReferenceType * >( ty );
+				if( ! rty ) return;
+
+				// If we are not pointing directly to a type, it's not a mutex
+				Type* base = rty->get_base();
+				if( dynamic_cast< ReferenceType * >( base ) ) return;
+				if( dynamic_cast< PointerType * >( base ) ) return;
+
+				// Check if its a struct
+				StructInstType * baseStruct = dynamic_cast< StructInstType * >( base );
+				if( !baseStruct ) return;
+
+				// Check if its a monitor
+				if(baseStruct->baseStruct->is_monitor() || baseStruct->baseStruct->is_thread())
+					SemanticError( decl, "destructors for structures declared as \"monitor\" must use mutex parameters\n" );
+			}
+			return;
+		}
+
+		// Monitors can't be constructed with mutual exclusion
+		if( CodeGen::isConstructor(decl->name) && !first ) SemanticError( decl, "constructors cannot have mutex parameters" );
+
+		// It makes no sense to have multiple mutex parameters for the destructor
 		if( isDtor && mutexArgs.size() != 1 ) SemanticError( decl, "destructors can only have 1 mutex argument" );
 
+		// Make sure all the mutex arguments are monitors
 		for(auto arg : mutexArgs) {
 			validate( arg );
 		}
 
+		// Check if we need to instrument the body
 		CompoundStmt* body = decl->get_statements();
 		if( ! body ) return;
 
+		// Do we have the required headers
 		if( !monitor_decl || !guard_decl || !dtor_guard_decl )
-			SemanticError( decl, "mutex keyword requires monitors to be in scope, add #include <monitor>" );
-
+			SemanticError( decl, "mutex keyword requires monitors to be in scope, add #include <monitor>\n" );
+
+		// Instrument the body
 		if( isDtor ) {
 			addDtorStatments( decl, body, mutexArgs );
@@ -474,11 +505,15 @@
 	}
 
-	std::list<DeclarationWithType*> MutexKeyword::findMutexArgs( FunctionDecl* decl ) {
+	std::list<DeclarationWithType*> MutexKeyword::findMutexArgs( FunctionDecl* decl, bool & first ) {
 		std::list<DeclarationWithType*> mutexArgs;
 
+		bool once = true;
 		for( auto arg : decl->get_functionType()->get_parameters()) {
 			//Find mutex arguments
 			Type* ty = arg->get_type();
 			if( ! ty->get_mutex() ) continue;
+
+			if(once) {first = true;}
+			once = false;
 
 			//Append it to the list
Index: src/ControlStruct/ForExprMutator.cc
===================================================================
--- src/ControlStruct/ForExprMutator.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ControlStruct/ForExprMutator.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -45,4 +45,7 @@
 		return hoist( forStmt, forStmt->initialization );
 	}
+	Statement *ForExprMutator::postmutate( WhileStmt *whileStmt ) {
+		return hoist( whileStmt, whileStmt->initialization );
+	}
 } // namespace ControlStruct
 
Index: src/ControlStruct/ForExprMutator.h
===================================================================
--- src/ControlStruct/ForExprMutator.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ControlStruct/ForExprMutator.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -18,4 +18,5 @@
 class IfStmt;
 class ForStmt;
+class WhileStmt;
 class Statement;
 
@@ -25,4 +26,5 @@
 		Statement *postmutate( IfStmt * );
 		Statement *postmutate( ForStmt * );
+		Statement *postmutate( WhileStmt * );
 	};
 } // namespace ControlStruct
Index: src/ControlStruct/Mutate.cc
===================================================================
--- src/ControlStruct/Mutate.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ControlStruct/Mutate.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -27,16 +27,13 @@
 #include "SynTree/Visitor.h"       // for acceptAll
 
-using namespace std;
+namespace ControlStruct {
+	void fixLabels( std::list< Declaration * > & translationUnit ) {
+		PassVisitor<LabelFixer> lfix;
+		acceptAll( translationUnit, lfix );
+	}
 
-namespace ControlStruct {
-	void mutate( std::list< Declaration * > translationUnit ) {
-		// hoist initialization out of for statements
+	void hoistControlDecls( std::list< Declaration * > & translationUnit ) {
 		PassVisitor<ForExprMutator> formut;
-
-		// normalizes label definitions and generates multi-level exit labels
-		PassVisitor<LabelFixer> lfix;
-
 		mutateAll( translationUnit, formut );
-		acceptAll( translationUnit, lfix );
 	}
 } // namespace CodeGen
Index: src/ControlStruct/Mutate.h
===================================================================
--- src/ControlStruct/Mutate.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ControlStruct/Mutate.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// Mutate.h -- 
+// Mutate.h --
 //
 // Author           : Rodolfo G. Esteves
@@ -20,7 +20,11 @@
 class Declaration;
 
+/// Desugars Cforall control structures
 namespace ControlStruct {
-	/// Desugars Cforall control structures
-	void mutate( std::list< Declaration* > translationUnit );
+	/// normalizes label definitions and generates multi-level exit labels
+	void fixLabels( std::list< Declaration * > & translationUnit );
+
+	/// hoist initialization out of for statements
+	void hoistControlDecls( std::list< Declaration * > & translationUnit );
 } // namespace ControlStruct
 
Index: src/GenPoly/Lvalue.cc
===================================================================
--- src/GenPoly/Lvalue.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/GenPoly/Lvalue.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -145,16 +145,14 @@
 
 	namespace {
-		// true for intrinsic function calls that return a reference
+		// true for intrinsic function calls that return an lvalue in C
 		bool isIntrinsicReference( Expression * expr ) {
+			// known intrinsic-reference prelude functions
+			static std::set<std::string> lvalueFunctions = { "*?", "?[?]" };
 			if ( UntypedExpr * untyped = dynamic_cast< UntypedExpr * >( expr ) ) {
 				std::string fname = InitTweak::getFunctionName( untyped );
-				// known intrinsic-reference prelude functions
-				return fname == "*?" || fname == "?[?]";
+				return lvalueFunctions.count(fname);
 			} else if ( ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * > ( expr ) ) {
 				if ( DeclarationWithType * func = InitTweak::getFunction( appExpr ) ) {
-					// use type of return variable rather than expr result type, since it may have been changed to a pointer type
-					FunctionType * ftype = GenPoly::getFunctionType( func->get_type() );
-					Type * ret = ftype->returnVals.empty() ? nullptr : ftype->returnVals.front()->get_type();
-					return func->linkage == LinkageSpec::Intrinsic && dynamic_cast<ReferenceType *>( ret );
+					return func->linkage == LinkageSpec::Intrinsic && lvalueFunctions.count(func->name);
 				}
 			}
@@ -210,5 +208,5 @@
 						// TODO: it's likely that the second condition should be ... && ! isIntrinsicReference( arg ), but this requires investigation.
 
-						if ( function->get_linkage() != LinkageSpec::Intrinsic && isIntrinsicReference( arg ) ) {
+						if ( function->linkage != LinkageSpec::Intrinsic && isIntrinsicReference( arg ) ) {
 							// needed for definition of prelude functions, etc.
 							// if argument is dereference or array subscript, the result isn't REALLY a reference, but non-intrinsic functions expect a reference: take address
@@ -226,5 +224,5 @@
 							arg = new AddressExpr( arg );
 						// } else if ( function->get_linkage() == LinkageSpec::Intrinsic && InitTweak::getPointerBase( arg->result ) ) {
-						} else if ( function->get_linkage() == LinkageSpec::Intrinsic && arg->result->referenceDepth() != 0 ) {
+						} else if ( function->linkage == LinkageSpec::Intrinsic && arg->result->referenceDepth() != 0 ) {
 							// argument is a 'real' reference, but function expects a C lvalue: add a dereference to the reference-typed argument
 							PRINT(
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Parser/DeclarationNode.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue May 22 08:39:29 2018
-// Update Count     : 1074
+// Last Modified On : Thu Jun  7 12:08:55 2018
+// Update Count     : 1079
 //
 
@@ -173,5 +173,5 @@
 }
 
-DeclarationNode * DeclarationNode::newFunction( string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body ) {
+DeclarationNode * DeclarationNode::newFunction( const string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->name = name;
@@ -244,5 +244,5 @@
 } // DeclarationNode::newForall
 
-DeclarationNode * DeclarationNode::newFromTypedef( string * name ) {
+DeclarationNode * DeclarationNode::newFromTypedef( const string * name ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::SymbolicInst );
@@ -267,5 +267,5 @@
 } // DeclarationNode::newAggregate
 
-DeclarationNode * DeclarationNode::newEnum( string * name, DeclarationNode * constants, bool body ) {
+DeclarationNode * DeclarationNode::newEnum( const string * name, DeclarationNode * constants, bool body ) {
 	assert( name );
 	DeclarationNode * newnode = new DeclarationNode;
@@ -277,5 +277,5 @@
 } // DeclarationNode::newEnum
 
-DeclarationNode * DeclarationNode::newEnumConstant( string * name, ExpressionNode * constant ) {
+DeclarationNode * DeclarationNode::newEnumConstant( const string * name, ExpressionNode * constant ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->name = name;
@@ -284,5 +284,5 @@
 } // DeclarationNode::newEnumConstant
 
-DeclarationNode * DeclarationNode::newName( string * name ) {
+DeclarationNode * DeclarationNode::newName( const string * name ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->name = name;
@@ -290,5 +290,5 @@
 } // DeclarationNode::newName
 
-DeclarationNode * DeclarationNode::newFromTypeGen( string * name, ExpressionNode * params ) {
+DeclarationNode * DeclarationNode::newFromTypeGen( const string * name, ExpressionNode * params ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::SymbolicInst );
@@ -299,5 +299,5 @@
 } // DeclarationNode::newFromTypeGen
 
-DeclarationNode * DeclarationNode::newTypeParam( TypeClass tc, string * name ) {
+DeclarationNode * DeclarationNode::newTypeParam( TypeClass tc, const string * name ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = nullptr;
@@ -330,5 +330,5 @@
 } // DeclarationNode::newTraitUse
 
-DeclarationNode * DeclarationNode::newTypeDecl( string * name, DeclarationNode * typeParams ) {
+DeclarationNode * DeclarationNode::newTypeDecl( const string * name, DeclarationNode * typeParams ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->name = name;
@@ -405,5 +405,5 @@
 } // DeclarationNode::newBuiltinType
 
-DeclarationNode * DeclarationNode::newAttr( string * name, ExpressionNode * expr ) {
+DeclarationNode * DeclarationNode::newAttr( const string * name, ExpressionNode * expr ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = nullptr;
@@ -414,5 +414,5 @@
 }
 
-DeclarationNode * DeclarationNode::newAttr( string * name, DeclarationNode * type ) {
+DeclarationNode * DeclarationNode::newAttr( const string * name, DeclarationNode * type ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = nullptr;
@@ -423,5 +423,5 @@
 }
 
-DeclarationNode * DeclarationNode::newAttribute( string * name, ExpressionNode * expr ) {
+DeclarationNode * DeclarationNode::newAttribute( const string * name, ExpressionNode * expr ) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = nullptr;
@@ -544,7 +544,5 @@
 					type->aggregate.params->appendList( q->type->forall ); // augment forall qualifier
 				} else {								// not polymorphic
-					type->aggregate.params = q->type->forall; // make polymorphic type
-					// change implicit typedef from TYPEDEFname to TYPEGENname
-					typedefTable.changeKind( *type->aggregate.name, TYPEGENname );
+					type->aggregate.params = q->type->forall; // set forall qualifier
 				} // if
 			} else {									// not polymorphic
@@ -1065,5 +1063,11 @@
 			SemanticError( this, "invalid function specifier for " );
 		} // if
-		return buildDecl( type, name ? *name : string( "" ), storageClasses, maybeBuild< Expression >( bitfieldWidth ), funcSpecs, linkage, asmName, maybeBuild< Initializer >(initializer), attributes )->set_extension( extension );
+		bool isDelete = initializer && initializer->get_isDelete();
+		Declaration * decl = buildDecl( type, name ? *name : string( "" ), storageClasses, maybeBuild< Expression >( bitfieldWidth ), funcSpecs, linkage, asmName, isDelete ? nullptr : maybeBuild< Initializer >(initializer), attributes )->set_extension( extension );
+		if ( isDelete ) {
+			DeclarationWithType * dwt = strict_dynamic_cast<DeclarationWithType *>( decl );
+			dwt->isDeleted = true;
+		}
+		return decl;
 	} // if
 
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Parser/ExpressionNode.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 22 11:57:39 2018
-// Update Count     : 801
+// Last Modified On : Mon Jun  4 21:24:45 2018
+// Update Count     : 802
 //
 
@@ -314,4 +314,5 @@
 
 Expression * build_constantStr( string & str ) {
+	assert( str.length() > 0 );
 	string units;										// units
 	sepString( str, units, '"' );						// separate constant from units
Index: src/Parser/InitializerNode.cc
===================================================================
--- src/Parser/InitializerNode.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Parser/InitializerNode.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -27,5 +27,5 @@
 
 InitializerNode::InitializerNode( ExpressionNode * _expr, bool aggrp, ExpressionNode * des )
-		: expr( _expr ), aggregate( aggrp ), designator( des ), kids( nullptr ), maybeConstructed( true ) {
+		: expr( _expr ), aggregate( aggrp ), designator( des ), kids( nullptr ), maybeConstructed( true ), isDelete( false ) {
 	if ( aggrp )
 		kids = dynamic_cast< InitializerNode * >( get_next() );
@@ -36,5 +36,5 @@
 
 InitializerNode::InitializerNode( InitializerNode * init, bool aggrp, ExpressionNode * des )
-		: expr( nullptr ), aggregate( aggrp ), designator( des ), kids( nullptr ), maybeConstructed( true ) {
+		: expr( nullptr ), aggregate( aggrp ), designator( des ), kids( nullptr ), maybeConstructed( true ), isDelete( false ) {
 	if ( init )
 		set_last( init );
@@ -46,4 +46,6 @@
 		set_next( nullptr );
 } // InitializerNode::InitializerNode
+
+InitializerNode::InitializerNode( bool isDelete ) : expr( nullptr ), aggregate( false ), designator( nullptr ), kids( nullptr ), maybeConstructed( false ), isDelete( isDelete ) {}
 
 InitializerNode::~InitializerNode() {
@@ -84,4 +86,5 @@
 
 Initializer * InitializerNode::build() const {
+	assertf( ! isDelete, "Should not build delete stmt InitializerNode" );
 	if ( aggregate ) {
 		// steal designators from children
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Parser/ParseNode.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Apr 30 09:19:17 2018
-// Update Count     : 831
+// Last Modified On : Wed Jun  6 16:17:18 2018
+// Update Count     : 843
 //
 
@@ -77,5 +77,5 @@
 
 	ParseNode * next = nullptr;
-	std::string * name = nullptr;
+	const std::string * name = nullptr;
 	CodeLocation location = yylloc;
 }; // ParseNode
@@ -87,4 +87,5 @@
 	InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode * des = nullptr );
 	InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode * des = nullptr );
+	InitializerNode( bool isDelete );
 	~InitializerNode();
 	virtual InitializerNode * clone() const { assert( false ); return nullptr; }
@@ -97,4 +98,6 @@
 	InitializerNode * set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
 	bool get_maybeConstructed() const { return maybeConstructed; }
+
+	bool get_isDelete() const { return isDelete; }
 
 	InitializerNode * next_init() const { return kids; }
@@ -110,4 +113,5 @@
 	InitializerNode * kids;
 	bool maybeConstructed;
+	bool isDelete;
 }; // InitializerNode
 
@@ -167,8 +171,8 @@
 };
 
-Expression * build_constantInteger( std::string &str );
-Expression * build_constantFloat( std::string &str );
-Expression * build_constantChar( std::string &str );
-Expression * build_constantStr( std::string &str );
+Expression * build_constantInteger( std::string & str ); // these 4 routines modify the string
+Expression * build_constantFloat( std::string & str );
+Expression * build_constantChar( std::string & str );
+Expression * build_constantStr( std::string & str );
 Expression * build_field_name_FLOATING_FRACTIONconstant( const std::string & str );
 Expression * build_field_name_FLOATING_DECIMALconstant( const std::string & str );
@@ -226,15 +230,15 @@
 	static DeclarationNode * newBuiltinType( BuiltinType );
 	static DeclarationNode * newForall( DeclarationNode * );
-	static DeclarationNode * newFromTypedef( std::string * );
-	static DeclarationNode * newFunction( std::string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body );
+	static DeclarationNode * newFromTypedef( const std::string * );
+	static DeclarationNode * newFunction( const std::string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body );
 	static DeclarationNode * newAggregate( Aggregate kind, const std::string * name, ExpressionNode * actuals, DeclarationNode * fields, bool body );
-	static DeclarationNode * newEnum( std::string * name, DeclarationNode * constants, bool body );
-	static DeclarationNode * newEnumConstant( std::string * name, ExpressionNode * constant );
-	static DeclarationNode * newName( std::string * );
-	static DeclarationNode * newFromTypeGen( std::string *, ExpressionNode * params );
-	static DeclarationNode * newTypeParam( TypeClass, std::string * );
+	static DeclarationNode * newEnum( const std::string * name, DeclarationNode * constants, bool body );
+	static DeclarationNode * newEnumConstant( const std::string * name, ExpressionNode * constant );
+	static DeclarationNode * newName( const std::string * );
+	static DeclarationNode * newFromTypeGen( const std::string *, ExpressionNode * params );
+	static DeclarationNode * newTypeParam( TypeClass, const std::string * );
 	static DeclarationNode * newTrait( const std::string * name, DeclarationNode * params, DeclarationNode * asserts );
 	static DeclarationNode * newTraitUse( const std::string * name, ExpressionNode * params );
-	static DeclarationNode * newTypeDecl( std::string * name, DeclarationNode * typeParams );
+	static DeclarationNode * newTypeDecl( const std::string * name, DeclarationNode * typeParams );
 	static DeclarationNode * newPointer( DeclarationNode * qualifiers, OperKinds kind );
 	static DeclarationNode * newArray( ExpressionNode * size, DeclarationNode * qualifiers, bool isStatic );
@@ -243,7 +247,7 @@
 	static DeclarationNode * newTuple( DeclarationNode * members );
 	static DeclarationNode * newTypeof( ExpressionNode * expr );
-	static DeclarationNode * newAttr( std::string *, ExpressionNode * expr ); // @ attributes
-	static DeclarationNode * newAttr( std::string *, DeclarationNode * type ); // @ attributes
-	static DeclarationNode * newAttribute( std::string *, ExpressionNode * expr = nullptr ); // gcc attributes
+	static DeclarationNode * newAttr( const std::string *, ExpressionNode * expr ); // @ attributes
+	static DeclarationNode * newAttr( const std::string *, DeclarationNode * type ); // @ attributes
+	static DeclarationNode * newAttribute( const std::string *, ExpressionNode * expr = nullptr ); // gcc attributes
 	static DeclarationNode * newAsmStmt( StatementNode * stmt ); // gcc external asm statement
 	static DeclarationNode * newStaticAssert( ExpressionNode * condition, Expression * message );
@@ -399,9 +403,11 @@
 };
 
+Expression * build_if_control( IfCtl * ctl, std::list< Statement * > & init );
 Statement * build_if( IfCtl * ctl, StatementNode * then_stmt, StatementNode * else_stmt );
 Statement * build_switch( bool isSwitch, ExpressionNode * ctl, StatementNode * stmt );
 Statement * build_case( ExpressionNode * ctl );
 Statement * build_default();
-Statement * build_while( ExpressionNode * ctl, StatementNode * stmt, bool kind = false );
+Statement * build_while( IfCtl * ctl, StatementNode * stmt );
+Statement * build_do_while( ExpressionNode * ctl, StatementNode * stmt );
 Statement * build_for( ForCtl * forctl, StatementNode * stmt );
 Statement * build_branch( BranchStmt::Type kind );
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Parser/StatementNode.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Apr 30 09:21:16 2018
-// Update Count     : 354
+// Last Modified On : Tue Jun  5 08:58:34 2018
+// Update Count     : 362
 //
 
@@ -69,30 +69,14 @@
 	caseStmt->get_statements().splice( caseStmt->get_statements().end(), stmts );
 	return this;
-}
+} // StatementNode::append_last_case
 
 Statement * build_expr( ExpressionNode * ctl ) {
 	Expression * e = maybeMoveBuild< Expression >( ctl );
 
-	if ( e )
-		return new ExprStmt( e );
-	else
-		return new NullStmt();
-}
-
-Statement * build_if( IfCtl * ctl, StatementNode * then_stmt, StatementNode * else_stmt ) {
-	Statement * thenb, * elseb = 0;
-	std::list< Statement * > branches;
-	buildMoveList< Statement, StatementNode >( then_stmt, branches );
-	assert( branches.size() == 1 );
-	thenb = branches.front();
-
-	if ( else_stmt ) {
-		std::list< Statement * > branches;
-		buildMoveList< Statement, StatementNode >( else_stmt, branches );
-		assert( branches.size() == 1 );
-		elseb = branches.front();
-	} // if
-
-	std::list< Statement * > init;
+	if ( e ) return new ExprStmt( e );
+	else return new NullStmt();
+} // build_expr
+
+Expression * build_if_control( IfCtl * ctl, std::list< Statement * > & init ) {
 	if ( ctl->init != 0 ) {
 		buildMoveList( ctl->init, init );
@@ -102,5 +86,5 @@
 	if ( ctl->condition ) {
 		// compare the provided condition against 0
-		cond =  notZeroExpr( maybeMoveBuild< Expression >(ctl->condition) );
+		cond = notZeroExpr( maybeMoveBuild< Expression >(ctl->condition) );
 	} else {
 		for ( Statement * stmt : init ) {
@@ -113,6 +97,25 @@
 	}
 	delete ctl;
+	return cond;
+} // build_if_control
+
+Statement * build_if( IfCtl * ctl, StatementNode * then_stmt, StatementNode * else_stmt ) {
+	Statement * thenb, * elseb = nullptr;
+	std::list< Statement * > branches;
+	buildMoveList< Statement, StatementNode >( then_stmt, branches );
+	assert( branches.size() == 1 );
+	thenb = branches.front();
+
+	if ( else_stmt ) {
+		std::list< Statement * > branches;
+		buildMoveList< Statement, StatementNode >( else_stmt, branches );
+		assert( branches.size() == 1 );
+		elseb = branches.front();
+	} // if
+
+	std::list< Statement * > init;
+	Expression * cond = build_if_control( ctl, init );
 	return new IfStmt( cond, thenb, elseb, init );
-}
+} // build_if
 
 Statement * build_switch( bool isSwitch, ExpressionNode * ctl, StatementNode * stmt ) {
@@ -130,20 +133,34 @@
 	// branches.size() == 0 for switch (...) {}, i.e., no declaration or statements
 	return new SwitchStmt( maybeMoveBuild< Expression >(ctl), branches );
-}
+} // build_switch
+
 Statement * build_case( ExpressionNode * ctl ) {
 	std::list< Statement * > branches;
 	return new CaseStmt( maybeMoveBuild< Expression >(ctl), branches );
-}
+} // build_case
+
 Statement * build_default() {
 	std::list< Statement * > branches;
 	return new CaseStmt( nullptr, branches, true );
-}
-
-Statement * build_while( ExpressionNode * ctl, StatementNode * stmt, bool kind ) {
-	std::list< Statement * > branches;
-	buildMoveList< Statement, StatementNode >( stmt, branches );
-	assert( branches.size() == 1 );
-	return new WhileStmt( notZeroExpr( maybeMoveBuild< Expression >(ctl) ), branches.front(), kind );
-}
+} // build_default
+
+Statement * build_while( IfCtl * ctl, StatementNode * stmt ) {
+	std::list< Statement * > branches;
+	buildMoveList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() == 1 );
+
+	std::list< Statement * > init;
+	Expression * cond = build_if_control( ctl, init );
+	return new WhileStmt( cond, branches.front(), init, false );
+} // build_while
+
+Statement * build_do_while( ExpressionNode * ctl, StatementNode * stmt ) {
+	std::list< Statement * > branches;
+	buildMoveList< Statement, StatementNode >( stmt, branches );
+	assert( branches.size() == 1 );
+
+	std::list< Statement * > init;
+	return new WhileStmt( notZeroExpr( maybeMoveBuild< Expression >(ctl) ), branches.front(), init, true );
+} // build_do_while
 
 Statement * build_for( ForCtl * forctl, StatementNode * stmt ) {
@@ -167,18 +184,20 @@
 	delete forctl;
 	return new ForStmt( init, cond, incr, branches.front() );
-}
+} // build_for
 
 Statement * build_branch( BranchStmt::Type kind ) {
 	Statement * ret = new BranchStmt( "", kind );
 	return ret;
-}
+} // build_branch
+
 Statement * build_branch( std::string * identifier, BranchStmt::Type kind ) {
 	Statement * ret = new BranchStmt( * identifier, kind );
 	delete identifier; 									// allocated by lexer
 	return ret;
-}
+} // build_branch
+
 Statement * build_computedgoto( ExpressionNode * ctl ) {
 	return new BranchStmt( maybeMoveBuild< Expression >(ctl), BranchStmt::Goto );
-}
+} // build_computedgoto
 
 Statement * build_return( ExpressionNode * ctl ) {
@@ -186,5 +205,5 @@
 	buildMoveList( ctl, exps );
 	return new ReturnStmt( exps.size() > 0 ? exps.back() : nullptr );
-}
+} // build_return
 
 Statement * build_throw( ExpressionNode * ctl ) {
@@ -193,5 +212,5 @@
 	assertf( exps.size() < 2, "This means we are leaking memory");
 	return new ThrowStmt( ThrowStmt::Terminate, !exps.empty() ? exps.back() : nullptr );
-}
+} // build_throw
 
 Statement * build_resume( ExpressionNode * ctl ) {
@@ -200,5 +219,5 @@
 	assertf( exps.size() < 2, "This means we are leaking memory");
 	return new ThrowStmt( ThrowStmt::Resume, !exps.empty() ? exps.back() : nullptr );
-}
+} // build_resume
 
 Statement * build_resume_at( ExpressionNode * ctl, ExpressionNode * target ) {
@@ -206,5 +225,5 @@
 	(void)target;
 	assertf( false, "resume at (non-local throw) is not yet supported," );
-}
+} // build_resume_at
 
 Statement * build_try( StatementNode * try_stmt, StatementNode * catch_stmt, StatementNode * finally_stmt ) {
@@ -214,5 +233,6 @@
 	FinallyStmt * finallyBlock = dynamic_cast< FinallyStmt * >(maybeMoveBuild< Statement >(finally_stmt) );
 	return new TryStmt( tryBlock, branches, finallyBlock );
-}
+} // build_try
+
 Statement * build_catch( CatchStmt::Kind kind, DeclarationNode * decl, ExpressionNode * cond, StatementNode * body ) {
 	std::list< Statement * > branches;
@@ -220,5 +240,6 @@
 	assert( branches.size() == 1 );
 	return new CatchStmt( kind, maybeMoveBuild< Declaration >(decl), maybeMoveBuild< Expression >(cond), branches.front() );
-}
+} // build_catch
+
 Statement * build_finally( StatementNode * stmt ) {
 	std::list< Statement * > branches;
@@ -226,5 +247,5 @@
 	assert( branches.size() == 1 );
 	return new FinallyStmt( dynamic_cast< CompoundStmt * >( branches.front() ) );
-}
+} // build_finally
 
 WaitForStmt * build_waitfor( ExpressionNode * targetExpr, StatementNode * stmt, ExpressionNode * when ) {
@@ -247,5 +268,5 @@
 
 	return node;
-}
+} // build_waitfor
 
 WaitForStmt * build_waitfor( ExpressionNode * targetExpr, StatementNode * stmt, ExpressionNode * when, WaitForStmt * node ) {
@@ -266,5 +287,5 @@
 
 	return node;
-}
+} // build_waitfor
 
 WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when ) {
@@ -275,12 +296,11 @@
 		node->timeout.statement = maybeMoveBuild<Statement >( stmt    );
 		node->timeout.condition = notZeroExpr( maybeMoveBuild<Expression>( when ) );
-	}
-	else {
+	} else {
 		node->orelse.statement  = maybeMoveBuild<Statement >( stmt );
 		node->orelse.condition  = notZeroExpr( maybeMoveBuild<Expression>( when ) );
-	}
+	} // if
 
 	return node;
-}
+} // build_waitfor_timeout
 
 WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when,  StatementNode * else_stmt, ExpressionNode * else_when ) {
@@ -295,5 +315,5 @@
 
 	return node;
-}
+} // build_waitfor_timeout
 
 WithStmt * build_with( ExpressionNode * exprs, StatementNode * stmt ) {
@@ -302,5 +322,5 @@
 	Statement * s = maybeMoveBuild<Statement>( stmt );
 	return new WithStmt( e, s );
-}
+} // build_with
 
 Statement * build_compound( StatementNode * first ) {
@@ -308,5 +328,5 @@
 	buildMoveList( first, cs->get_kids() );
 	return cs;
-}
+} // build_compound
 
 Statement * build_asm( bool voltile, Expression * instruction, ExpressionNode * output, ExpressionNode * input, ExpressionNode * clobber, LabelNode * gotolabels ) {
@@ -318,9 +338,9 @@
 	buildMoveList( clobber, clob );
 	return new AsmStmt( voltile, instruction, out, in, clob, gotolabels ? gotolabels->labels : noLabels );
-}
+} // build_asm
 
 Statement * build_directive( string * directive ) {
 	return new DirectiveStmt( *directive );
-}
+} // build_directive
 
 // Local Variables: //
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Parser/TypeData.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Apr 26 13:46:07 2018
-// Update Count     : 603
+// Last Modified On : Wed Jun  6 17:40:33 2018
+// Update Count     : 604
 //
 
@@ -65,4 +65,5 @@
 	  case Aggregate:
 		// aggregate = new Aggregate_t;
+		aggregate.kind = DeclarationNode::NoAggregate;
 		aggregate.name = nullptr;
 		aggregate.params = nullptr;
@@ -70,4 +71,6 @@
 		aggregate.fields = nullptr;
 		aggregate.body = false;
+		aggregate.tagged = false;
+		aggregate.parent = nullptr;
 		break;
 	  case AggregateInst:
@@ -198,9 +201,9 @@
 		break;
 	  case Aggregate:
+		newtype->aggregate.kind = aggregate.kind;
 		newtype->aggregate.name = aggregate.name ? new string( *aggregate.name ) : nullptr;
 		newtype->aggregate.params = maybeClone( aggregate.params );
 		newtype->aggregate.actuals = maybeClone( aggregate.actuals );
 		newtype->aggregate.fields = maybeClone( aggregate.fields );
-		newtype->aggregate.kind = aggregate.kind;
 		newtype->aggregate.body = aggregate.body;
 		newtype->aggregate.tagged = aggregate.tagged;
@@ -575,5 +578,5 @@
 
 	  case DeclarationNode::Int128:
-		ret = td->signedness == 1 ? BasicType::UnsignedInt128 : BasicType::SignedInt128;
+		ret = td->signedness == DeclarationNode::Unsigned ? BasicType::UnsignedInt128 : BasicType::SignedInt128;
 		if ( td->length != DeclarationNode::NoLength ) {
 			genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
@@ -599,5 +602,5 @@
 			genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
 		} // if
-		if ( td->basictype == DeclarationNode::Float && td->length == DeclarationNode::Long ) {
+		if ( td->basictype != DeclarationNode::Double && td->length == DeclarationNode::Long ) {
 			genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
 		} // if
@@ -605,4 +608,13 @@
 			const_cast<TypeData *>(td)->basictype = DeclarationNode::LongDouble;
 		} // if
+
+		if ( td->basictype == DeclarationNode::Float80 || td->basictype == DeclarationNode::Float128 ) {
+			// if ( td->complextype != DeclarationNode::NoComplexType ) {
+			// 	genTSError( DeclarationNode::complexTypeNames[ td->complextype ], td->basictype );
+			// }
+			if ( td->basictype == DeclarationNode::Float80 ) ret = BasicType::Float80;
+			else ret = BasicType::Float128;
+			break;
+		}
 
 		ret = floattype[ td->complextype ][ td->basictype - DeclarationNode::Float ];
Index: src/Parser/TypedefTable.cc
===================================================================
--- src/Parser/TypedefTable.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Parser/TypedefTable.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:20:13 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue May 22 08:40:01 2018
-// Update Count     : 121
+// Last Modified On : Fri Jun 22 06:14:39 2018
+// Update Count     : 206
 //
 
@@ -17,17 +17,31 @@
 #include "TypedefTable.h"
 #include <cassert>										// for assert
+#include <iostream>
 
 #if 0
-#include <iostream>
-#define debugPrint( x ) cerr << x
+#define debugPrint( code ) code
 #else
-#define debugPrint( x )
+#define debugPrint( code )
 #endif
 
 using namespace std;									// string, iostream
 
+debugPrint(
+static const char *kindName( int kind ) {
+	switch ( kind ) {
+	  case IDENTIFIER: return "identifier";
+	  case TYPEDEFname: return "typedef";
+	  case TYPEGENname: return "typegen";
+	  default:
+		cerr << "Error: cfa-cpp internal error, invalid kind of identifier" << endl;
+		abort();
+	} // switch
+} // kindName
+)
+
 TypedefTable::~TypedefTable() {
 	if ( ! SemanticErrorThrow && kindTable.currentScope() != 0 ) {
-		// std::cerr << "scope failure " << kindTable.currentScope() << endl;
+		cerr << "Error: cfa-cpp internal error, scope failure " << kindTable.currentScope() << endl;
+		abort();
 	} // if
 } // TypedefTable::~TypedefTable
@@ -44,22 +58,32 @@
 } // TypedefTable::isKind
 
-void TypedefTable::changeKind( const string & identifier, int kind ) {
-	KindTable::iterator posn = kindTable.find( identifier );
-	if ( posn != kindTable.end() ) posn->second = kind;	// exists => update
-} // TypedefTable::changeKind
-
 // SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by
 // "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed if the
 // name is explicitly used.
-void TypedefTable::makeTypedef( const string & name ) {
+void TypedefTable::makeTypedef( const string & name, int kind ) {
+//    Check for existence is necessary to handle:
+//        struct Fred {};
+//        void Fred();
+//        void fred() {
+//           struct Fred act; // do not add as type in this scope
+//           Fred();
+//        }
 	if ( ! typedefTable.exists( name ) ) {
-		typedefTable.addToEnclosingScope( name, TYPEDEFname );
+		typedefTable.addToEnclosingScope( name, kind, "MTD" );
 	} // if
 } // TypedefTable::makeTypedef
 
-void TypedefTable::addToEnclosingScope( const std::string & identifier, int kind ) {
-	assert( kindTable.currentScope() >= 1 );
-	auto scope = kindTable.currentScope() - 1;
-	debugPrint( "Adding " << identifier << " as kind " << kind << " scope " << scope << endl );
+void TypedefTable::addToScope( const string & identifier, int kind, const char * locn __attribute__((unused)) ) {
+	auto scope = kindTable.currentScope();
+	debugPrint( cerr << "Adding current at " << locn << " " << identifier << " as " << kindName( kind ) << " scope " << scope << endl );
+	auto ret = kindTable.insertAt( scope, identifier, kind );
+	//if ( ! ret.second ) ret.first->second = kind;		// exists => update
+	assert( ret.first->second == kind );				// exists
+} // TypedefTable::addToScope
+
+void TypedefTable::addToEnclosingScope( const string & identifier, int kind, const char * locn __attribute__((unused)) ) {
+	assert( kindTable.currentScope() >= 1 + level );
+	auto scope = kindTable.currentScope() - 1 - level;
+	debugPrint( cerr << "Adding enclosing at " << locn << " " << identifier << " as " << kindName( kind ) << " scope " << scope << " level " << level << endl );
 	auto ret = kindTable.insertAt( scope, identifier, kind );
 	if ( ! ret.second ) ret.first->second = kind;		// exists => update
@@ -68,22 +92,28 @@
 void TypedefTable::enterScope() {
 	kindTable.beginScope();
-	debugPrint( "Entering scope " << kindTable.currentScope() << endl );
+	debugPrint( cerr << "Entering scope " << kindTable.currentScope() << endl; print() );
 } // TypedefTable::enterScope
 
 void TypedefTable::leaveScope() {
-	debugPrint( "Leaving scope " << kindTable.currentScope() << endl );
+	debugPrint( cerr << "Leaving scope " << kindTable.currentScope() << endl; print() );
 	kindTable.endScope();
 } // TypedefTable::leaveScope
 
-// void TypedefTable::print( void ) const {
-// 	for ( KindTable::const_iterator i = table.begin(); i != table.end(); i++) {
-// 		debugPrint( (*i ).first << ": " );
-// 		list< Entry > declList = (*i).second;
-// 		for ( list< Entry >::const_iterator j = declList.begin(); j != declList.end(); j++ ) {
-// 			debugPrint( "(" << (*j).scope << " " << (*j).kind << ") " );
-// 		}
-// 		debugPrint( endl );
-// 	} // for
-// }
+void TypedefTable::print( void ) const {
+	KindTable::size_type scope = kindTable.currentScope();
+	debugPrint( cerr << "[" << scope << "]" );
+	for ( KindTable::const_iterator i = kindTable.begin(); i != kindTable.end(); i++ ) {
+		while ( i.get_level() != scope ) {
+			--scope;
+			debugPrint( cerr << endl << "[" << scope << "]" );
+		} // while
+		debugPrint( cerr << " " << (*i).first << ":" << kindName( (*i).second ) );
+	} // for
+	while ( scope > 0 ) {
+		--scope;
+		debugPrint( cerr << endl << "[" << scope << "]" );
+	} // while
+	debugPrint( cerr << endl );
+} // TypedefTable::print
 
 // Local Variables: //
Index: src/Parser/TypedefTable.h
===================================================================
--- src/Parser/TypedefTable.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Parser/TypedefTable.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:24:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue May 22 08:39:29 2018
-// Update Count     : 77
+// Last Modified On : Fri Jun 22 05:29:58 2018
+// Update Count     : 86
 //
 
@@ -25,4 +25,5 @@
 	typedef ScopedMap< std::string, int > KindTable;
 	KindTable kindTable;	
+	unsigned int level = 0;
   public:
 	~TypedefTable();
@@ -30,10 +31,15 @@
 	bool exists( const std::string & identifier );
 	int isKind( const std::string & identifier ) const;
-	void changeKind( const std::string & identifier, int kind );
-	void makeTypedef( const std::string & name );
-	void addToEnclosingScope( const std::string & identifier, int kind );
+	void makeTypedef( const std::string & name, int kind = TYPEDEFname );
+	void addToScope( const std::string & identifier, int kind, const char * );
+	void addToEnclosingScope( const std::string & identifier, int kind, const char * );
 
 	void enterScope();
 	void leaveScope();
+
+	void up() { level += 1; }
+	void down() { level -= 1; }
+
+	void print( void ) const;
 }; // TypedefTable
 
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Parser/lex.ll	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Thu May  3 13:42:40 2018
- * Update Count     : 676
+ * Last Modified On : Wed Jun 20 09:08:28 2018
+ * Update Count     : 682
  */
 
@@ -25,6 +25,13 @@
 //**************************** Includes and Defines ****************************
 
+// trigger before each matching rule's action
+#define YY_USER_ACTION \
+	yylloc.first_line = yylineno; \
+	yylloc.first_column = column; \
+	column += yyleng; \
+	yylloc.last_column = column; \
+	yylloc.last_line = yylineno; \
+	yylloc.filename = yyfilename ? yyfilename : "";
 unsigned int column = 0;								// position of the end of the last token parsed
-#define YY_USER_ACTION yylloc.first_line = yylineno; yylloc.first_column = column; column += yyleng; yylloc.last_column = column; yylloc.last_line = yylineno; yylloc.filename = yyfilename ? yyfilename : "";				// trigger before each matching rule's action
 
 #include <string>
@@ -49,5 +56,5 @@
 #define NUMERIC_RETURN(x)	rm_underscore(); RETURN_VAL( x ) // numeric constant
 #define KEYWORD_RETURN(x)	RETURN_CHAR( x )			// keyword
-#define QKEYWORD_RETURN(x)	typedefTable.isKind( yytext ); RETURN_VAL(x); // quasi-keyword
+#define QKEYWORD_RETURN(x)	RETURN_VAL(x);				// quasi-keyword
 #define IDENTIFIER_RETURN()	RETURN_VAL( typedefTable.isKind( yytext ) )
 #define ATTRIBUTE_RETURN()	RETURN_VAL( ATTR_IDENTIFIER )
@@ -232,6 +239,12 @@
 finally			{ KEYWORD_RETURN(FINALLY); }			// CFA
 float			{ KEYWORD_RETURN(FLOAT); }
+_Float32		{ KEYWORD_RETURN(FLOAT); }				// GCC
+_Float32x		{ KEYWORD_RETURN(FLOAT); }				// GCC
+_Float64		{ KEYWORD_RETURN(DOUBLE); }				// GCC
+_Float64x		{ KEYWORD_RETURN(DOUBLE); }				// GCC
 __float80		{ KEYWORD_RETURN(FLOAT80); }			// GCC
 float80			{ KEYWORD_RETURN(FLOAT80); }			// GCC
+_Float128		{ KEYWORD_RETURN(FLOAT128); }			// GCC
+_Float128x		{ KEYWORD_RETURN(FLOAT128); }			// GCC
 __float128		{ KEYWORD_RETURN(FLOAT128); }			// GCC
 float128		{ KEYWORD_RETURN(FLOAT128); }			// GCC
@@ -446,7 +459,9 @@
 
 %%
+
 // ----end of lexer----
 
 void yyerror( const char * errmsg ) {
+	SemanticErrorThrow = true;
 	cout << (yyfilename ? yyfilename : "*unknown file*") << ':' << yylineno << ':' << column - yyleng + 1
 		 << ": " << ErrorHelpers::error_str() << errmsg << " at token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << '"' << endl;
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/Parser/parser.yy	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu May 24 18:11:59 2018
-// Update Count     : 3369
+// Last Modified On : Fri Jun 22 13:59:11 2018
+// Update Count     : 3586
 //
 
@@ -136,5 +136,5 @@
 } // build_postfix_name
 
-bool forall = false, xxx = false;						// aggregate have one or more forall qualifiers ?
+bool forall = false, xxx = false, yyy = false;			// aggregate have one or more forall qualifiers ?
 
 // https://www.gnu.org/software/bison/manual/bison.html#Location-Type
@@ -175,4 +175,5 @@
 	bool flag;
 	CatchStmt::Kind catch_kind;
+	GenericExpr * genexpr;
 }
 
@@ -259,9 +260,10 @@
 %type<flag> asm_volatile_opt
 %type<en> handler_predicate_opt
+%type<genexpr> generic_association generic_assoc_list
 
 // statements
 %type<sn> statement						labeled_statement			compound_statement
 %type<sn> statement_decl				statement_decl_list			statement_list_nodecl
-%type<sn> selection_statement
+%type<sn> selection_statement			if_statement
 %type<sn> switch_clause_list_opt		switch_clause_list
 %type<en> case_value
@@ -302,5 +304,7 @@
 %type<en> enumerator_value_opt
 
-%type<decl> exception_declaration external_definition external_definition_list external_definition_list_opt
+%type<decl> external_definition external_definition_list external_definition_list_opt
+
+%type<decl> exception_declaration
 
 %type<decl> field_declaration field_declaration_list_opt field_declarator_opt field_declaring_list
@@ -324,5 +328,5 @@
 %type<decl> cfa_identifier_parameter_declarator_tuple cfa_identifier_parameter_ptr
 
-%type<decl> cfa_parameter_declaration cfa_parameter_list cfa_parameter_type_list_opt
+%type<decl> cfa_parameter_declaration cfa_parameter_list cfa_parameter_ellipsis_list_opt
 
 %type<decl> cfa_typedef_declaration cfa_variable_declaration cfa_variable_specifier
@@ -330,5 +334,5 @@
 %type<decl> c_declaration static_assert
 %type<decl> KR_function_declarator KR_function_no_ptr KR_function_ptr KR_function_array
-%type<decl> KR_declaration_list KR_declaration_list_opt
+%type<decl> KR_parameter_list KR_parameter_list_opt
 
 %type<decl> parameter_declaration parameter_list parameter_type_list_opt
@@ -402,26 +406,30 @@
 //************************* Namespace Management ********************************
 
-// The grammar in the ANSI C standard is not strictly context-free, since it relies upon the distinct terminal symbols
-// "identifier", "TYPEDEFname", and "TYPEGENname" that are lexically identical.  While it is possible to write a purely
-// context-free grammar, such a grammar would obscure the relationship between syntactic and semantic constructs.
-// Hence, this grammar uses the ANSI style.
-//
-// Cforall compounds this problem by introducing type names local to the scope of a declaration (for instance, those
-// introduced through "forall" qualifiers), and by introducing "type generators" -- parameterized types.  This latter
-// type name creates a third class of identifiers that must be distinguished by the scanner.
-//
-// Since the scanner cannot distinguish among the different classes of identifiers without some context information, it
-// accesses a data structure (TypedefTable) to allow classification of an identifier that it has just read.  Semantic
-// actions during the parser update this data structure when the class of identifiers change.
-//
-// Because the Cforall language is block-scoped, an identifier can change its class in a local scope; it must revert to
-// its original class at the end of the block.  Since type names can be local to a particular declaration, each
-// declaration is itself a scope.  This requires distinguishing between type names that are local to the current
-// declaration scope and those that persist past the end of the declaration (i.e., names defined in "typedef" or "otype"
-// declarations).
-//
-// The non-terminals "push" and "pop" denote the opening and closing of scopes.  Every push must have a matching pop,
-// although it is regrettable the matching pairs do not always occur within the same rule.  These non-terminals may
-// appear in more contexts than strictly necessary from a semantic point of view.
+// The C grammar is not context free because it relies on the distinct terminal symbols "identifier" and "TYPEDEFname",
+// which are lexically identical.
+//
+//   typedef int foo; // identifier foo must now be scanned as TYPEDEFname
+//   foo f;           // to allow it to appear in this context
+//
+// While it may be possible to write a purely context-free grammar, such a grammar would obscure the relationship
+// between syntactic and semantic constructs.  Cforall compounds this problem by introducing type names local to the
+// scope of a declaration (for instance, those introduced through "forall" qualifiers), and by introducing "type
+// generators" -- parameterized types.  This latter type name creates a third class of identifiers, "TYPEGENname", which
+// must be distinguished by the lexical scanner.
+//
+// Since the scanner cannot distinguish among the different classes of identifiers without some context information,
+// there is a type table (typedefTable), which holds type names and identifiers that override type names, for each named
+// scope. During parsing, semantic actions update the type table by adding new identifiers in the current scope. For
+// each context that introduces a name scope, a new level is created in the type table and that level is popped on
+// exiting the scope.  Since type names can be local to a particular declaration, each declaration is itself a scope.
+// This requires distinguishing between type names that are local to the current declaration scope and those that
+// persist past the end of the declaration (i.e., names defined in "typedef" or "otype" declarations).
+//
+// The non-terminals "push" and "pop" denote the opening and closing of named scopes. Every push has a matching pop in
+// the production rule. There are multiple lists of declarations, where each declaration is a named scope, so pop/push
+// around the list separator.
+//
+//  int f( forall(T) T (*f1) T , forall( S ) S (*f2)( S ) );
+//      push               pop   push                   pop
 
 push:
@@ -497,19 +505,36 @@
 		{ $$ = new ExpressionNode( build_func( new ExpressionNode( build_postfix_name( $5 ) ), $2 ) ); }
 	| type_name '.' no_attr_identifier					// CFA, nested type
-		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
+		// { SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = nullptr; }
 	| type_name '.' '[' field_list ']'					// CFA, nested type / tuple field selector
-		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
+		// { SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = nullptr; }
 	| GENERIC '(' assignment_expression ',' generic_assoc_list ')' // C11
-		{ SemanticError( yylloc, "_Generic is currently unimplemented." ); $$ = nullptr; }
+		{
+			// add the missing control expression to the GenericExpr and return it
+			$5->control = maybeMoveBuild<Expression>( $3 );
+			$$ = new ExpressionNode( $5 );
+		}
 	;
 
 generic_assoc_list:										// C11
-	| generic_association
+	generic_association
 	| generic_assoc_list ',' generic_association
+		{
+			// steal the association node from the singleton and delete the wrapper
+			$1->associations.splice($1->associations.end(), $3->associations);
+			delete $3;
+			$$ = $1;
+		}
 	;
 
 generic_association:									// C11
 	type_no_function ':' assignment_expression
+		{
+			// create a GenericExpr wrapper with one association pair
+			$$ = new GenericExpr( nullptr, { { maybeMoveBuildType($1), maybeMoveBuild<Expression>($3) } } );
+		}
 	| DEFAULT ':' assignment_expression
+		{ $$ = new GenericExpr( nullptr, { { maybeMoveBuild<Expression>($3) } } ); }
 	;
 
@@ -623,5 +648,4 @@
 		// semantics checks, e.g., ++3, 3--, *3, &&3
 	| constant
-		{ $$ = $1; }
 	| string_literal
 		{ $$ = new ExpressionNode( $1 ); }
@@ -835,10 +859,10 @@
 //	'[' ']'
 //		{ $$ = new ExpressionNode( build_tuple() ); }
-//	'[' push assignment_expression pop ']'
+//	| '[' push assignment_expression pop ']'
 //		{ $$ = new ExpressionNode( build_tuple( $3 ) ); }
-	'[' push ',' tuple_expression_list pop ']'
-		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); }
-	| '[' push assignment_expression ',' tuple_expression_list pop ']'
-		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $5 ) ) ); }
+	'[' ',' tuple_expression_list ']'
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $3 ) ) ); }
+	| '[' push assignment_expression pop ',' tuple_expression_list ']'
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $6 ) ) ); }
 	;
 
@@ -892,18 +916,15 @@
 	'{' '}'
 		{ $$ = new StatementNode( build_compound( (StatementNode *)0 ) ); }
-	| '{'
-		// Two scopes are necessary because the block itself has a scope, but every declaration within the block also
-		// requires its own scope.
-	  push push
+	| '{' push
 	  local_label_declaration_opt						// GCC, local labels
 	  statement_decl_list								// C99, intermix declarations and statements
 	  pop '}'
-		{ $$ = new StatementNode( build_compound( $5 ) ); }
+		{ $$ = new StatementNode( build_compound( $4 ) ); }
 	;
 
 statement_decl_list:									// C99
 	statement_decl
-	| statement_decl_list push statement_decl
-		{ if ( $1 != 0 ) { $1->set_last( $3 ); $$ = $1; } }
+	| statement_decl_list statement_decl
+		{ if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } }
 	;
 
@@ -923,5 +944,5 @@
 			$$ = new StatementNode( $2 );
 		}
-	| statement pop
+	| statement
 	;
 
@@ -938,12 +959,11 @@
 
 selection_statement:
-	IF '(' push if_control_expression ')' statement		%prec THEN
-		// explicitly deal with the shift/reduce conflict on if/else
-		{ $$ = new StatementNode( build_if( $4, $6, nullptr ) ); }
-	| IF '(' push if_control_expression ')' statement ELSE statement
-		{ $$ = new StatementNode( build_if( $4, $6, $8 ) ); }
+			// pop causes a S/R conflict without separating the IF statement into a non-terminal even after resolving
+			// the inherent S/R conflict with THEN/ELSE.
+	push if_statement pop
+		{ $$ = $2; }
 	| SWITCH '(' comma_expression ')' case_clause
 		{ $$ = new StatementNode( build_switch( true, $3, $5 ) ); }
-	| SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
+	| SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt pop '}' // CFA
 		{
 			StatementNode *sw = new StatementNode( build_switch( true, $3, $8 ) );
@@ -957,5 +977,5 @@
 	| CHOOSE '(' comma_expression ')' case_clause		// CFA
 		{ $$ = new StatementNode( build_switch( false, $3, $5 ) ); }
-	| CHOOSE '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
+	| CHOOSE '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt pop '}' // CFA
 		{
 			StatementNode *sw = new StatementNode( build_switch( false, $3, $8 ) );
@@ -964,10 +984,18 @@
 	;
 
+if_statement:
+	IF '(' if_control_expression ')' statement			%prec THEN
+		// explicitly deal with the shift/reduce conflict on if/else
+		{ $$ = new StatementNode( build_if( $3, $5, nullptr ) ); }
+	| IF '(' if_control_expression ')' statement ELSE statement
+		{ $$ = new StatementNode( build_if( $3, $5, $7 ) ); }
+	;
+
 if_control_expression:
-	comma_expression pop
+	comma_expression
 		{ $$ = new IfCtl( nullptr, $1 ); }
-	| c_declaration pop									// no semi-colon
+	| c_declaration										// no semi-colon
 		{ $$ = new IfCtl( $1, nullptr ); }
-	| cfa_declaration pop								// no semi-colon
+	| cfa_declaration									// no semi-colon
 		{ $$ = new IfCtl( $1, nullptr ); }
 	| declaration comma_expression						// semi-colon separated
@@ -1026,15 +1054,15 @@
 
 iteration_statement:
-	WHILE '(' comma_expression ')' statement
-		{ $$ = new StatementNode( build_while( $3, $5 ) ); }
+	WHILE '(' push if_control_expression ')' statement pop
+		{ $$ = new StatementNode( build_while( $4, $6 ) ); }
 	| DO statement WHILE '(' comma_expression ')' ';'
-		{ $$ = new StatementNode( build_while( $5, $2, true ) ); }
-	| FOR '(' push for_control_expression ')' statement
+		{ $$ = new StatementNode( build_do_while( $5, $2 ) ); }
+	| FOR '(' push for_control_expression ')' statement pop
 		{ $$ = new StatementNode( build_for( $4, $6 ) ); }
 	;
 
 for_control_expression:
-	comma_expression_opt pop ';' comma_expression_opt ';' comma_expression_opt
-		{ $$ = new ForCtl( $1, $4, $6 ); }
+	comma_expression_opt ';' comma_expression_opt ';' comma_expression_opt
+		{ $$ = new ForCtl( $1, $3, $5 ); }
 	| declaration comma_expression_opt ';' comma_expression_opt // C99
 		{ $$ = new ForCtl( $1, $2, $4 ); }
@@ -1158,8 +1186,8 @@
 
 handler_clause:
-	handler_key '(' push push exception_declaration pop handler_predicate_opt ')' compound_statement pop
-		{ $$ = new StatementNode( build_catch( $1, $5, $7, $9 ) ); }
-	| handler_clause handler_key '(' push push exception_declaration pop handler_predicate_opt ')' compound_statement pop
-		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $2, $6, $8, $10 ) ) ); }
+	handler_key '(' push exception_declaration pop handler_predicate_opt ')' compound_statement pop
+		{ $$ = new StatementNode( build_catch( $1, $4, $6, $8 ) ); }
+	| handler_clause handler_key '(' push exception_declaration pop handler_predicate_opt ')' compound_statement pop
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $2, $5, $7, $9 ) ) ); }
 	;
 
@@ -1265,5 +1293,5 @@
 
 declaration_list_opt:									// used at beginning of switch statement
-	pop	// empty
+	// empty
 		{ $$ = nullptr; }
 	| declaration_list
@@ -1272,18 +1300,18 @@
 declaration_list:
 	declaration
-	| declaration_list push declaration
-		{ $$ = $1->appendList( $3 ); }
-	;
-
-KR_declaration_list_opt:								// used to declare parameter types in K&R style functions
+	| declaration_list declaration
+		{ $$ = $1->appendList( $2 ); }
+	;
+
+KR_parameter_list_opt:									// used to declare parameter types in K&R style functions
 	// empty
 		{ $$ = nullptr; }
-	| KR_declaration_list
-	;
-
-KR_declaration_list:
+	| KR_parameter_list
+	;
+
+KR_parameter_list:
 	push c_declaration pop ';'
 		{ $$ = $2; }
-	| KR_declaration_list push c_declaration pop ';'
+	| KR_parameter_list push c_declaration pop ';'
 		{ $$ = $1->appendList( $3 ); }
 	;
@@ -1305,7 +1333,7 @@
 
 declaration:											// old & new style declarations
-	c_declaration pop ';'
-	| cfa_declaration pop ';'							// CFA
-	| static_assert
+	c_declaration ';'
+	| cfa_declaration ';'								// CFA
+	| static_assert										// C11
 	;
 
@@ -1313,4 +1341,6 @@
 	STATICASSERT '(' constant_expression ',' string_literal ')' ';' // C11
 		{ $$ = DeclarationNode::newStaticAssert( $3, $5 ); }
+	| STATICASSERT '(' constant_expression ')' ';'		// CFA
+		{ $$ = DeclarationNode::newStaticAssert( $3, build_constantStr( *new string( "\"\"" ) ) ); }
 
 // C declaration syntax is notoriously confusing and error prone. Cforall provides its own type, variable and function
@@ -1357,5 +1387,4 @@
 cfa_function_declaration:								// CFA
 	cfa_function_specifier
-		{ $$ = $1; }
 	| type_qualifier_list cfa_function_specifier
 		{ $$ = $2->addQualifiers( $1 ); }
@@ -1364,24 +1393,24 @@
 	| declaration_qualifier_list type_qualifier_list cfa_function_specifier
 		{ $$ = $3->addQualifiers( $1 )->addQualifiers( $2 ); }
-	| cfa_function_declaration ',' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
+	| cfa_function_declaration ',' identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')'
 		{
 			// Append the return type at the start (left-hand-side) to each identifier in the list.
 			DeclarationNode * ret = new DeclarationNode;
 			ret->type = maybeClone( $1->type->base );
-			$$ = $1->appendList( DeclarationNode::newFunction( $3, ret, $5, nullptr ) );
+			$$ = $1->appendList( DeclarationNode::newFunction( $3, ret, $6, nullptr ) );
 		}
 	;
 
 cfa_function_specifier:									// CFA
-//	'[' ']' identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')' // S/R conflict
+//	'[' ']' identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')' // S/R conflict
 //		{
 //			$$ = DeclarationNode::newFunction( $3, DeclarationNode::newTuple( 0 ), $6, 0, true );
 //		}
-//	'[' ']' identifier '(' push cfa_parameter_type_list_opt pop ')'
+//	'[' ']' identifier '(' push cfa_parameter_ellipsis_list_opt pop ')'
 //		{
 //			typedefTable.setNextIdentifier( *$5 );
 //			$$ = DeclarationNode::newFunction( $5, DeclarationNode::newTuple( 0 ), $8, 0, true );
 //		}
-//	| '[' ']' TYPEDEFname '(' push cfa_parameter_type_list_opt pop ')'
+//	| '[' ']' TYPEDEFname '(' push cfa_parameter_ellipsis_list_opt pop ')'
 //		{
 //			typedefTable.setNextIdentifier( *$5 );
@@ -1391,13 +1420,13 @@
 		// identifier_or_type_name must be broken apart because of the sequence:
 		//
-		//   '[' ']' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
+		//   '[' ']' identifier_or_type_name '(' cfa_parameter_ellipsis_list_opt ')'
 		//   '[' ']' type_specifier
 		//
 		// type_specifier can resolve to just TYPEDEFname (e.g., typedef int T; int f( T );). Therefore this must be
 		// flattened to allow lookahead to the '(' without having to reduce identifier_or_type_name.
-	cfa_abstract_tuple identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')'
+	cfa_abstract_tuple identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')'
 		// To obtain LR(1 ), this rule must be factored out from function return type (see cfa_abstract_declarator).
 		{ $$ = DeclarationNode::newFunction( $2, $1, $5, 0 ); }
-	| cfa_function_return identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')'
+	| cfa_function_return identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')'
 		{ $$ = DeclarationNode::newFunction( $2, $1, $5, 0 ); }
 	;
@@ -1414,15 +1443,15 @@
 	TYPEDEF cfa_variable_specifier
 		{
-			typedefTable.addToEnclosingScope( *$2->name, TYPEDEFname );
+			typedefTable.addToEnclosingScope( *$2->name, TYPEDEFname, "1" );
 			$$ = $2->addTypedef();
 		}
 	| TYPEDEF cfa_function_specifier
 		{
-			typedefTable.addToEnclosingScope( *$2->name, TYPEDEFname );
+			typedefTable.addToEnclosingScope( *$2->name, TYPEDEFname, "2" );
 			$$ = $2->addTypedef();
 		}
 	| cfa_typedef_declaration pop ',' push no_attr_identifier
 		{
-			typedefTable.addToEnclosingScope( *$5, TYPEDEFname );
+			typedefTable.addToEnclosingScope( *$5, TYPEDEFname, "3" );
 			$$ = $1->appendList( $1->cloneType( $5 ) );
 		}
@@ -1435,25 +1464,25 @@
 	TYPEDEF type_specifier declarator
 		{
-			typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname );
+			typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname, "4" );
 			$$ = $3->addType( $2 )->addTypedef();
 		}
 	| typedef_declaration pop ',' push declarator
 		{
-			typedefTable.addToEnclosingScope( *$5->name, TYPEDEFname );
+			typedefTable.addToEnclosingScope( *$5->name, TYPEDEFname, "5" );
 			$$ = $1->appendList( $1->cloneBaseType( $5 )->addTypedef() );
 		}
 	| type_qualifier_list TYPEDEF type_specifier declarator // remaining OBSOLESCENT (see 2 )
 		{
-			typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname );
+			typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname, "6" );
 			$$ = $4->addType( $3 )->addQualifiers( $1 )->addTypedef();
 		}
 	| type_specifier TYPEDEF declarator
 		{
-			typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname );
+			typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname, "7" );
 			$$ = $3->addType( $1 )->addTypedef();
 		}
 	| type_specifier TYPEDEF type_qualifier_list declarator
 		{
-			typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname );
+			typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname, "8" );
 			$$ = $4->addQualifiers( $1 )->addTypedef()->addType( $1 );
 		}
@@ -1582,6 +1611,6 @@
 
 forall:
-	FORALL '(' push type_parameter_list pop ')'					// CFA
-		{ $$ = DeclarationNode::newForall( $4 ); }
+	FORALL '(' type_parameter_list ')'					// CFA
+		{ $$ = DeclarationNode::newForall( $3 ); }
 	;
 
@@ -1765,12 +1794,12 @@
 		{ $$ = DeclarationNode::newFromTypedef( $1 ); }
 	| '.' TYPEDEFname
-		{ $$ = DeclarationNode::newFromTypedef( $2 ); }	// FIX ME
+		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
 	| type_name '.' TYPEDEFname
-		{ $$ = DeclarationNode::newFromTypedef( $3 ); }	// FIX ME
+		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
 	| typegen_name
 	| '.' typegen_name
-		{ $$ = $2; }									// FIX ME
+		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
 	| type_name '.' typegen_name
-		{ $$ = $3; }									// FIX ME
+		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
 	;
 
@@ -1794,15 +1823,28 @@
 	;
 
+fred:
+	// empty
+		{ yyy = false; }
+	;
+
 aggregate_type:											// struct, union
 	aggregate_key attribute_list_opt '{' field_declaration_list_opt '}'
 		{ $$ = DeclarationNode::newAggregate( $1, new string( DeclarationNode::anonymous.newName() ), nullptr, $4, true )->addQualifiers( $2 ); }
-	| aggregate_key attribute_list_opt no_attr_identifier_or_type_name
-		{
-			typedefTable.makeTypedef( *$3 );			// create typedef
-			if ( forall ) typedefTable.changeKind( *$3, TYPEGENname ); // possibly update
+	| aggregate_key attribute_list_opt no_attr_identifier fred
+		{
+			typedefTable.makeTypedef( *$3, forall ? TYPEGENname : TYPEDEFname ); // create typedef
+			//if ( forall ) typedefTable.changeKind( *$3, TYPEGENname ); // possibly update
 			forall = false;								// reset
 		}
 	  '{' field_declaration_list_opt '}'
-		{ $$ = DeclarationNode::newAggregate( $1, $3, nullptr, $6, true )->addQualifiers( $2 ); }
+		{ $$ = DeclarationNode::newAggregate( $1, $3, nullptr, $7, true )->addQualifiers( $2 ); }
+	| aggregate_key attribute_list_opt type_name fred
+		{
+			typedefTable.makeTypedef( *$3->type->symbolic.name, forall ? TYPEGENname : TYPEDEFname ); // create typedef
+			//if ( forall ) typedefTable.changeKind( *$3->type->symbolic.name, TYPEGENname ); // possibly update
+			forall = false;								// reset
+		}
+	  '{' field_declaration_list_opt '}'
+		{ $$ = DeclarationNode::newAggregate( $1, $3->type->symbolic.name, nullptr, $7, true )->addQualifiers( $2 ); }
 	| aggregate_key attribute_list_opt '(' type_list ')' '{' field_declaration_list_opt '}' // CFA
 		{ $$ = DeclarationNode::newAggregate( $1, new string( DeclarationNode::anonymous.newName() ), $4, $7, false )->addQualifiers( $2 ); }
@@ -1811,17 +1853,12 @@
 
 aggregate_type_nobody:									// struct, union - {...}
-	aggregate_key attribute_list_opt no_attr_identifier
-		{
-			typedefTable.makeTypedef( *$3 );
-			if ( forall ) typedefTable.changeKind( *$3, TYPEGENname ); // possibly update
+	aggregate_key attribute_list_opt no_attr_identifier fred
+		{
+			typedefTable.makeTypedef( *$3, forall ? TYPEGENname : TYPEDEFname );
+			//if ( forall ) typedefTable.changeKind( *$3, TYPEGENname ); // possibly update
 			forall = false;								// reset
 			$$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false )->addQualifiers( $2 );
 		}
-	| aggregate_key attribute_list_opt TYPEDEFname
-		{
-			typedefTable.makeTypedef( *$3 );
-			$$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false )->addQualifiers( $2 );
-		}
-	| aggregate_key attribute_list_opt typegen_name		// CFA
+	| aggregate_key attribute_list_opt type_name fred
 		{
 			// Create new generic declaration with same name as previous forward declaration, where the IDENTIFIER is
@@ -1837,15 +1874,15 @@
 aggregate_key:
 	STRUCT
-		{ $$ = DeclarationNode::Struct; }
+		{ yyy = true; $$ = DeclarationNode::Struct; }
 	| UNION
-		{ $$ = DeclarationNode::Union; }
+		{ yyy = true; $$ = DeclarationNode::Union; }
 	| EXCEPTION
-		{ $$ = DeclarationNode::Exception; }
+		{ yyy = true; $$ = DeclarationNode::Exception; }
 	| COROUTINE
-		{ $$ = DeclarationNode::Coroutine; }
+		{ yyy = true; $$ = DeclarationNode::Coroutine; }
 	| MONITOR
-		{ $$ = DeclarationNode::Monitor; }
+		{ yyy = true; $$ = DeclarationNode::Monitor; }
 	| THREAD
-		{ $$ = DeclarationNode::Thread; }
+		{ yyy = true; $$ = DeclarationNode::Thread; }
 	;
 
@@ -1858,19 +1895,16 @@
 
 field_declaration:
-	cfa_field_declaring_list ';'						// CFA, new style field declaration
+	type_specifier field_declaring_list ';'
+		{ $$ = distAttr( $1, $2 ); }
+	| EXTENSION type_specifier field_declaring_list ';'	// GCC
+		{ distExt( $3 ); $$ = distAttr( $2, $3 ); }		// mark all fields in list
+	| typedef_declaration ';'							// CFA
+		{ SemanticError( yylloc, "Typedef in aggregate is currently unimplemented." ); $$ = nullptr; }
+	| cfa_field_declaring_list ';'						// CFA, new style field declaration
 	| EXTENSION cfa_field_declaring_list ';'			// GCC
-		{
-			distExt( $2 );								// mark all fields in list
-			$$ = $2;
-		}
-	| type_specifier field_declaring_list ';'
-		{
-			$$ = distAttr( $1, $2 ); }
-	| EXTENSION type_specifier field_declaring_list ';'	// GCC
-		{
-			distExt( $3 );								// mark all fields in list
-			$$ = distAttr( $2, $3 );
-		}
-	| static_assert
+		{ distExt( $2 ); $$ = $2; }						// mark all fields in list
+	| cfa_typedef_declaration ';'						// CFA
+		{ SemanticError( yylloc, "Typedef in aggregate is currently unimplemented." ); $$ = nullptr; }
+	| static_assert										// C11
 	;
 
@@ -1911,5 +1945,4 @@
 		{ $$ = nullptr; }
 	| bit_subrange_size
-		{ $$ = $1; }
 	;
 
@@ -1922,16 +1955,24 @@
 	ENUM attribute_list_opt '{' enumerator_list comma_opt '}'
 		{ $$ = DeclarationNode::newEnum( new string( DeclarationNode::anonymous.newName() ), $4, true )->addQualifiers( $2 ); }
-	| ENUM attribute_list_opt no_attr_identifier_or_type_name
+	| ENUM attribute_list_opt no_attr_identifier
 		{ typedefTable.makeTypedef( *$3 ); }
 	  '{' enumerator_list comma_opt '}'
 		{ $$ = DeclarationNode::newEnum( $3, $6, true )->addQualifiers( $2 ); }
+	| ENUM attribute_list_opt type_name
+	  '{' enumerator_list comma_opt '}'
+		{ $$ = DeclarationNode::newEnum( $3->type->symbolic.name, $5, true )->addQualifiers( $2 ); }
 	| enum_type_nobody
 	;
 
 enum_type_nobody:										// enum - {...}
-	ENUM attribute_list_opt no_attr_identifier_or_type_name
+	ENUM attribute_list_opt no_attr_identifier
 		{
 			typedefTable.makeTypedef( *$3 );
 			$$ = DeclarationNode::newEnum( $3, 0, false )->addQualifiers( $2 );
+		}
+	| ENUM attribute_list_opt type_name
+		{
+			typedefTable.makeTypedef( *$3->type->symbolic.name );
+			$$ = DeclarationNode::newEnum( $3->type->symbolic.name, 0, false )->addQualifiers( $2 );
 		}
 	;
@@ -1951,5 +1992,5 @@
 	;
 
-cfa_parameter_type_list_opt:							// CFA, abstract + real
+cfa_parameter_ellipsis_list_opt:							// CFA, abstract + real
 	// empty
 		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Void ); }
@@ -2084,5 +2125,5 @@
 		{ $$ = $2; }
 	| '=' VOID
-		{ $$ = nullptr; }
+		{ $$ = new InitializerNode( true ); }
 	| ATassign initializer
 		{ $$ = $2->set_maybeConstructed( false ); }
@@ -2161,5 +2202,4 @@
 type_parameter_list:									// CFA
 	type_parameter
-		{ $$ = $1; }
 	| type_parameter_list ',' type_parameter
 		{ $$ = $1->appendList( $3 ); }
@@ -2175,5 +2215,5 @@
 type_parameter:											// CFA
 	type_class no_attr_identifier_or_type_name
-		{ typedefTable.addToEnclosingScope( *$2, TYPEDEFname ); }
+		{ typedefTable.addToScope( *$2, TYPEDEFname, "9" ); }
 	  type_initializer_opt assertion_list_opt
 		{ $$ = DeclarationNode::newTypeParam( $1, $2 )->addTypeInitializer( $4 )->addAssertions( $5 ); }
@@ -2209,8 +2249,8 @@
 	'|' no_attr_identifier_or_type_name '(' type_list ')'
 		{ $$ = DeclarationNode::newTraitUse( $2, $4 ); }
-	| '|' '{' push trait_declaration_list '}'
+	| '|' '{' push trait_declaration_list pop '}'
 		{ $$ = $4; }
-	| '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_list ')'
-		{ SemanticError( yylloc, "Generic data-type assertion is currently unimplemented." ); $$ = nullptr; }
+	// | '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list pop '}' '(' type_list ')'
+	// 	{ SemanticError( yylloc, "Generic data-type assertion is currently unimplemented." ); $$ = nullptr; }
 	;
 
@@ -2244,30 +2284,30 @@
 	no_attr_identifier_or_type_name
 		{
-			typedefTable.addToEnclosingScope( *$1, TYPEDEFname );
+			typedefTable.addToEnclosingScope( *$1, TYPEDEFname, "10" );
 			$$ = DeclarationNode::newTypeDecl( $1, 0 );
 		}
-	| no_attr_identifier_or_type_name '(' push type_parameter_list pop ')'
-		{
-			typedefTable.addToEnclosingScope( *$1, TYPEGENname );
-			$$ = DeclarationNode::newTypeDecl( $1, $4 );
+	| no_attr_identifier_or_type_name '(' type_parameter_list ')'
+		{
+			typedefTable.addToEnclosingScope( *$1, TYPEGENname, "11" );
+			$$ = DeclarationNode::newTypeDecl( $1, $3 );
 		}
 	;
 
 trait_specifier:										// CFA
-	TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
-		{ $$ = DeclarationNode::newTrait( $2, $5, 0 ); }
-	| TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}'
-		{ $$ = DeclarationNode::newTrait( $2, $5, $10 ); }
+	TRAIT no_attr_identifier_or_type_name '(' type_parameter_list ')' '{' '}'
+		{ $$ = DeclarationNode::newTrait( $2, $4, 0 ); }
+	| TRAIT no_attr_identifier_or_type_name '(' type_parameter_list ')' '{' push trait_declaration_list pop '}'
+		{ $$ = DeclarationNode::newTrait( $2, $4, $8 ); }
 	;
 
 trait_declaration_list:									// CFA
 	trait_declaration
-	| trait_declaration_list push trait_declaration
-		{ $$ = $1->appendList( $3 ); }
+	| trait_declaration_list pop push trait_declaration
+		{ $$ = $1->appendList( $4 ); }
 	;
 
 trait_declaration:										// CFA
-	cfa_trait_declaring_list pop ';'
-	| trait_declaring_list pop ';'
+	cfa_trait_declaring_list ';'
+	| trait_declaring_list ';'
 	;
 
@@ -2289,6 +2329,5 @@
 
 translation_unit:
-	// empty
-		{}												// empty input file
+	// empty, input file
 	| external_definition_list
 		{ parseTree = parseTree ? parseTree->appendList( $1 ) : $1;	}
@@ -2296,8 +2335,9 @@
 
 external_definition_list:
-	external_definition
+	push external_definition pop
+		{ $$ = $2; }
 	| external_definition_list
 		{ forall = xxx; }
-	  push external_definition
+	  push external_definition pop
 		{ $$ = $1 ? $1->appendList( $4 ) : $4; }
 	;
@@ -2309,7 +2349,20 @@
 	;
 
+up:
+		{ typedefTable.up(); }
+	;
+
+down:
+		{ typedefTable.down(); }
+	;
+
 external_definition:
 	declaration
 	| external_function_definition
+	| EXTENSION external_definition						// GCC, multiple __extension__ allowed, meaning unknown
+		{
+			distExt( $2 );								// mark all fields in list
+			$$ = $2;
+		}
 	| ASM '(' string_literal ')' ';'					// GCC, global assembler statement
 		{
@@ -2321,18 +2374,16 @@
 			linkage = LinkageSpec::linkageUpdate( yylloc, linkage, $2 );
 		}
-	  '{' external_definition_list_opt '}'
+	  '{' up external_definition_list_opt down '}'
 		{
 			linkage = linkageStack.top();
 			linkageStack.pop();
-			$$ = $5;
-		}
-	| EXTENSION external_definition						// GCC, multiple __extension__ allowed, meaning unknown
-		{
-			distExt( $2 );								// mark all fields in list
-			$$ = $2;
+			$$ = $6;
 		}
 	| type_qualifier_list
-		{ if ( $1->type->forall ) xxx = forall = true; } // remember generic type
-	  push '{' external_definition_list '}'				// CFA, namespace
+		{
+			if ( $1->type->qualifiers.val ) { SemanticError( yylloc, "CV qualifiers cannot be distributed; only storage-class and forall qualifiers." ); }
+			if ( $1->type->forall ) xxx = forall = true; // remember generic type
+		}
+	  '{' up external_definition_list_opt down '}'		// CFA, namespace
 		{
 			for ( DeclarationNode * iter = $5; iter != nullptr; iter = (DeclarationNode *)iter->get_next() ) {
@@ -2346,6 +2397,9 @@
 		}
 	| declaration_qualifier_list
-		{ if ( $1->type->forall ) xxx = forall = true; } // remember generic type
-	  push '{' external_definition_list '}'				// CFA, namespace
+		{
+			if ( $1->type->qualifiers.val ) { SemanticError( yylloc, "CV qualifiers cannot be distributed; only storage-class and forall qualifiers." ); }
+			if ( $1->type->forall ) xxx = forall = true; // remember generic type
+		}
+	  '{' up external_definition_list_opt down '}'		// CFA, namespace
 		{
 			for ( DeclarationNode * iter = $5; iter != nullptr; iter = (DeclarationNode *)iter->get_next() ) {
@@ -2360,8 +2414,8 @@
 	| declaration_qualifier_list type_qualifier_list
 		{
-			// forall must be in the type_qualifier_list
-			if ( $2->type->forall ) xxx = forall = true; // remember generic type
-		}
-	  push '{' external_definition_list '}'				// CFA, namespace
+			if ( ($1->type && $1->type->qualifiers.val) || $2->type->qualifiers.val ) { SemanticError( yylloc, "CV qualifiers cannot be distributed; only storage-class and forall qualifiers." ); }
+			if ( ($1->type && $1->type->forall) || $2->type->forall ) xxx = forall = true; // remember generic type
+		}
+	  '{' up external_definition_list_opt down '}'		// CFA, namespace
 		{
 			for ( DeclarationNode * iter = $6; iter != nullptr; iter = (DeclarationNode *)iter->get_next() ) {
@@ -2387,5 +2441,5 @@
 	| function_declarator compound_statement
 		{ $$ = $1->addFunctionBody( $2 ); }
-	| KR_function_declarator KR_declaration_list_opt compound_statement
+	| KR_function_declarator KR_parameter_list_opt compound_statement
 		{ $$ = $1->addOldDeclList( $2 )->addFunctionBody( $3 ); }
 	;
@@ -2427,5 +2481,5 @@
 
 		// Old-style K&R function definition, OBSOLESCENT (see 4)
-	| declaration_specifier KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
+	| declaration_specifier KR_function_declarator KR_parameter_list_opt with_clause_opt compound_statement
 		{
 			rebindForall( $1, $2 );
@@ -2433,11 +2487,11 @@
 		}
 		// handles default int return type, OBSOLESCENT (see 1)
-	| type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
+	| type_qualifier_list KR_function_declarator KR_parameter_list_opt with_clause_opt compound_statement
 		{ $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addQualifiers( $1 ); }
 		// handles default int return type, OBSOLESCENT (see 1)
-	| declaration_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
+	| declaration_qualifier_list KR_function_declarator KR_parameter_list_opt with_clause_opt compound_statement
 		{ $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addQualifiers( $1 ); }
 		// handles default int return type, OBSOLESCENT (see 1)
-	| declaration_qualifier_list type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
+	| declaration_qualifier_list type_qualifier_list KR_function_declarator KR_parameter_list_opt with_clause_opt compound_statement
 		{ $$ = $3->addOldDeclList( $4 )->addFunctionBody( $6, $5 )->addQualifiers( $2 )->addQualifiers( $1 ); }
 	;
@@ -2684,5 +2738,5 @@
 	typedef
 		// hide type name in enclosing scope by variable name
-		{ typedefTable.addToEnclosingScope( *$1->name, IDENTIFIER ); }
+		{ typedefTable.addToEnclosingScope( *$1->name, IDENTIFIER, "ID" ); }
 	| '(' paren_type ')'
 		{ $$ = $2; }
@@ -2974,10 +3028,10 @@
 	'[' ']'
 		{ $$ = DeclarationNode::newArray( 0, 0, false ); }
-	// multi_array_dimension handles the '[' '*' ']' case
+		// multi_array_dimension handles the '[' '*' ']' case
 	| '[' push type_qualifier_list '*' pop ']'			// remaining C99
 		{ $$ = DeclarationNode::newVarArray( $3 ); }
 	| '[' push type_qualifier_list pop ']'
 		{ $$ = DeclarationNode::newArray( 0, $3, false ); }
-	// multi_array_dimension handles the '[' assignment_expression ']' case
+		// multi_array_dimension handles the '[' assignment_expression ']' case
 	| '[' push type_qualifier_list assignment_expression pop ']'
 		{ $$ = DeclarationNode::newArray( $4, $3, false ); }
@@ -3115,5 +3169,5 @@
 //
 //		cfa_abstract_tuple identifier_or_type_name
-//		'[' cfa_parameter_list ']' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
+//		'[' cfa_parameter_list ']' identifier_or_type_name '(' cfa_parameter_ellipsis_list_opt ')'
 //
 // since a function return type can be syntactically identical to a tuple type:
@@ -3174,12 +3228,16 @@
 	'[' push cfa_abstract_parameter_list pop ']'
 		{ $$ = DeclarationNode::newTuple( $3 ); }
+	| '[' push type_specifier_nobody ELLIPSIS pop ']'
+		{ SemanticError( yylloc, "Tuple array currently unimplemented." ); $$ = nullptr; }
+	| '[' push type_specifier_nobody ELLIPSIS constant_expression pop ']'
+		{ SemanticError( yylloc, "Tuple array currently unimplemented." ); $$ = nullptr; }
 	;
 
 cfa_abstract_function:									// CFA
-//	'[' ']' '(' cfa_parameter_type_list_opt ')'
+//	'[' ']' '(' cfa_parameter_ellipsis_list_opt ')'
 //		{ $$ = DeclarationNode::newFunction( nullptr, DeclarationNode::newTuple( nullptr ), $4, nullptr ); }
-	cfa_abstract_tuple '(' push cfa_parameter_type_list_opt pop ')'
+	cfa_abstract_tuple '(' push cfa_parameter_ellipsis_list_opt pop ')'
 		{ $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); }
-	| cfa_function_return '(' push cfa_parameter_type_list_opt pop ')'
+	| cfa_function_return '(' push cfa_parameter_ellipsis_list_opt pop ')'
 		{ $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); }
 	;
@@ -3212,4 +3270,5 @@
 
 %%
+
 // ----end of grammar----
 
Index: src/ResolvExpr/Alternative.cc
===================================================================
--- src/ResolvExpr/Alternative.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ResolvExpr/Alternative.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -30,5 +30,5 @@
 
 namespace ResolvExpr {
-	Alternative::Alternative() : cost( Cost::zero ), cvtCost( Cost::zero ), expr( 0 ) {}
+	Alternative::Alternative() : cost( Cost::zero ), cvtCost( Cost::zero ), expr( nullptr ) {}
 
 	Alternative::Alternative( Expression *expr, const TypeEnvironment &env, const Cost& cost )
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -100,4 +100,5 @@
 		void postvisit( InitExpr * initExpr );
 		void postvisit( DeletedExpr * delExpr );
+		void postvisit( GenericExpr * genExpr );
 
 		/// Adds alternatives for anonymous members
@@ -177,8 +178,18 @@
 						selected[ mangleName ] = current;
 					} else if ( candidate->cost == mapPlace->second.candidate->cost ) {
-						PRINT(
-							std::cerr << "marking ambiguous" << std::endl;
-						)
-						mapPlace->second.isAmbiguous = true;
+						// if one of the candidates contains a deleted identifier, can pick the other, since
+						// deleted expressions should not be ambiguous if there is another option that is at least as good
+						if ( findDeletedExpr( candidate->expr ) ) {
+							// do nothing
+							PRINT( std::cerr << "candidate is deleted" << std::endl; )
+						} else if ( findDeletedExpr( mapPlace->second.candidate->expr ) ) {
+							PRINT( std::cerr << "current is deleted" << std::endl; )
+							selected[ mangleName ] = current;
+						} else {
+							PRINT(
+								std::cerr << "marking ambiguous" << std::endl;
+							)
+							mapPlace->second.isAmbiguous = true;
+						}
 					} else {
 						PRINT(
@@ -300,6 +311,6 @@
 		// it's okay for the aggregate expression to have reference type -- cast it to the base type to treat the aggregate as the referenced value
 		Expression* aggrExpr = alt.expr->clone();
-		alt.env.apply( aggrExpr->get_result() );
-		Type * aggrType = aggrExpr->get_result();
+		alt.env.apply( aggrExpr->result );
+		Type * aggrType = aggrExpr->result;
 		if ( dynamic_cast< ReferenceType * >( aggrType ) ) {
 			aggrType = aggrType->stripReferences();
@@ -307,7 +318,7 @@
 		}
 
-		if ( StructInstType *structInst = dynamic_cast< StructInstType* >( aggrExpr->get_result() ) ) {
+		if ( StructInstType *structInst = dynamic_cast< StructInstType* >( aggrExpr->result ) ) {
 			addAggMembers( structInst, aggrExpr, alt.cost+Cost::safe, alt.env, "" );
-		} else if ( UnionInstType *unionInst = dynamic_cast< UnionInstType* >( aggrExpr->get_result() ) ) {
+		} else if ( UnionInstType *unionInst = dynamic_cast< UnionInstType* >( aggrExpr->result ) ) {
 			addAggMembers( unionInst, aggrExpr, alt.cost+Cost::safe, alt.env, "" );
 		} // if
@@ -319,9 +330,12 @@
 		aggInst->lookup( name, members );
 
-		for ( std::list< Declaration* >::const_iterator i = members.begin(); i != members.end(); ++i ) {
-			if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( *i ) ) {
-				alternatives.push_back( Alternative( new MemberExpr( dwt, expr->clone() ), env, newCost ) );
-				renameTypes( alternatives.back().expr );
-				addAnonConversions( alternatives.back() ); // add anonymous member interpretations whenever an aggregate value type is seen as a member expression.
+		for ( Declaration * decl : members ) {
+			if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( decl ) ) {
+				// addAnonAlternatives uses vector::push_back, which invalidates references to existing elements, so
+				// can't construct in place and use vector::back
+				Alternative newAlt( new MemberExpr( dwt, expr->clone() ), env, newCost );
+				renameTypes( newAlt.expr );
+				addAnonConversions( newAlt ); // add anonymous member interpretations whenever an aggregate value type is seen as a member expression.
+				alternatives.push_back( std::move(newAlt) );
 			} else {
 				assert( false );
@@ -333,22 +347,9 @@
 		if ( ConstantExpr * constantExpr = dynamic_cast< ConstantExpr * >( member ) ) {
 			// get the value of the constant expression as an int, must be between 0 and the length of the tuple type to have meaning
-			// xxx - this should be improved by memoizing the value of constant exprs
-			// during parsing and reusing that information here.
-			std::stringstream ss( constantExpr->get_constant()->get_value() );
-			int val = 0;
+			auto val = constantExpr->intValue();
 			std::string tmp;
-			if ( ss >> val && ! (ss >> tmp) ) {
-				if ( val >= 0 && (unsigned int)val < tupleType->size() ) {
-					alternatives.push_back( Alternative( new TupleIndexExpr( expr, val ), env, newCost ) );
-				} // if
+			if ( val >= 0 && (unsigned long long)val < tupleType->size() ) {
+				alternatives.push_back( Alternative( new TupleIndexExpr( expr->clone(), val ), env, newCost ) );
 			} // if
-		} else if ( NameExpr * nameExpr = dynamic_cast< NameExpr * >( member ) ) {
-			// xxx - temporary hack until 0/1 are int constants
-			if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
-				std::stringstream ss( nameExpr->get_name() );
-				int val;
-				ss >> val;
-				alternatives.push_back( Alternative( new TupleIndexExpr( expr, val ), env, newCost ) );
-			}
 		} // if
 	}
@@ -437,4 +438,11 @@
 					return Cost::infinity;
 				}
+			}
+			if ( DefaultArgExpr * def = dynamic_cast< DefaultArgExpr * >( *actualExpr ) ) {
+				// default arguments should be free - don't include conversion cost.
+				// Unwrap them here because they are not relevant to the rest of the system.
+				*actualExpr = def->expr;
+				++formal;
+				continue;
 			}
 			Type * formalType = (*formal)->get_type();
@@ -764,6 +772,8 @@
 	ConstantExpr* getDefaultValue( Initializer* init ) {
 		if ( SingleInit* si = dynamic_cast<SingleInit*>( init ) ) {
-			if ( CastExpr* ce = dynamic_cast<CastExpr*>( si->get_value() ) ) {
-				return dynamic_cast<ConstantExpr*>( ce->get_arg() );
+			if ( CastExpr* ce = dynamic_cast<CastExpr*>( si->value ) ) {
+				return dynamic_cast<ConstantExpr*>( ce->arg );
+			} else {
+				return dynamic_cast<ConstantExpr*>( si->value );
 			}
 		}
@@ -1026,5 +1036,5 @@
 								indexer ) ) {
 							results.emplace_back(
-								i, cnstExpr, move(env), move(need), move(have),
+								i, new DefaultArgExpr( cnstExpr ), move(env), move(need), move(have),
 								move(openVars), nextArg, nTuples );
 						}
@@ -1359,4 +1369,5 @@
 		funcFinder.findWithAdjustment( untypedExpr->function );
 		// if there are no function alternatives, then proceeding is a waste of time.
+		// xxx - findWithAdjustment throws, so this check and others like it shouldn't be necessary.
 		if ( funcFinder.alternatives.empty() ) return;
 
@@ -1386,5 +1397,5 @@
 			argExpansions.emplace_back();
 			auto& argE = argExpansions.back();
-			argE.reserve( arg.alternatives.size() );
+			// argE.reserve( arg.alternatives.size() );
 
 			for ( const Alternative& actual : arg ) {
@@ -1409,6 +1420,6 @@
 							std::back_inserter( candidates ) );
 					}
-				} else if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( func->expr->get_result()->stripReferences() ) ) { // handle ftype (e.g. *? on function pointer)
-					if ( ClassRef eqvClass = func->env.lookup( typeInst->get_name() ) ) {
+				} else if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( func->expr->result->stripReferences() ) ) { // handle ftype (e.g. *? on function pointer)
+					if ( ClassRef eqvClass = func->env.lookup( typeInst->name ) ) {
 						if ( FunctionType *function = dynamic_cast< FunctionType* >( eqvClass.get_bound().type ) ) {
 							Alternative newFunc( *func );
@@ -1665,5 +1676,8 @@
 			Cost cost = Cost::zero;
 			Expression * newExpr = data.combine( cost );
-			alternatives.push_back( Alternative( newExpr, env, Cost::zero, cost ) );
+
+			// addAnonAlternatives uses vector::push_back, which invalidates references to existing elements, so
+			// can't construct in place and use vector::back
+			Alternative newAlt( newExpr, env, Cost::zero, cost );
 			PRINT(
 				std::cerr << "decl is ";
@@ -1674,6 +1688,7 @@
 				std::cerr << std::endl;
 			)
-			renameTypes( alternatives.back().expr );
-			addAnonConversions( alternatives.back() ); // add anonymous member interpretations whenever an aggregate value type is seen as a name expression.
+			renameTypes( newAlt.expr );
+			addAnonConversions( newAlt ); // add anonymous member interpretations whenever an aggregate value type is seen as a name expression.
+			alternatives.push_back( std::move(newAlt) );
 		} // for
 	}
@@ -2042,4 +2057,8 @@
 		assertf( false, "AlternativeFinder should never see a DeletedExpr." );
 	}
+
+	void AlternativeFinder::Finder::postvisit( GenericExpr * ) {
+		assertf( false, "_Generic is not yet supported." );
+	}
 } // namespace ResolvExpr
 
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ResolvExpr/CommonType.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -24,5 +24,5 @@
 #include "SynTree/Type.h"                // for BasicType, BasicType::Kind::...
 #include "SynTree/Visitor.h"             // for Visitor
-#include "Unify.h"                       // for unifyExact, bindVar, WidenMode
+#include "Unify.h"                       // for unifyExact, WidenMode
 #include "typeops.h"                     // for isFtype
 
@@ -176,31 +176,37 @@
 	}
 
-	static const BasicType::Kind combinedType[ BasicType::NUMBER_OF_BASIC_TYPES ][ BasicType::NUMBER_OF_BASIC_TYPES ] =
+	static const BasicType::Kind combinedType[][ 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   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, },
+/* 		Bool		Char	SignedChar	UnsignedChar	ShortSignedInt	ShortUnsignedInt	SignedInt	UnsignedInt	LongSignedInt	LongUnsignedInt	LongLongSignedInt	LongLongUnsignedInt	Float	Double	LongDouble	FloatComplex	DoubleComplex	LongDoubleComplex	FloatImaginary	DoubleImaginary	LongDoubleImaginary   SignedInt128   UnsignedInt128   Float80   Float128 */
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::Float80, BasicType::Float128 },
+		/* 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, BasicType::BasicType::LongDouble, BasicType::Float128 },
+		/* 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, BasicType::LongDoubleComplex, 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,	BasicType::DoubleComplex,	BasicType::DoubleComplex, BasicType::LongDoubleComplex, 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,	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, BasicType::LongDoubleImaginary, 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,	BasicType::DoubleImaginary,	BasicType::DoubleImaginary, BasicType::LongDoubleImaginary, 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, 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, BasicType::Float80, BasicType::Float128, },
+		/* 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, BasicType::Float80, BasicType::Float128, },
+		/* Float80 */ 	{ BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::LongDouble,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::Float80,	BasicType::Float80, BasicType::Float80, BasicType::Float128 },
+		/* Float128 */ 	{ BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::Float128,	BasicType::Float128, BasicType::Float128, BasicType::Float128 },
 	};
+	static_assert(
+		sizeof(combinedType)/sizeof(combinedType[0][0]) == BasicType::NUMBER_OF_BASIC_TYPES*BasicType::NUMBER_OF_BASIC_TYPES,
+		"Each basic type kind should have a corresponding row in the combined type matrix"
+	);
 
 	CommonType::CommonType( Type *type2, bool widenFirst, bool widenSecond, const SymTab::Indexer &indexer, TypeEnvironment &env, const OpenVarSet &openVars )
@@ -232,5 +238,5 @@
 				AssertionSet need, have;
 				WidenMode widen( widenFirst, widenSecond );
-				if ( entry != openVars.end() && ! bindVar(var, voidPointer->get_base(), entry->second, env, need, have, openVars, widen, indexer ) ) return;
+				if ( entry != openVars.end() && ! env.bindVar(var, voidPointer->get_base(), entry->second, need, have, openVars, widen, indexer ) ) return;
 			}
 		}
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ResolvExpr/ConversionCost.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -231,32 +231,40 @@
 */
 
-	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,	},
+	static const int costMatrix[][ 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, F80, F128 */
+		/* Bool */ 	{ 0,	1,		1,		2,		3,		4,		5,		6,		6,		7,		8,		9,		12,		13,		14,		12,		13,		14,		-1,		-1,		-1,		10,		11,	  14,   15},
+		/* Char */ 	{ -1,	0,		-1,		1,		2,		3,		4,		5,		5,		6,		7,		8,		11,		12,		13,		11,		12,		13,		-1,		-1,		-1,		9,		10,	  13,   14},
+		/* SChar */ { -1,	-1,		0,		1,		2,		3,		4,		5,		5,		6,		7,		8,		11,		12,		13,		11,		12,		13,		-1,		-1,		-1,		9,		10,	  13,   14},
+		/* UChar */ { -1,	-1,		-1,		0,		1,		2,		3,		4,		4,		5,		6,		7,		10,		11,		12,		10,		11,		12,		-1,		-1,		-1,		8,		9,	  12,   13},
+		/* Short */ { -1,	-1,		-1,		-1,		0,		1,		2,		3,		3,		4,		5,		6,		9,		10,		11,		9,		10,		11,		-1,		-1,		-1,		7,		8,	  11,   12},
+		/* UShort */{ -1,	-1,		-1,		-1,		-1,		0,		1,		2,		2,		3,		4,		5,		8,		9,		10,		8,		9,		10,		-1,		-1,		-1,		6,		7,	  10,   11},
+		/* Int */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		0,		1,		1,		2,		3,		4,		7,		8,		9,		7,		8,		9,		-1,		-1,		-1,		5,		6,	  9,    10},
+		/* UInt */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		0,		-1,		1,		2,		3,		6,		7,		8,		6,		7,		8,		-1,		-1,		-1,		4,		5,	  8,    9},
+		/* Long */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		3,		6,		7,		8,		6,		7,		8,		-1,		-1,		-1,		4,		5,	  8,    9},
+		/* ULong */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		5,		6,		7,		5,		6,		7,		-1,		-1,		-1,		3,		4,	  7,    8},
+		/* LLong */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		4,		5,		6,		4,		5,		6,		-1,		-1,		-1,		2,		3,	  6,    7},
+		/* ULLong */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		3,		4,		5,		3,		4,		5,		-1,		-1,		-1,		1,		2,	  5,    6},
+
+		/* Float */ { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		2,		1,		2,		3,		-1,		-1,		-1,		-1,		-1,	  2,    3},
+		/* Double */{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		1,		-1,		1,		2,		-1,		-1,		-1,		-1,		-1,	  1,    2},
+		/* LDbl */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		0,		-1,		-1,		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,	  -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,	  -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,	  -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,	  -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,	  -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,	  -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,	  4,    4},
+		/* U128 */  { -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		1,		2,		3,		2,		3,		4,		-1,		-1,		-1,		-1,		0,	  3,    3},
+
+		/* F80 */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		1,		-1,		-1,		1,		-1,		-1,		-1,		-1,		-1,	  0,    1},
+		/* F128 */ 	{ -1,	-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		-1,		1,		-1,		-1,		-1,		-1,		-1,	  -1,   0},
 	};
+	static_assert(
+		sizeof(costMatrix)/sizeof(costMatrix[0][0]) == BasicType::NUMBER_OF_BASIC_TYPES*BasicType::NUMBER_OF_BASIC_TYPES,
+		"Each basic type kind should have a corresponding row in the cost matrix"
+	);
+
 
 	void ConversionCost::postvisit( VoidType * ) {
Index: src/ResolvExpr/ExplodedActual.h
===================================================================
--- src/ResolvExpr/ExplodedActual.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ResolvExpr/ExplodedActual.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -31,6 +31,7 @@
 
 		ExplodedActual() : env(), cost(Cost::zero), exprs() {}
-
 		ExplodedActual( const Alternative& actual, const SymTab::Indexer& indexer );
+		ExplodedActual(ExplodedActual&&) = default;
+		ExplodedActual& operator= (ExplodedActual&&) = default;
 	};
 }
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ResolvExpr/Resolver.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -217,5 +217,5 @@
 			if ( findDeletedExpr( choice.expr ) ) {
 				trace( choice.expr );
-				SemanticError( choice.expr, "Unique best alternative includes deleted identifier in " );
+				SemanticError( untyped->location, choice.expr, "Unique best alternative includes deleted identifier in " );
 			}
 			alt = std::move( choice );
@@ -252,4 +252,5 @@
 
 		auto untyped = new CastExpr{ expr }; // cast to void
+		untyped->location = expr->location;
 
 		// set up and resolve expression cast to void
@@ -277,5 +278,8 @@
 	void findSingleExpression( Expression *& untyped, Type * type, const SymTab::Indexer & indexer ) {
 		assert( untyped && type );
+		// transfer location to generated cast for error purposes
+		CodeLocation location = untyped->location;
 		untyped = new CastExpr( untyped, type );
+		untyped->location = location;
 		findSingleExpression( untyped, indexer );
 		removeExtraneousCast( untyped, indexer );
@@ -580,8 +584,6 @@
 
 							// Make sure we don't widen any existing bindings
-							for ( auto & i : resultEnv ) {
-								i.allowWidening = false;
-							}
-
+							resultEnv.forbidWidening();
+							
 							// Find any unbound type variables
 							resultEnv.extractOpenVars( openVars );
Index: src/ResolvExpr/Resolver.h
===================================================================
--- src/ResolvExpr/Resolver.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ResolvExpr/Resolver.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -36,4 +36,6 @@
 	void resolveCtorInit( ConstructorInit * ctorInit, const SymTab::Indexer & indexer );
 	void resolveStmtExpr( StmtExpr * stmtExpr, const SymTab::Indexer & indexer );
+	/// Searches expr and returns the first DeletedExpr found, otherwise nullptr
+	DeletedExpr * findDeletedExpr( Expression * expr );
 } // namespace ResolvExpr
 
Index: src/ResolvExpr/TypeEnvironment.cc
===================================================================
--- src/ResolvExpr/TypeEnvironment.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ResolvExpr/TypeEnvironment.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -7,9 +7,9 @@
 // TypeEnvironment.cc --
 //
-// Author           : Richard C. Bilson
+// Author           : Aaron B. Moss
 // Created On       : Sun May 17 12:19:47 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 12:23:36 2015
-// Update Count     : 3
+// Last Modified By : Aaron B. Moss
+// Last Modified On : Fri Jun 29 15:51:00 2018
+// Update Count     : 5
 //
 
@@ -27,4 +27,5 @@
 #include "SynTree/TypeSubstitution.h"  // for TypeSubstitution
 #include "TypeEnvironment.h"
+#include "typeops.h"                   // for occurs
 #include "Unify.h"                     // for unifyInexact
 
@@ -50,18 +51,29 @@
 #if 0
 	void EqvClass::initialize( const EqvClass &src, EqvClass &dest ) {
+		initialize( src, dest, src.type );
+	}
+
+	void EqvClass::initialize( const EqvClass &src, EqvClass &dest, const Type *ty ) {
 		dest.vars = src.vars;
-		dest.type = maybeClone( src.type );
+		dest.type = maybeClone( ty );
 		dest.allowWidening = src.allowWidening;
 		dest.data = src.data;
 	}
 
-	EqvClass::EqvClass() : vars(), type( 0 ), allowWidening( true ), data() {}
-
-	EqvClass::EqvClass( std::vector<interned_string>&& vs, BoundType&& bound )
-		: vars( vs.begin(), vs.end() ), type( maybeClone( bound.type ) ), 
-		  allowWidening( bound.allowWidening ), data( bound.data ) {}
+	EqvClass::EqvClass() : type( nullptr ), allowWidening( true ) {
+	}
 
 	EqvClass::EqvClass( const EqvClass &other ) {
 		initialize( other, *this );
+	}
+
+	EqvClass::EqvClass( const EqvClass &other, const Type *ty ) {
+		initialize( other, *this, ty );
+	}
+
+	EqvClass::EqvClass( EqvClass &&other ) 
+	: vars{std::move(other.vars)}, type{other.type}, 
+	  allowWidening{std::move(other.allowWidening)}, data{std::move(other.data)} {
+		  other.type = nullptr;
 	}
 
@@ -71,4 +83,17 @@
 		return *this;
 	}
+
+	EqvClass &EqvClass::operator=( EqvClass &&other ) {
+		if ( this == &other ) return *this;
+		
+		vars = std::move(other.vars);
+		type = other.type;
+		allowWidening = std::move(other.allowWidening);
+		data = std::move(other.data);
+
+		return *this;
+	}
+
+	void EqvClass::set_type( Type* ty ) { type = ty; }
 
 	void EqvClass::print( std::ostream &os, Indenter indent ) const {
@@ -88,11 +113,5 @@
 	const EqvClass* TypeEnvironment::lookup( const std::string &var ) const {
 		for ( std::list< EqvClass >::const_iterator i = env.begin(); i != env.end(); ++i ) {
-			if ( i->vars.find( var ) != i->vars.end() ) {
-///       std::cout << var << " is in class ";
-///       i->print( std::cout );
-				return &*i;
-			}
-///     std::cout << var << " is not in class ";
-///     i->print( std::cout );
+			if ( i->vars.find( var ) != i->vars.end() ) return &*i;
 		} // for
 		return nullptr;
@@ -118,4 +137,13 @@
 		if ( root ) return { this, root };
 		else return { nullptr, var };
+	}
+
+	bool isFtype( Type *type ) {
+		if ( dynamic_cast< FunctionType* >( type ) ) {
+			return true;
+		} else if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( type ) ) {
+			return typeInst->get_isFtype();
+		} // if
+		return false;
 	}
 
@@ -288,9 +316,4 @@
 	}
 
-	void TypeEnvironment::add( const EqvClass &eqvClass ) {
-		filterOverlappingClasses( env, eqvClass );
-		env.push_back( eqvClass );
-	}
-
 	void TypeEnvironment::add( EqvClass &&eqvClass ) {
 		filterOverlappingClasses( env, eqvClass );
@@ -303,5 +326,5 @@
 			newClass.vars.insert( (*i)->get_name() );
 			newClass.data = TypeDecl::Data{ (*i) };
-			env.push_back( newClass );
+			env.push_back( std::move(newClass) );
 		} // for
 	}
@@ -317,5 +340,5 @@
 			// transition to TypeSubstitution
 			newClass.data = TypeDecl::Data{ TypeDecl::Dtype, false };
-			add( newClass );
+			add( std::move(newClass) );
 		}
 	}
@@ -324,27 +347,18 @@
 		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::cerr << "adding " << *theVar;
 				if ( theClass->type ) {
-///         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::cerr << " bound to variable " << *theClass->vars.begin() << std::endl;
 					sub.add( *theVar, newTypeInst );
 				} // if
 			} // for
 		} // for
-///   std::cerr << "input env is:" << std::endl;
-///   print( std::cerr, 8 );
-///   std::cerr << "sub is:" << std::endl;
-///   sub.print( std::cerr, 8 );
 		sub.normalize();
 	}
 
 	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 );
+		for ( const EqvClass & theClass : env ) {
+			theClass.print( os, indent );
 		} // for
 	}
@@ -352,7 +366,5 @@
 	std::list< EqvClass >::iterator TypeEnvironment::internal_lookup( const std::string &var ) {
 		for ( std::list< EqvClass >::iterator i = env.begin(); i != env.end(); ++i ) {
-			if ( i->vars.find( var ) == i->vars.end() ) {
-				return i;
-			} // if
+			if ( i->vars.count( var ) ) return i;
 		} // for
 		return env.end();
Index: src/ResolvExpr/TypeEnvironment.h
===================================================================
--- src/ResolvExpr/TypeEnvironment.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ResolvExpr/TypeEnvironment.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 12:24:58 2015
 // Last Modified By : Aaron B. Moss
-// Last Modified On : Wed Jun 13 16:31:00 2018
-// Update Count     : 4
+// Last Modified On : Fri Jun 29 16:00:00 2018
+// Update Count     : 5
 //
 
@@ -24,4 +24,6 @@
 #include <utility>                         // for pair
 #include <vector>                          // for vector
+
+#include "WidenMode.h"                 // for WidenMode
 
 #include "Common/InternedString.h"         // for interned_string
@@ -95,12 +97,18 @@
 
 		void initialize( const EqvClass &src, EqvClass &dest );
+		void initialize( const EqvClass &src, EqvClass &dest, const Type *ty );
 		EqvClass();
-		EqvClass( std::vector<interned_string>&& vars, BoundType&& bound );
 		EqvClass( const EqvClass &other );
+		EqvClass( const EqvClass &other, const Type *ty );
+		EqvClass( EqvClass &&other );
 		EqvClass &operator=( const EqvClass &other );
+		EqvClass &operator=( EqvClass &&other );
 		void print( std::ostream &os, Indenter indent = {} ) const;
-	};
-#endif
-
+
+		/// Takes ownership of `ty`, freeing old `type`
+		void set_type(Type* ty);
+	};
+#endif
+	
 	class TypeEnvironment;
 
@@ -206,6 +214,7 @@
 			WidenMode widenMode, const SymTab::Indexer& indexer );
 #if !1
-		void add( const EqvClass &eqvClass );
-		void add( EqvClass &&eqvClass  );
+	private:
+		void add( EqvClass &&eqvClass );
+	public:
 		void add( const Type::ForallList &tyDecls );
 		void add( const TypeSubstitution & sub );
@@ -226,13 +235,11 @@
 		/// and extracts open variables.
 		void addActual( const TypeEnvironment& actualEnv, OpenVarSet& openVars );
+
+		/// Disallows widening for all bindings in the environment
+		void forbidWidening();
 #endif
 
 		iterator begin() { return { this, bindings->begin() }; }
 		iterator end() { return { this, bindings->end() }; }
-#if 0
-		typedef std::list< EqvClass >::const_iterator const_iterator;
-		const_iterator begin() const { return env.begin(); }
-		const_iterator end() const { return env.end(); }
-#endif
 	};
 
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ResolvExpr/Unify.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 12:27:10 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 16 16:22:54 2017
-// Update Count     : 42
+// Last Modified By : Aaron B. Moss
+// Last Modified On : Mon Jun 18 11:58:00 2018
+// Update Count     : 43
 //
 
@@ -122,135 +122,4 @@
 	}
 
-	bool isFtype( Type *type ) {
-		if ( dynamic_cast< FunctionType* >( type ) ) {
-			return true;
-		} else if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( type ) ) {
-			return typeInst->get_isFtype();
-		} // if
-		return false;
-	}
-
-	bool bindVar( TypeInstType *typeInst, Type *other, const TypeDecl::Data & data, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer ) {
-		// remove references from other, so that type variables can only bind to value types
-		other = other->stripReferences();
-		OpenVarSet::const_iterator tyvar = openVars.find( typeInst->get_name() );
-		assert( tyvar != openVars.end() );
-		if ( ! tyVarCompatible( tyvar->second, other ) ) {
-			return false;
-		} // if
-		if ( occurs( other, typeInst->get_name(), env ) ) {
-			return false;
-		} // if
-		if ( const EqvClass *curClass = env.lookup( typeInst->get_name() ) ) {
-			if ( curClass->type ) {
-				Type *common = 0;
-				// attempt to unify equivalence class type (which has qualifiers stripped, so they must be restored) with the type to bind to
-				Type* newType = curClass->type->clone();
-				newType->get_qualifiers() = typeInst->get_qualifiers();
-				if ( unifyInexact( newType, other, env, needAssertions, haveAssertions, openVars, widenMode & WidenMode( curClass->allowWidening, true ), indexer, common ) ) {
-					if ( common ) {
-						common->get_qualifiers() = Type::Qualifiers();
-						EqvClass newClass = *curClass;
-						newClass.type = common;
-						env.add( std::move(newClass) );
-					} // if
-					return true;
-				} else {
-					return false;
-				} // if
-			} else {
-				EqvClass newClass = *curClass;
-				newClass.type = other->clone();
-				newClass.type->get_qualifiers() = Type::Qualifiers();
-				newClass.allowWidening = widenMode.widenFirst && widenMode.widenSecond;
-				env.add( std::move(newClass) );
-			} // if
-		} else {
-			EqvClass newClass;
-			newClass.vars.insert( typeInst->get_name() );
-			newClass.type = other->clone();
-			newClass.type->get_qualifiers() = Type::Qualifiers();
-			newClass.allowWidening = widenMode.widenFirst && widenMode.widenSecond;
-			newClass.data = data;
-			env.add( newClass );
-		} // if
-		return true;
-	}
-
-	bool bindVarToVar( TypeInstType *var1, TypeInstType *var2, const TypeDecl::Data & data, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer ) {
-		bool result = true;
-		const EqvClass *class1 = env.lookup( var1->get_name() );
-		const EqvClass *class2 = env.lookup( var2->get_name() );
-		bool widen1 = false, widen2 = false;
-		Type *type1 = nullptr, *type2 = nullptr;
-
-		if ( class1 ) {
-			if ( class1->type ) {
-				if ( occurs( class1->type, var2->get_name(), env ) ) {
-					return false;
-				} // if
-				type1 = class1->type->clone();
-			} // if
-			widen1 = widenMode.widenFirst && class1->allowWidening;
-		} // if
-		if ( class2 ) {
-			if ( class2->type ) {
-				if ( occurs( class2->type, var1->get_name(), env ) ) {
-					return false;
-				} // if
-				type2 = class2->type->clone();
-			} // if
-			widen2 = widenMode.widenSecond && class2->allowWidening;
-		} // if
-
-		if ( type1 && type2 ) {
-//    std::cerr << "has type1 && type2" << std::endl;
-			WidenMode newWidenMode ( widen1, widen2 );
-			Type *common = 0;
-			if ( unifyInexact( type1, type2, env, needAssertions, haveAssertions, openVars, newWidenMode, indexer, common ) ) {
-				EqvClass newClass1 = *class1;
-				newClass1.vars.insert( class2->vars.begin(), class2->vars.end() );
-				newClass1.allowWidening = widen1 && widen2;
-				if ( common ) {
-					common->get_qualifiers() = Type::Qualifiers();
-					newClass1.type = common;
-				} // if
-				env.add( std::move(newClass1) );
-			} else {
-				result = false;
-			} // if
-		} else if ( class1 && class2 ) {
-			if ( type1 ) {
-				EqvClass newClass1 = *class1;
-				newClass1.vars.insert( class2->vars.begin(), class2->vars.end() );
-				newClass1.allowWidening = widen1;
-				env.add( std::move(newClass1) );
-			} else {
-				EqvClass newClass2 = *class2;
-				newClass2.vars.insert( class1->vars.begin(), class1->vars.end() );
-				newClass2.allowWidening = widen2;
-				env.add( std::move(newClass2) );
-			} // if
-		} else if ( class1 ) {
-			EqvClass newClass1 = *class1;
-			newClass1.vars.insert( var2->get_name() );
-			newClass1.allowWidening = widen1;
-			env.add( std::move(newClass1) );
-		} else if ( class2 ) {
-			EqvClass newClass2 = *class2;
-			newClass2.vars.insert( var1->get_name() );
-			newClass2.allowWidening = widen2;
-			env.add( std::move(newClass2) );
-		} else {
-			EqvClass newClass;
-			newClass.vars.insert( var1->get_name() );
-			newClass.vars.insert( var2->get_name() );
-			newClass.allowWidening = widen1 && widen2;
-			newClass.data = data;
-			env.add( newClass );
-		} // if
-		return result;
-	}
-
 	bool unify( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, OpenVarSet &openVars, const SymTab::Indexer &indexer ) {
 		OpenVarSet closedVars;
@@ -290,9 +159,9 @@
 
 		if ( isopen1 && isopen2 && entry1->second == entry2->second ) {
-			result = bindVarToVar( var1, var2, entry1->second, env, needAssertions, haveAssertions, openVars, widenMode, indexer );
+			result = env.bindVarToVar( var1, var2, entry1->second, needAssertions, haveAssertions, openVars, widenMode, indexer );
 		} else if ( isopen1 ) {
-			result = bindVar( var1, type2, entry1->second, env, needAssertions, haveAssertions, openVars, widenMode, indexer );
+			result = env.bindVar( var1, type2, entry1->second, needAssertions, haveAssertions, openVars, widenMode, indexer );
 		} else if ( isopen2 ) { // TODO: swap widenMode values in call, since type positions are flipped?
-			result = bindVar( var2, type1, entry2->second, env, needAssertions, haveAssertions, openVars, widenMode, indexer );
+			result = env.bindVar( var2, type1, entry2->second, needAssertions, haveAssertions, openVars, widenMode, indexer );
 		} else {
 			PassVisitor<Unify> comparator( type2, env, needAssertions, haveAssertions, openVars, widenMode, indexer );
Index: src/ResolvExpr/Unify.h
===================================================================
--- src/ResolvExpr/Unify.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/ResolvExpr/Unify.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 13:09:04 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 21 23:09:34 2017
-// Update Count     : 3
+// Last Modified By : Aaron B. Moss
+// Last Modified On : Mon Jun 18 11:58:00 2018
+// Update Count     : 4
 //
 
@@ -21,4 +21,5 @@
 #include "SynTree/Declaration.h"  // for TypeDecl, TypeDecl::Data
 #include "TypeEnvironment.h"      // for AssertionSet, OpenVarSet
+#include "WidenMode.h"            // for WidenMode
 
 class Type;
@@ -29,19 +30,8 @@
 
 namespace ResolvExpr {
-	struct WidenMode {
-		WidenMode( bool widenFirst, bool widenSecond ): widenFirst( widenFirst ), widenSecond( widenSecond ) {}
-		WidenMode &operator|=( const WidenMode &other ) { widenFirst |= other.widenFirst; widenSecond |= other.widenSecond; return *this; }
-		WidenMode &operator&=( const WidenMode &other ) { widenFirst &= other.widenFirst; widenSecond &= other.widenSecond; return *this; }
-		WidenMode operator|( const WidenMode &other ) { WidenMode newWM( *this ); newWM |= other; return newWM; }
-		WidenMode operator&( const WidenMode &other ) { WidenMode newWM( *this ); newWM &= other; return newWM; }
-		operator bool() { return widenFirst && widenSecond; }
-
-		bool widenFirst : 1, widenSecond : 1;
-	};
-
-	bool bindVar( TypeInstType *typeInst, Type *other, const TypeDecl::Data & data, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer );
 	bool unify( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, OpenVarSet &openVars, const SymTab::Indexer &indexer );
 	bool unify( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, OpenVarSet &openVars, const SymTab::Indexer &indexer, Type *&commonType );
 	bool unifyExact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, OpenVarSet &openVars, const SymTab::Indexer &indexer );
+	bool unifyInexact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer, Type *&common );
 
 	template< typename Iterator1, typename Iterator2 >
Index: src/ResolvExpr/WidenMode.h
===================================================================
--- src/ResolvExpr/WidenMode.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/ResolvExpr/WidenMode.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,35 @@
+//
+// 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.
+//
+// WidenMode.h --
+//
+// Author           : Aaron B. Moss
+// Created On       : Mon Jun 18 11:58:00 2018
+// Last Modified By : Aaron B. Moss
+// Last Modified On : Mon Jun 18 11:58:00 2018
+// Update Count     : 1
+//
+
+#pragma once
+
+namespace ResolvExpr {
+	struct WidenMode {
+		WidenMode( bool widenFirst, bool widenSecond ): widenFirst( widenFirst ), widenSecond( widenSecond ) {}
+		WidenMode &operator|=( const WidenMode &other ) { widenFirst |= other.widenFirst; widenSecond |= other.widenSecond; return *this; }
+		WidenMode &operator&=( const WidenMode &other ) { widenFirst &= other.widenFirst; widenSecond &= other.widenSecond; return *this; }
+		WidenMode operator|( const WidenMode &other ) { WidenMode newWM( *this ); newWM |= other; return newWM; }
+		WidenMode operator&( const WidenMode &other ) { WidenMode newWM( *this ); newWM &= other; return newWM; }
+		operator bool() { return widenFirst && widenSecond; }
+
+		bool widenFirst : 1, widenSecond : 1;
+	};
+} // namespace ResolvExpr
+
+// Local Variables: //
+// tab-width: 4 //
+// mode: c++ //
+// compile-command: "make install" //
+// End: //
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SymTab/Indexer.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -106,19 +106,14 @@
 		if ( ! CodeGen::isCtorDtorAssign( id ) ) return;
 
-		// helpful data structure
+		// helpful data structure to organize properties for a type
 		struct ValueType {
-			struct DeclBall {
+			struct DeclBall { // properties for this particular decl
 				IdData decl;
-				bool isUserDefinedFunc; // properties for this particular decl
-				bool isDefaultCtor;
-				bool isDtor;
+				bool isUserDefinedFunc;
 				bool isCopyFunc;
 			};
 			// properties for this type
-			bool existsUserDefinedFunc = false;    // any user-defined function found
-			bool existsUserDefinedCtor = false;    // any user-defined constructor found
-			bool existsUserDefinedDtor = false;    // any user-defined destructor found
 			bool existsUserDefinedCopyFunc = false;    // user-defined copy ctor found
-			bool existsUserDefinedDefaultCtor = false; // user-defined default ctor found
+			BaseSyntaxNode * deleteStmt = nullptr;     // non-null if a user-defined function is found
 			std::list< DeclBall > decls;
 
@@ -127,14 +122,13 @@
 			ValueType & operator+=( IdData data ) {
 				DeclarationWithType * function = data.id;
-				bool isUserDefinedFunc = ! LinkageSpec::isOverridable( function->get_linkage() );
-				bool isDefaultCtor = InitTweak::isDefaultConstructor( function );
-				bool isDtor = InitTweak::isDestructor( function );
-				bool isCopyFunc = InitTweak::isCopyFunction( function, function->get_name() );
-				decls.push_back( DeclBall{ data, isUserDefinedFunc, isDefaultCtor, isDtor, isCopyFunc } );
-				existsUserDefinedFunc = existsUserDefinedFunc || isUserDefinedFunc;
-				existsUserDefinedCtor = existsUserDefinedCtor || (isUserDefinedFunc && CodeGen::isConstructor( function->get_name() ) );
-				existsUserDefinedDtor = existsUserDefinedDtor || (isUserDefinedFunc && isDtor);
+				bool isUserDefinedFunc = ! LinkageSpec::isOverridable( function->linkage );
+				bool isCopyFunc = InitTweak::isCopyFunction( function, function->name );
+				decls.push_back( DeclBall{ data, isUserDefinedFunc, isCopyFunc } );
 				existsUserDefinedCopyFunc = existsUserDefinedCopyFunc || (isUserDefinedFunc && isCopyFunc);
-				existsUserDefinedDefaultCtor = existsUserDefinedDefaultCtor || (isUserDefinedFunc && isDefaultCtor);
+				if ( isUserDefinedFunc && ! deleteStmt ) {
+					// any user-defined function can act as an implicit delete statement for generated constructors.
+					// a delete stmt should not act as an implicit delete statement.
+					deleteStmt = data.id;
+				}
 				return *this;
 			}
@@ -148,5 +142,5 @@
 		for ( auto decl : copy ) {
 			if ( FunctionDecl * function = dynamic_cast< FunctionDecl * >( decl.id ) ) {
-				std::list< DeclarationWithType * > & params = function->get_functionType()->get_parameters();
+				std::list< DeclarationWithType * > & params = function->type->parameters;
 				assert( ! params.empty() );
 				// use base type of pointer, so that qualifiers on the pointer type aren't considered.
@@ -160,21 +154,33 @@
 
 		// if a type contains user defined ctor/dtor/assign, then special rules trigger, which determine
-		// the set of ctor/dtor/assign that are seen by the requester. In particular, if the user defines
-		// a default ctor, then the generated default ctor should never be seen, likewise for copy ctor
-		// and dtor. If the user defines any ctor/dtor, then no generated field ctors should be seen.
-		// If the user defines any ctor then the generated default ctor should not be seen (intrinsic default
-		// ctor must be overridden exactly).
+		// the set of ctor/dtor/assign that can be used  by the requester. In particular, if the user defines
+		// a default ctor, then the generated default ctor is unavailable, likewise for copy ctor
+		// and dtor. If the user defines any ctor/dtor, then no generated field ctors are available.
+		// If the user defines any ctor then the generated default ctor is unavailable (intrinsic default
+		// ctor must be overridden exactly). If the user defines anything that looks like a copy constructor,
+		// then the generated copy constructor is unavailable, and likewise for the assignment operator.
 		for ( std::pair< const std::string, ValueType > & pair : funcMap ) {
 			ValueType & val = pair.second;
 			for ( ValueType::DeclBall ball : val.decls ) {
-				bool noUserDefinedFunc = ! val.existsUserDefinedFunc;
-				bool isUserDefinedFunc = ball.isUserDefinedFunc;
-				bool isAcceptableDefaultCtor = (! val.existsUserDefinedCtor || (! val.existsUserDefinedDefaultCtor && ball.decl.id->get_linkage() == LinkageSpec::Intrinsic)) && ball.isDefaultCtor; // allow default constructors only when no user-defined constructors exist, except in the case of intrinsics, which require exact overrides
-				bool isAcceptableCopyFunc = ! val.existsUserDefinedCopyFunc && ball.isCopyFunc; // handles copy ctor and assignment operator
-				bool isAcceptableDtor = ! val.existsUserDefinedDtor && ball.isDtor;
-				if ( noUserDefinedFunc || isUserDefinedFunc || isAcceptableDefaultCtor || isAcceptableCopyFunc || isAcceptableDtor ) {
-					// decl conforms to the rules described above, so it should be seen by the requester
-					out.push_back( ball.decl );
+				bool isNotUserDefinedFunc = ! ball.isUserDefinedFunc && ball.decl.id->linkage != LinkageSpec::Intrinsic;
+				bool isCopyFunc = ball.isCopyFunc;
+				bool existsUserDefinedCopyFunc = val.existsUserDefinedCopyFunc;
+
+				// only implicitly delete non-user defined functions that are not intrinsic, and are
+				// not copy functions (assignment or copy constructor). If a  user-defined copy function exists,
+				// do not pass along the non-user-defined copy functions since signatures do not have to match,
+				// and the generated functions will often be cheaper.
+				if ( isNotUserDefinedFunc ) {
+					if ( isCopyFunc ) {
+						// Skip over non-user-defined copy functions when there is a user-defined copy function.
+						// Since their signatures do not have to be exact, deleting them is the wrong choice.
+						if ( existsUserDefinedCopyFunc ) continue;
+					} else {
+						// delete non-user-defined non-copy functions if applicable.
+						// deleteStmt will be non-null only if a user-defined function is found.
+						ball.decl.deleteStmt = val.deleteStmt;
+					}
 				}
+				out.push_back( ball.decl );
 			}
 		}
@@ -471,5 +477,5 @@
 	void Indexer::addId( DeclarationWithType * decl, Expression * baseExpr ) {
 		// default handling of conflicts is to raise an error
-		addId( decl, [decl](IdData &, const std::string & msg) { SemanticError( decl, msg ); return true; }, baseExpr );
+		addId( decl, [decl](IdData &, const std::string & msg) { SemanticError( decl, msg ); return true; }, baseExpr, decl->isDeleted ? decl : nullptr );
 	}
 
Index: src/SymTab/Mangler.cc
===================================================================
--- src/SymTab/Mangler.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SymTab/Mangler.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -171,7 +171,14 @@
 					"w",	// SignedInt128
 					"Uw",	// UnsignedInt128
+					"x",   // Float80
+					"y",   // Float128
 				};
+				static_assert(
+					sizeof(btLetter)/sizeof(btLetter[0]) == BasicType::NUMBER_OF_BASIC_TYPES,
+					"Each basic type kind should have a corresponding mangler letter"
+				);
 
 				printQualifiers( basicType );
+				assert( basicType->get_kind() < sizeof(btLetter)/sizeof(btLetter[0]) );
 				mangleName << btLetter[ basicType->get_kind() ];
 			}
@@ -218,8 +225,8 @@
 				GuardValue( inFunctionType );
 				inFunctionType = true;
-				std::list< Type* > returnTypes = getTypes( functionType->get_returnVals() );
+				std::list< Type* > returnTypes = getTypes( functionType->returnVals );
 				acceptAll( returnTypes, *visitor );
 				mangleName << "_";
-				std::list< Type* > paramTypes = getTypes( functionType->get_parameters() );
+				std::list< Type* > paramTypes = getTypes( functionType->parameters );
 				acceptAll( paramTypes, *visitor );
 				mangleName << "_";
@@ -229,14 +236,14 @@
 				printQualifiers( refType );
 
-				mangleName << ( refType->get_name().length() + prefix.length() ) << prefix << refType->get_name();
+				mangleName << ( refType->name.length() + prefix.length() ) << prefix << refType->name;
 
 				if ( mangleGenericParams ) {
-					std::list< Expression* >& params = refType->get_parameters();
+					std::list< Expression* >& params = refType->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(), *visitor );
+							assertf(paramType, "Aggregate parameters should be type expressions: %s", toCString(*param));
+							maybeAccept( paramType->type, *visitor );
 						}
 						mangleName << "_";
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SymTab/Validate.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -49,4 +49,5 @@
 #include "CodeGen/OperatorTable.h"     // for isCtorDtor, isCtorDtorAssign
 #include "Common/GC.h"                 // for new_static_root, register_static_root
+#include "ControlStruct/Mutate.h"      // for ForExprMutator
 #include "Common/PassVisitor.h"        // for PassVisitor, WithDeclsToAdd
 #include "Common/ScopedMap.h"          // for ScopedMap
@@ -77,5 +78,4 @@
 class SwitchStmt;
 
-
 #define debugPrint( x ) if ( doDebug ) { std::cout << x; }
 
@@ -275,4 +275,5 @@
 		Concurrency::applyKeywords( translationUnit );
 		acceptAll( translationUnit, fpd ); // must happen before autogenerateRoutines, after Concurrency::applyKeywords because uniqueIds must be set on declaration before resolution
+		ControlStruct::hoistControlDecls( translationUnit );  // hoist initialization out of for statements; must happen before autogenerateRoutines
 		autogenerateRoutines( translationUnit ); // moved up, used to be below compoundLiteral - currently needs EnumAndPointerDecay
 		Concurrency::implementMutexFuncs( translationUnit );
Index: src/SynTree/BasicType.cc
===================================================================
--- src/SynTree/BasicType.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/BasicType.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -55,4 +55,6 @@
 	  case DoubleImaginary:
 	  case LongDoubleImaginary:
+	  case Float80:
+	  case Float128:
 		return false;
 	  case NUMBER_OF_BASIC_TYPES:
Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/Declaration.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -92,4 +92,5 @@
 }
 
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/Declaration.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -83,4 +83,5 @@
 	Expression *asmName;
 	std::list< Attribute * > attributes;
+	bool isDeleted = false;
 
 	DeclarationWithType( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, Type::FuncSpecifiers fs );
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/Expression.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -640,4 +640,43 @@
 
 
+DefaultArgExpr::DefaultArgExpr( Expression * expr ) : expr( expr ) {
+	assert( expr->result );
+	result = expr->result->clone();
+}
+DefaultArgExpr::DefaultArgExpr( const DefaultArgExpr & other ) : Expression( other ), expr( maybeClone( other.expr ) ) {}
+
+void DefaultArgExpr::print( std::ostream & os, Indenter indent ) const {
+	os << "Default Argument Expression" << std::endl << indent+1;
+	expr->print( os, indent+1 );
+}
+
+GenericExpr::Association::Association( Type * type, Expression * expr ) : type( type ), expr( expr ), isDefault( false ) {}
+GenericExpr::Association::Association( Expression * expr ) : type( nullptr ), expr( expr ), isDefault( true ) {}
+GenericExpr::Association::Association( const Association & other ) : type( maybeClone( other.type ) ), expr( maybeClone( other.expr ) ), isDefault( other.isDefault ) {}
+
+GenericExpr::GenericExpr( Expression * control, const std::list<Association> & assoc ) : Expression(), control( control ), associations( assoc ) {}
+GenericExpr::GenericExpr( const GenericExpr & other ) : Expression(other), control( maybeClone( other.control ) ), associations( other.associations ) {}
+GenericExpr::~GenericExpr() {}
+
+void GenericExpr::print( std::ostream & os, Indenter indent ) const {
+	os << "C11 _Generic Expression" << std::endl << indent+1;
+	control->print( os, indent+1 );
+	os << std::endl << indent+1 << "... with associations: " << std::endl;
+	for ( const Association & assoc : associations ) {
+		os << indent+1;
+		if (assoc.isDefault) {
+			os << "... default: ";
+			assoc.expr->print( os, indent+1 );
+		} else {
+			os << "... type: ";
+			assoc.type->print( os, indent+1 );
+			os << std::endl << indent+1 << "... expression: ";
+			assoc.expr->print( os, indent+1 );
+			os << std::endl;
+		}
+		os << std::endl;
+	}
+}
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/Expression.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -833,4 +833,45 @@
 };
 
+/// expression wrapping the use of a default argument - should never make it past the resolver.
+class DefaultArgExpr : public Expression {
+public:
+	Expression * expr;
+
+	DefaultArgExpr( Expression * expr );
+	DefaultArgExpr( const DefaultArgExpr & other );
+
+	virtual DefaultArgExpr * clone() const { return new DefaultArgExpr( * this ); }
+	virtual void accept( Visitor & v ) { v.visit( this ); }
+	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
+};
+
+/// C11 _Generic expression
+class GenericExpr : public Expression {
+public:
+	struct Association {
+		Type * type = nullptr;
+		Expression * expr = nullptr;
+		bool isDefault = false;
+
+		Association( Type * type, Expression * expr );
+		Association( Expression * expr );
+		Association( const Association & other );
+		Association & operator=( const Association & other ) = delete; // at the moment this isn't used, and I don't want to implement it
+	};
+
+	Expression * control;
+	std::list<Association> associations;
+
+	GenericExpr( Expression * control, const std::list<Association> & assoc );
+	GenericExpr( const GenericExpr & other );
+	~GenericExpr();
+
+	virtual GenericExpr * clone() const { return new GenericExpr( * this ); }
+	virtual void accept( Visitor & v ) { v.visit( this ); }
+	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
+};
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/Mutator.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -93,4 +93,6 @@
 	virtual Expression * mutate( InitExpr  * initExpr ) = 0;
 	virtual Expression * mutate( DeletedExpr * delExpr ) = 0;
+	virtual Expression * mutate( DefaultArgExpr * argExpr ) = 0;
+	virtual Expression * mutate( GenericExpr * genExpr ) = 0;
 
 	virtual Type * mutate( VoidType * basicType ) = 0;
Index: src/SynTree/ReferenceToType.cc
===================================================================
--- src/SynTree/ReferenceToType.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/ReferenceToType.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -46,8 +46,8 @@
 
 namespace {
-	void doLookup( const std::list< Declaration* > &members, const std::string &name, std::list< Declaration* > &foundDecls ) {
-		for ( std::list< Declaration* >::const_iterator i = members.begin(); i != members.end(); ++i ) {
-			if ( (*i)->get_name() == name ) {
-				foundDecls.push_back( *i );
+	void doLookup( const std::list< Declaration * > & members, const std::string & name, std::list< Declaration* > & foundDecls ) {
+		for ( Declaration * decl : members ) {
+			if ( decl->name == name ) {
+				foundDecls.push_back( decl );
 			} // if
 		} // for
@@ -56,5 +56,5 @@
 
 StructInstType::StructInstType( const Type::Qualifiers & tq, StructDecl * baseStruct, const std::list< Attribute * > & attributes ) :
-		Parent( tq, baseStruct->get_name(), attributes ), baseStruct( baseStruct ) {}
+		Parent( tq, baseStruct->name, attributes ), baseStruct( baseStruct ) {}
 
 std::string StructInstType::typeString() const { return "struct"; }
@@ -80,5 +80,5 @@
 void StructInstType::lookup( const std::string &name, std::list< Declaration* > &foundDecls ) const {
 	assert( baseStruct );
-	doLookup( baseStruct->get_members(), name, foundDecls );
+	doLookup( baseStruct->members, name, foundDecls );
 }
 
@@ -99,5 +99,5 @@
 
 UnionInstType::UnionInstType( const Type::Qualifiers & tq, UnionDecl * baseUnion, const std::list< Attribute * > & attributes ) :
-		Parent( tq, baseUnion->get_name(), attributes ), baseUnion( baseUnion ) {}
+		Parent( tq, baseUnion->name, attributes ), baseUnion( baseUnion ) {}
 
 std::string UnionInstType::typeString() const { return "union"; }
@@ -123,5 +123,5 @@
 void UnionInstType::lookup( const std::string &name, std::list< Declaration* > &foundDecls ) const {
 	assert( baseUnion );
-	doLookup( baseUnion->get_members(), name, foundDecls );
+	doLookup( baseUnion->members, name, foundDecls );
 }
 
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/Statement.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -208,6 +208,6 @@
 }
 
-WhileStmt::WhileStmt( Expression *condition, Statement *body, bool isDoWhile ):
-	Statement(), condition( condition), body( body), isDoWhile( isDoWhile) {
+WhileStmt::WhileStmt( Expression *condition, Statement *body, std::list< Statement * > & initialization, bool isDoWhile ):
+	Statement(), condition( condition), body( body), initialization( initialization ), isDoWhile( isDoWhile) {
 }
 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/Statement.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -213,8 +213,9 @@
 	Expression *condition;
 	Statement *body;
+	std::list<Statement *> initialization;
 	bool isDoWhile;
 
 	WhileStmt( Expression *condition,
-	       Statement *body, bool isDoWhile = false );
+	       Statement *body, std::list<Statement *> & initialization, bool isDoWhile = false );
 	WhileStmt( const WhileStmt &other );
 
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/SynTree.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -101,4 +101,6 @@
 class InitExpr;
 class DeletedExpr;
+class DefaultArgExpr;
+class GenericExpr;
 
 class Type;
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/Type.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 25 15:16:32 2017
-// Update Count     : 38
+// Last Modified On : Fri Jun 22 10:17:19 2018
+// Update Count     : 39
 //
 #include "Type.h"
@@ -24,5 +24,5 @@
 using namespace std;
 
-const char *BasicType::typeNames[BasicType::NUMBER_OF_BASIC_TYPES] = {
+const char *BasicType::typeNames[] = {
 	"_Bool",
 	"char",
@@ -48,5 +48,11 @@
 	"__int128",
 	"unsigned __int128",
+	"__float80",
+	"__float128"
 };
+static_assert(
+	sizeof(BasicType::typeNames)/sizeof(BasicType::typeNames[0]) == BasicType::NUMBER_OF_BASIC_TYPES,
+	"Each basic type name should have a corresponding kind enum value"
+);
 
 Type::Type( const Qualifiers &tq, const std::list< Attribute * > & attributes ) : tq( tq ), attributes( attributes ) {}
@@ -58,5 +64,5 @@
 
 // These must remain in the same order as the corresponding bit fields.
-const char * Type::FuncSpecifiersNames[] = { "inline", "fortran", "_Noreturn" };
+const char * Type::FuncSpecifiersNames[] = { "inline", "_Noreturn", "fortran" };
 const char * Type::StorageClassesNames[] = { "extern", "static", "auto", "register", "_Thread_local" };
 const char * Type::QualifiersNames[] = { "const", "restrict", "volatile", "lvalue", "mutex", "_Atomic" };
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/Type.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -230,4 +230,6 @@
 		SignedInt128,
 		UnsignedInt128,
+		Float80,
+		Float128,
 		NUMBER_OF_BASIC_TYPES
 	} kind;
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/SynTree/Visitor.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -95,4 +95,6 @@
 	virtual void visit( InitExpr *  initExpr ) = 0;
 	virtual void visit( DeletedExpr * delExpr ) = 0;
+	virtual void visit( DefaultArgExpr * argExpr ) = 0;
+	virtual void visit( GenericExpr * genExpr ) = 0;
 
 	virtual void visit( VoidType * basicType ) = 0;
Index: src/benchmark/Makefile.am
===================================================================
--- src/benchmark/Makefile.am	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/benchmark/Makefile.am	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -92,27 +92,52 @@
 
 ## =========================================================================================================
+loop$(EXEEXT):
+	@@BACKEND_CC@ loop.c      -DBENCH_N=5000000000 -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+function$(EXEEXT):
+	@@BACKEND_CC@ function.c  -DBENCH_N=5000000000 -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+fetch_add$(EXEEXT):
+	@@BACKEND_CC@ fetch_add.c -DBENCH_N=500000000  -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
 ctxswitch$(EXEEXT): \
+	loop.run				\
+	function.run			\
+	fetch_add.run			\
 	ctxswitch-pthread.run		\
 	ctxswitch-cfa_coroutine.run	\
 	ctxswitch-cfa_thread.run	\
+	ctxswitch-cfa_thread2.run	\
 	ctxswitch-upp_coroutine.run	\
 	ctxswitch-upp_thread.run	\
+	-ctxswitch-kos_fibre.run	\
+	-ctxswitch-kos_fibre2.run	\
 	ctxswitch-goroutine.run		\
 	ctxswitch-java_thread.run
 
+ctxswitch-pthread$(EXEEXT):
+	@@BACKEND_CC@ ctxswitch/pthreads.c     -DBENCH_N=50000000  -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
 ctxswitch-cfa_coroutine$(EXEEXT):
-	@${CC}        ctxswitch/cfa_cor.c   -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+	@${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}
+	@${CC}        ctxswitch/cfa_thrd.c     -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-cfa_thread2$(EXEEXT):
+	@${CC}        ctxswitch/cfa_thrd2.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}
+	@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}
+	@u++          ctxswitch/upp_thrd.cc    -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-kos_fibre$(EXEEXT):
+	@${CXX}       ctxswitch/kos_fibre.cpp  -DBENCH_N=50000000  -I. -I/home/tdelisle/software/KOS/src/ -g -O2 -lfibre -lpthread -lrt
+
+ctxswitch-kos_fibre2$(EXEEXT):
+	@${CXX}       ctxswitch/kos_fibre2.cpp -DBENCH_N=50000000  -I. -I/home/tdelisle/software/KOS/src/ -g -O2 -lfibre -lpthread -lrt
 
 ctxswitch-goroutine$(EXEEXT):
@@ -127,6 +152,7 @@
 ## =========================================================================================================
 mutex$(EXEEXT) :\
-	mutex-function.run	\
-	mutex-fetch_add.run	\
+	loop.run			\
+	function.run		\
+	fetch_add.run		\
 	mutex-pthread_lock.run	\
 	mutex-upp.run		\
@@ -135,10 +161,4 @@
 	mutex-cfa4.run		\
 	mutex-java_thread.run
-
-mutex-function$(EXEEXT):
-	@@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-fetch_add$(EXEEXT):
-	@@BACKEND_CC@ mutex/fetch_add.c   -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
 mutex-pthread_lock$(EXEEXT):
@@ -277,8 +297,8 @@
 
 compile-io$(EXEEXT):
-	@${CC} -quiet -fsyntax-only -w ../tests/io.c					@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+	@${CC} -quiet -fsyntax-only -w ../tests/io1.c				@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
 compile-monitor$(EXEEXT):
-	@${CC} -quiet -fsyntax-only -w ../tests/concurrent/monitor.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+	@${CC} -quiet -fsyntax-only -w ../tests/concurrent/monitor.c	@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
 compile-operators$(EXEEXT):
@@ -289,4 +309,4 @@
 
 compile-typeof$(EXEEXT):
-	@${CC} -quiet -fsyntax-only -w ../tests/typeof.c				@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
+	@${CC} -quiet -fsyntax-only -w ../tests/typeof.c			@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
Index: src/benchmark/Makefile.in
===================================================================
--- src/benchmark/Makefile.in	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/benchmark/Makefile.in	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -505,27 +505,51 @@
 	@echo "}"
 
+loop$(EXEEXT):
+	@@BACKEND_CC@ loop.c      -DBENCH_N=5000000000 -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+function$(EXEEXT):
+	@@BACKEND_CC@ function.c  -DBENCH_N=5000000000 -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+fetch_add$(EXEEXT):
+	@@BACKEND_CC@ fetch_add.c -DBENCH_N=500000000  -I. -lrt -pthread ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
 ctxswitch$(EXEEXT): \
+	loop.run				\
+	function.run			\
+	fetch_add.run			\
 	ctxswitch-pthread.run		\
 	ctxswitch-cfa_coroutine.run	\
 	ctxswitch-cfa_thread.run	\
+	ctxswitch-cfa_thread2.run	\
 	ctxswitch-upp_coroutine.run	\
 	ctxswitch-upp_thread.run	\
+	-ctxswitch-kos_fibre.run	\
+	-ctxswitch-kos_fibre2.run	\
 	ctxswitch-goroutine.run		\
 	ctxswitch-java_thread.run
 
+ctxswitch-pthread$(EXEEXT):
+	@@BACKEND_CC@ ctxswitch/pthreads.c     -DBENCH_N=50000000  -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
 ctxswitch-cfa_coroutine$(EXEEXT):
-	@${CC}        ctxswitch/cfa_cor.c   -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+	@${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}
+	@${CC}        ctxswitch/cfa_thrd.c     -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-cfa_thread2$(EXEEXT):
+	@${CC}        ctxswitch/cfa_thrd2.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}
+	@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}
+	@u++          ctxswitch/upp_thrd.cc    -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-kos_fibre$(EXEEXT):
+	@${CXX}       ctxswitch/kos_fibre.cpp  -DBENCH_N=50000000  -I. -I/home/tdelisle/software/KOS/src/ -g -O2 -lfibre -lpthread -lrt
+
+ctxswitch-kos_fibre2$(EXEEXT):
+	@${CXX}       ctxswitch/kos_fibre2.cpp -DBENCH_N=50000000  -I. -I/home/tdelisle/software/KOS/src/ -g -O2 -lfibre -lpthread -lrt
 
 ctxswitch-goroutine$(EXEEXT):
@@ -539,6 +563,7 @@
 
 mutex$(EXEEXT) :\
-	mutex-function.run	\
-	mutex-fetch_add.run	\
+	loop.run			\
+	function.run		\
+	fetch_add.run		\
 	mutex-pthread_lock.run	\
 	mutex-upp.run		\
@@ -547,10 +572,4 @@
 	mutex-cfa4.run		\
 	mutex-java_thread.run
-
-mutex-function$(EXEEXT):
-	@@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-fetch_add$(EXEEXT):
-	@@BACKEND_CC@ mutex/fetch_add.c   -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
 mutex-pthread_lock$(EXEEXT):
@@ -682,8 +701,8 @@
 
 compile-io$(EXEEXT):
-	@${CC} -quiet -fsyntax-only -w ../tests/io.c					@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+	@${CC} -quiet -fsyntax-only -w ../tests/io1.c				@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
 compile-monitor$(EXEEXT):
-	@${CC} -quiet -fsyntax-only -w ../tests/concurrent/monitor.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+	@${CC} -quiet -fsyntax-only -w ../tests/concurrent/monitor.c	@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
 compile-operators$(EXEEXT):
@@ -694,5 +713,5 @@
 
 compile-typeof$(EXEEXT):
-	@${CC} -quiet -fsyntax-only -w ../tests/typeof.c				@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+	@${CC} -quiet -fsyntax-only -w ../tests/typeof.c			@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
Index: src/benchmark/ctxswitch/cfa_thrd2.c
===================================================================
--- src/benchmark/ctxswitch/cfa_thrd2.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/benchmark/ctxswitch/cfa_thrd2.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <thread>
+
+#include "bench.h"
+
+volatile bool done = false;
+
+thread Fibre {};
+
+void main(Fibre & this) {
+	while(!done) {
+		yield();
+	}
+}
+
+int main(int argc, char* argv[]) {
+	Fibre f1;
+  	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			yield();
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	done = true;
+	return 0;
+}
Index: src/benchmark/ctxswitch/kos_fibre.cpp
===================================================================
--- src/benchmark/ctxswitch/kos_fibre.cpp	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/benchmark/ctxswitch/kos_fibre.cpp	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,14 @@
+#include <libfibre/fibre.h>
+
+#include "bench.h"
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			Fibre::yield();
+		},
+		result
+	)
+	printf("%llu\n", result);
+	return 0;
+}
Index: src/benchmark/ctxswitch/kos_fibre2.cpp
===================================================================
--- src/benchmark/ctxswitch/kos_fibre2.cpp	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/benchmark/ctxswitch/kos_fibre2.cpp	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,26 @@
+#include <libfibre/fibre.h>
+
+#include "bench.h"
+
+volatile bool done = false;
+
+static void f1main() {
+	while(!done) {
+		Fibre::yield();
+	}
+}
+
+int main(int argc, char* argv[]) {
+	Fibre* f1 = (new Fibre)->run(f1main);
+  	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			Fibre::yield();
+		},
+		result
+	)
+	printf("%llu\n", result);
+	done = true;
+	Fibre::yield();
+	f1->join();
+	return 0;
+}
Index: src/benchmark/fetch_add.c
===================================================================
--- src/benchmark/fetch_add.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/benchmark/fetch_add.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,22 @@
+#include <stdio.h>
+
+#include "bench.h"
+
+volatile int value;
+
+void __attribute__((noinline)) do_call() {
+	__atomic_add_fetch( &value, 1, __ATOMIC_SEQ_CST );
+	asm volatile ("");
+	__atomic_sub_fetch( &value, 1, __ATOMIC_SEQ_CST );
+}
+
+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/function.c
===================================================================
--- src/benchmark/function.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/benchmark/function.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,18 @@
+#include <stdio.h>
+
+#include "bench.h"
+
+void __attribute__((noinline)) do_call() {
+	asm volatile("" ::: "memory");
+}
+
+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/loop.c
===================================================================
--- src/benchmark/loop.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/benchmark/loop.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+#include "bench.h"
+
+int main(int argc, char* argv[]) {
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			asm volatile("" ::: "memory");
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+}
Index: c/benchmark/mutex/fetch_add.c
===================================================================
--- src/benchmark/mutex/fetch_add.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ 	(revision )
@@ -1,22 +1,0 @@
-#include <stdio.h>
-
-#include "bench.h"
-
-volatile int value;
-
-void __attribute__((noinline)) do_call() {
-	__atomic_add_fetch( &value, 1, __ATOMIC_SEQ_CST );
-	asm volatile ("");
-	__atomic_sub_fetch( &value, 1, __ATOMIC_SEQ_CST );
-}
-
-int main(int argc, char* argv[]) {
-	BENCH(
-		for (size_t i = 0; i < n; i++) {
-			do_call();
-		},
-		result
-	)
-
-	printf("%llu\n", result);
-}
Index: c/benchmark/mutex/function.c
===================================================================
--- src/benchmark/mutex/function.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ 	(revision )
@@ -1,18 +1,0 @@
-#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/libcfa/Makefile.am
===================================================================
--- src/libcfa/Makefile.am	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/Makefile.am	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -51,5 +51,5 @@
 # not all platforms support concurrency, add option do disable it
 if BUILD_CONCURRENCY
-headers += concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor
+headers += concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor concurrency/mutex
 endif
 
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/Makefile.in	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -97,5 +97,5 @@
 
 # not all platforms support concurrency, add option do disable it
-@BUILD_CONCURRENCY_TRUE@am__append_3 = concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor
+@BUILD_CONCURRENCY_TRUE@am__append_3 = concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor concurrency/mutex
 
 # not all platforms support concurrency, add option do disable it
@@ -153,13 +153,14 @@
 	containers/pair.c containers/result.c containers/vector.c \
 	concurrency/coroutine.c concurrency/thread.c \
-	concurrency/kernel.c concurrency/monitor.c assert.c \
-	exception.c virtual.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \
-	concurrency/alarm.c concurrency/invoke.c \
-	concurrency/preemption.c
+	concurrency/kernel.c concurrency/monitor.c concurrency/mutex.c \
+	assert.c exception.c virtual.c \
+	concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \
+	concurrency/invoke.c concurrency/preemption.c
 am__dirstamp = $(am__leading_dot)dirstamp
 @BUILD_CONCURRENCY_TRUE@am__objects_1 = concurrency/libcfa_d_a-coroutine.$(OBJEXT) \
 @BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_d_a-thread.$(OBJEXT) \
 @BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_d_a-kernel.$(OBJEXT) \
-@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_d_a-monitor.$(OBJEXT)
+@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_d_a-monitor.$(OBJEXT) \
+@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_d_a-mutex.$(OBJEXT)
 am__objects_2 = libcfa_d_a-fstream.$(OBJEXT) \
 	libcfa_d_a-iostream.$(OBJEXT) libcfa_d_a-iterator.$(OBJEXT) \
@@ -188,12 +189,13 @@
 	containers/result.c containers/vector.c \
 	concurrency/coroutine.c concurrency/thread.c \
-	concurrency/kernel.c concurrency/monitor.c assert.c \
-	exception.c virtual.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \
-	concurrency/alarm.c concurrency/invoke.c \
-	concurrency/preemption.c
+	concurrency/kernel.c concurrency/monitor.c concurrency/mutex.c \
+	assert.c exception.c virtual.c \
+	concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \
+	concurrency/invoke.c concurrency/preemption.c
 @BUILD_CONCURRENCY_TRUE@am__objects_5 = concurrency/libcfa_a-coroutine.$(OBJEXT) \
 @BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_a-thread.$(OBJEXT) \
 @BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_a-kernel.$(OBJEXT) \
-@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_a-monitor.$(OBJEXT)
+@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_a-monitor.$(OBJEXT) \
+@BUILD_CONCURRENCY_TRUE@	concurrency/libcfa_a-mutex.$(OBJEXT)
 am__objects_6 = libcfa_a-fstream.$(OBJEXT) libcfa_a-iostream.$(OBJEXT) \
 	libcfa_a-iterator.$(OBJEXT) libcfa_a-limits.$(OBJEXT) \
@@ -264,7 +266,7 @@
 	containers/result containers/vector concurrency/coroutine \
 	concurrency/thread concurrency/kernel concurrency/monitor \
-	${shell find stdhdr -type f -printf "%p "} math gmp time_t.h \
-	clock bits/align.h bits/containers.h bits/defs.h bits/debug.h \
-	bits/locks.h concurrency/invoke.h
+	concurrency/mutex ${shell find stdhdr -type f -printf "%p "} \
+	math gmp time_t.h clock bits/align.h bits/containers.h \
+	bits/defs.h bits/debug.h bits/locks.h concurrency/invoke.h
 HEADERS = $(nobase_cfa_include_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
@@ -548,4 +550,6 @@
 concurrency/libcfa_d_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \
 	concurrency/$(DEPDIR)/$(am__dirstamp)
+concurrency/libcfa_d_a-mutex.$(OBJEXT): concurrency/$(am__dirstamp) \
+	concurrency/$(DEPDIR)/$(am__dirstamp)
 concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT):  \
 	concurrency/$(am__dirstamp) \
@@ -580,4 +584,6 @@
 	concurrency/$(DEPDIR)/$(am__dirstamp)
 concurrency/libcfa_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \
+	concurrency/$(DEPDIR)/$(am__dirstamp)
+concurrency/libcfa_a-mutex.$(OBJEXT): concurrency/$(am__dirstamp) \
 	concurrency/$(DEPDIR)/$(am__dirstamp)
 concurrency/libcfa_a-alarm.$(OBJEXT): concurrency/$(am__dirstamp) \
@@ -635,4 +641,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-kernel.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-monitor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-mutex.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-preemption.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-thread.Po@am__quote@
@@ -642,4 +649,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-kernel.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-mutex.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-preemption.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-thread.Po@am__quote@
@@ -930,4 +938,18 @@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`
 
+concurrency/libcfa_d_a-mutex.o: concurrency/mutex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-mutex.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo -c -o concurrency/libcfa_d_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_d_a-mutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_d_a-mutex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c
+
+concurrency/libcfa_d_a-mutex.obj: concurrency/mutex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-mutex.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo -c -o concurrency/libcfa_d_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_d_a-mutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_d_a-mutex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`
+
 libcfa_d_a-assert.o: assert.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-assert.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-assert.Tpo -c -o libcfa_d_a-assert.o `test -f 'assert.c' || echo '$(srcdir)/'`assert.c
@@ -1237,4 +1259,18 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`
+
+concurrency/libcfa_a-mutex.o: concurrency/mutex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-mutex.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo -c -o concurrency/libcfa_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_a-mutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_a-mutex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c
+
+concurrency/libcfa_a-mutex.obj: concurrency/mutex.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-mutex.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo -c -o concurrency/libcfa_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_a-mutex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_a-mutex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`
 
 libcfa_a-assert.o: assert.c
Index: src/libcfa/bits/containers.h
===================================================================
--- src/libcfa/bits/containers.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/bits/containers.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -183,4 +183,9 @@
 		verify( *tail == NULL );
 		return val;
+	}
+
+	forall(dtype T | is_node(T))
+	static inline bool ?!=?( __queue(T) & this, zero_t zero ) {
+		return this.head != 0;
 	}
 #endif
@@ -261,4 +266,9 @@
 		__get( node ).prev = NULL;
 	}
+
+	forall(dtype T | sized(T))
+	static inline bool ?!=?( __dllist(T) & this, zero_t zero ) {
+		return this.head != 0;
+	}
 	#undef next
 	#undef prev
Index: src/libcfa/bits/locks.h
===================================================================
--- src/libcfa/bits/locks.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/bits/locks.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -18,4 +18,11 @@
 #include "bits/debug.h"
 #include "bits/defs.h"
+#include <assert.h>
+
+#ifdef __cforall
+	extern "C" {
+		#include <pthread.h>
+	}
+#endif
 
 // pause to prevent excess processor bus usage
@@ -112,3 +119,47 @@
 		__atomic_clear( &this.lock, __ATOMIC_RELEASE );
 	}
+
+
+	#ifdef __CFA_WITH_VERIFY__
+		extern bool __cfaabi_dbg_in_kernel();
+	#endif
+
+	struct __bin_sem_t {
+		bool     		signaled;
+		pthread_mutex_t 	lock;
+		pthread_cond_t  	cond;
+	};
+
+	static inline void ?{}(__bin_sem_t & this) with( this ) {
+		signaled = false;
+		pthread_mutex_init(&lock, NULL);
+		pthread_cond_init (&cond, NULL);
+	}
+
+	static inline void ^?{}(__bin_sem_t & this) with( this ) {
+		pthread_mutex_destroy(&lock);
+		pthread_cond_destroy (&cond);
+	}
+
+	static inline void wait(__bin_sem_t & this) with( this ) {
+		verify(__cfaabi_dbg_in_kernel());
+		pthread_mutex_lock(&lock);
+			if(!signaled) {   // this must be a loop, not if!
+				pthread_cond_wait(&cond, &lock);
+			}
+			signaled = false;
+		pthread_mutex_unlock(&lock);
+	}
+
+	static inline void post(__bin_sem_t & this) with( this ) {
+		verify(__cfaabi_dbg_in_kernel());
+
+		pthread_mutex_lock(&lock);
+			bool needs_signal = !signaled;
+			signaled = true;
+		pthread_mutex_unlock(&lock);
+
+		if (needs_signal)
+			pthread_cond_signal(&cond);
+	}
 #endif
Index: src/libcfa/concurrency/invoke.h
===================================================================
--- src/libcfa/concurrency/invoke.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/concurrency/invoke.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 30 22:33:59 2018
-// Update Count     : 30
+// Last Modified On : Sat May 19 08:23:21 2018
+// Update Count     : 31
 //
 
@@ -18,7 +18,4 @@
 #include "bits/locks.h"
 
-#define TL_GET( member ) kernelTLS.member
-#define TL_SET( member, value ) kernelTLS.member = value;
-
 #ifdef __cforall
 extern "C" {
@@ -28,4 +25,22 @@
 #ifndef _INVOKE_H_
 #define _INVOKE_H_
+
+#ifdef __ARM_ARCH
+	// function prototypes are only really used by these macros on ARM
+	void disable_global_interrupts();
+	void enable_global_interrupts();
+
+	#define TL_GET( member ) ( { __typeof__( kernelTLS.member ) target; \
+                disable_global_interrupts(); \
+                target = kernelTLS.member; \
+                enable_global_interrupts(); \
+                target; } )
+	#define TL_SET( member, value ) disable_global_interrupts(); \
+		kernelTLS.member = value; \
+		enable_global_interrupts();
+#else
+	#define TL_GET( member ) kernelTLS.member
+	#define TL_SET( member, value ) kernelTLS.member = value;
+#endif
 
 	#ifdef __cforall
Index: src/libcfa/concurrency/kernel
===================================================================
--- src/libcfa/concurrency/kernel	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/concurrency/kernel	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -23,4 +23,5 @@
 extern "C" {
 #include <pthread.h>
+#include <semaphore.h>
 }
 
@@ -43,15 +44,45 @@
 extern struct cluster * mainCluster;
 
-enum FinishOpCode { No_Action, Release, Schedule, Release_Schedule, Release_Multi, Release_Multi_Schedule };
+enum FinishOpCode { No_Action, Release, Schedule, Release_Schedule, Release_Multi, Release_Multi_Schedule, Callback };
+
+typedef void (*__finish_callback_fptr_t)(void);
 
 //TODO use union, many of these fields are mutually exclusive (i.e. MULTI vs NOMULTI)
 struct FinishAction {
 	FinishOpCode action_code;
+	/*
+	// Union of possible actions
+	union {
+		// Option 1 : locks and threads
+		struct {
+			// 1 thread or N thread
+			union {
+				thread_desc * thrd;
+				struct {
+					thread_desc ** thrds;
+					unsigned short thrd_count;
+				};
+			};
+			// 1 lock or N lock
+			union {
+				__spinlock_t * lock;
+				struct {
+					__spinlock_t ** locks;
+					unsigned short lock_count;
+				};
+			};
+		};
+		// Option 2 : action pointer
+		__finish_callback_fptr_t callback;
+	};
+	/*/
 	thread_desc * thrd;
+	thread_desc ** thrds;
+	unsigned short thrd_count;
 	__spinlock_t * lock;
 	__spinlock_t ** locks;
 	unsigned short lock_count;
-	thread_desc ** thrds;
-	unsigned short thrd_count;
+	__finish_callback_fptr_t callback;
+	//*/
 };
 static inline void ?{}(FinishAction & this) {
@@ -82,4 +113,18 @@
 	pthread_t kernel_thread;
 
+	// RunThread data
+	// Action to do after a thread is ran
+	struct FinishAction finish;
+
+	// Preemption data
+	// 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;
+
+	// Idle lock
+	__bin_sem_t idleLock;
+
 	// Termination
 	// Set to true to notify the processor should terminate
@@ -89,19 +134,6 @@
 	semaphore terminated;
 
-	// RunThread data
-	// Action to do after a thread is ran
-	struct FinishAction finish;
-
-	// Preemption data
-	// 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;
-
-	// Idle lock
-
 	// Link lists fields
-	struct {
+	struct __dbg_node_proc {
 		struct processor * next;
 		struct processor * prev;
@@ -150,5 +182,5 @@
 
 	// Link lists fields
-	struct {
+	struct __dbg_node_cltr {
 		cluster * next;
 		cluster * prev;
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/concurrency/kernel.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -16,4 +16,6 @@
 //C Includes
 #include <stddef.h>
+#include <errno.h>
+#include <string.h>
 extern "C" {
 #include <stdio.h>
@@ -49,5 +51,7 @@
 thread_desc * mainThread;
 
-struct { __dllist_t(cluster    ) list; __spinlock_t lock; } global_clusters;
+extern "C" {
+struct { __dllist_t(cluster) list; __spinlock_t lock; } __cfa_dbg_global_clusters;
+}
 
 //-----------------------------------------------------------------------------
@@ -143,17 +147,21 @@
 	runner.proc = &this;
 
+	idleLock{};
+
 	start( &this );
 }
 
 void ^?{}(processor & this) with( this ){
-	if( ! do_terminate ) {
+	if( ! __atomic_load_n(&do_terminate, __ATOMIC_ACQUIRE) ) {
 		__cfaabi_dbg_print_safe("Kernel : core %p signaling termination\n", &this);
-		terminate(&this);
-		verify(this.do_terminate);
-		verify( kernelTLS.this_processor != &this);
+
+		__atomic_store_n(&do_terminate, true, __ATOMIC_RELAXED);
+		wake( &this );
+
 		P( terminated );
 		verify( kernelTLS.this_processor != &this);
-		pthread_join( kernel_thread, NULL );
-	}
+	}
+
+	pthread_join( kernel_thread, NULL );
 }
 
@@ -194,5 +202,5 @@
 
 		thread_desc * readyThread = NULL;
-		for( unsigned int spin_count = 0; ! this->do_terminate; spin_count++ )
+		for( unsigned int spin_count = 0; ! __atomic_load_n(&this->do_terminate, __ATOMIC_SEQ_CST); spin_count++ )
 		{
 			readyThread = nextThread( this->cltr );
@@ -213,5 +221,6 @@
 			else
 			{
-				spin(this, &spin_count);
+				// spin(this, &spin_count);
+				halt(this);
 			}
 		}
@@ -257,23 +266,20 @@
 // its final actions must be executed from the kernel
 void finishRunning(processor * this) with( this->finish ) {
-	if( action_code == Release ) {
-		verify( ! kernelTLS.preemption_state.enabled );
+	verify( ! kernelTLS.preemption_state.enabled );
+	choose( action_code ) {
+	case No_Action:
+		break;
+	case Release:
 		unlock( *lock );
-	}
-	else if( action_code == Schedule ) {
+	case Schedule:
 		ScheduleThread( thrd );
-	}
-	else if( action_code == Release_Schedule ) {
-		verify( ! kernelTLS.preemption_state.enabled );
+	case Release_Schedule:
 		unlock( *lock );
 		ScheduleThread( thrd );
-	}
-	else if( action_code == Release_Multi ) {
-		verify( ! kernelTLS.preemption_state.enabled );
+	case Release_Multi:
 		for(int i = 0; i < lock_count; i++) {
 			unlock( *locks[i] );
 		}
-	}
-	else if( action_code == Release_Multi_Schedule ) {
+	case Release_Multi_Schedule:
 		for(int i = 0; i < lock_count; i++) {
 			unlock( *locks[i] );
@@ -282,14 +288,9 @@
 			ScheduleThread( thrds[i] );
 		}
-	}
-	else {
-		assert(action_code == No_Action);
-	}
-}
-
-// Handles spinning logic
-// TODO : find some strategy to put cores to sleep after some time
-void spin(processor * this, unsigned int * spin_count) {
-	(*spin_count)++;
+	case Callback:
+		callback();
+	default:
+		abort("KERNEL ERROR: Unexpected action to run after thread");
+	}
 }
 
@@ -396,6 +397,19 @@
 	with( *thrd->curr_cluster ) {
 		lock  ( ready_queue_lock __cfaabi_dbg_ctx2 );
+		bool was_empty = !(ready_queue != 0);
 		append( ready_queue, thrd );
 		unlock( ready_queue_lock );
+
+		if(was_empty) {
+			lock      (proc_list_lock __cfaabi_dbg_ctx2);
+			if(idles) {
+				wake_fast(idles.head);
+			}
+			unlock    (proc_list_lock);
+		}
+		else if( struct processor * idle = idles.head ) {
+			wake_fast(idle);
+		}
+
 	}
 
@@ -497,4 +511,18 @@
 }
 
+void BlockInternal(__finish_callback_fptr_t callback) {
+	disable_interrupts();
+	with( *kernelTLS.this_processor ) {
+		finish.action_code = Callback;
+		finish.callback    = callback;
+	}
+
+	verify( ! kernelTLS.preemption_state.enabled );
+	returnToKernel();
+	verify( ! kernelTLS.preemption_state.enabled );
+
+	enable_interrupts( __cfaabi_dbg_ctx );
+}
+
 // KERNEL ONLY
 void LeaveThread(__spinlock_t * lock, thread_desc * thrd) {
@@ -518,6 +546,6 @@
 	__cfaabi_dbg_print_safe("Kernel : Starting\n");
 
-	global_clusters.list{ __get };
-	global_clusters.lock{};
+	__cfa_dbg_global_clusters.list{ __get };
+	__cfa_dbg_global_clusters.lock{};
 
 	// Initialize the main cluster
@@ -600,6 +628,7 @@
 	// When its coroutine terminates, it return control to the mainThread
 	// which is currently here
-	mainProcessor->do_terminate = true;
+	__atomic_store_n(&mainProcessor->do_terminate, true, __ATOMIC_RELEASE);
 	returnToKernel();
+	mainThread->self_cor.state = Halted;
 
 	// THE SYSTEM IS NOW COMPLETELY STOPPED
@@ -617,6 +646,6 @@
 	^(mainThread){};
 
-	^(global_clusters.list){};
-	^(global_clusters.lock){};
+	^(__cfa_dbg_global_clusters.list){};
+	^(__cfa_dbg_global_clusters.lock){};
 
 	__cfaabi_dbg_print_safe("Kernel : Shutdown complete\n");
@@ -627,21 +656,27 @@
 //=============================================================================================
 
-// void halt(processor * this) with( this ) {
-// 	pthread_mutex_lock( &idle.lock );
-
-
-
-// 	// SKULLDUGGERY: Even if spurious wake-up is a thing
-// 	// spuriously waking up a kernel thread is not a big deal
-// 	// if it is very rare.
-// 	pthread_cond_wait( &idle.cond, &idle.lock);
-// 	pthread_mutex_unlock( &idle.lock );
-// }
-
-// void wake(processor * this) with( this ) {
-// 	pthread_mutex_lock  (&idle.lock);
-// 	pthread_cond_signal (&idle.cond);
-// 	pthread_mutex_unlock(&idle.lock);
-// }
+void halt(processor * this) with( *this ) {
+	// verify( ! __atomic_load_n(&do_terminate, __ATOMIC_SEQ_CST) );
+
+	with( *cltr ) {
+		lock      (proc_list_lock __cfaabi_dbg_ctx2);
+		remove    (procs, *this);
+		push_front(idles, *this);
+		unlock    (proc_list_lock);
+	}
+
+	__cfaabi_dbg_print_safe("Kernel : Processor %p ready to sleep\n", this);
+
+	wait( idleLock );
+
+	__cfaabi_dbg_print_safe("Kernel : Processor %p woke up and ready to run\n", this);
+
+	with( *cltr ) {
+		lock      (proc_list_lock __cfaabi_dbg_ctx2);
+		remove    (idles, *this);
+		push_front(procs, *this);
+		unlock    (proc_list_lock);
+	}
+}
 
 //=============================================================================================
@@ -758,13 +793,13 @@
 // Global Queues
 void doregister( cluster     & cltr ) {
-	lock      ( global_clusters.lock __cfaabi_dbg_ctx2);
-	push_front( global_clusters.list, cltr );
-	unlock    ( global_clusters.lock );
+	lock      ( __cfa_dbg_global_clusters.lock __cfaabi_dbg_ctx2);
+	push_front( __cfa_dbg_global_clusters.list, cltr );
+	unlock    ( __cfa_dbg_global_clusters.lock );
 }
 
 void unregister( cluster     & cltr ) {
-	lock  ( global_clusters.lock __cfaabi_dbg_ctx2);
-	remove( global_clusters.list, cltr );
-	unlock( global_clusters.lock );
+	lock  ( __cfa_dbg_global_clusters.lock __cfaabi_dbg_ctx2);
+	remove( __cfa_dbg_global_clusters.list, cltr );
+	unlock( __cfa_dbg_global_clusters.lock );
 }
 
Index: src/libcfa/concurrency/kernel_private.h
===================================================================
--- src/libcfa/concurrency/kernel_private.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/concurrency/kernel_private.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -48,4 +48,5 @@
 void BlockInternal(__spinlock_t * locks [], unsigned short count);
 void BlockInternal(__spinlock_t * locks [], unsigned short count, thread_desc * thrds [], unsigned short thrd_count);
+void BlockInternal(__finish_callback_fptr_t callback);
 void LeaveThread(__spinlock_t * lock, thread_desc * thrd);
 
@@ -56,6 +57,16 @@
 void runThread(processor * this, thread_desc * dst);
 void finishRunning(processor * this);
-void terminate(processor * this);
-void spin(processor * this, unsigned int * spin_count);
+void halt(processor * this);
+
+static inline void wake_fast(processor * this) {
+	__cfaabi_dbg_print_safe("Kernel : Waking up processor %p\n", this);
+	post( this->idleLock );
+}
+
+static inline void wake(processor * this) {
+	disable_interrupts();
+	wake_fast(this);
+	enable_interrupts( __cfaabi_dbg_ctx );
+}
 
 struct event_kernel_t {
@@ -65,12 +76,4 @@
 
 extern event_kernel_t * event_kernel;
-
-//extern thread_local coroutine_desc * volatile this_coroutine;
-//extern thread_local thread_desc *    volatile this_thread;
-//extern thread_local processor *      volatile this_processor;
-
-// extern volatile thread_local bool preemption_in_progress;
-// extern volatile thread_local bool preemption_enabled;
-// extern volatile thread_local unsigned short disable_preempt_count;
 
 struct __cfa_kernel_preemption_state_t {
Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/concurrency/monitor.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -297,5 +297,5 @@
 	this.count = count;
 
-	// Sort monitors based on address -> TODO use a sort specialized for small numbers
+	// Sort monitors based on address
 	__libcfa_small_sort(this.m, count);
 
Index: src/libcfa/concurrency/mutex
===================================================================
--- src/libcfa/concurrency/mutex	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/libcfa/concurrency/mutex	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,171 @@
+
+//                              -*- Mode: CFA -*-
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// mutex --
+//
+// Author           : Thierry Delisle
+// Created On       : Fri May 25 01:24:09 2018
+// Last Modified By : Thierry Delisle
+// Last Modified On : Fri May 25 01:24:12 2018
+// Update Count     : 0
+//
+
+#pragma once
+
+#include <stdbool.h>
+
+#include "bits/algorithms.h"
+#include "bits/locks.h"
+
+#include "invoke.h"
+#include "time_t.h"
+
+//-----------------------------------------------------------------------------
+// Locks
+
+// Exclusive lock - non-recursive
+// ---
+struct mutex_lock {
+	// Spin lock used for mutual exclusion
+	__spinlock_t lock;
+
+	// List of blocked threads
+	__queue_t(struct thread_desc) blocked_threads;
+
+	// Locked flag
+	bool is_locked;
+};
+
+void ?{}(mutex_lock & this);
+void ^?{}(mutex_lock & this);
+void lock(mutex_lock & this);
+bool try_lock(mutex_lock & this);
+void unlock(mutex_lock & this);
+
+// Exclusive lock - recursive
+// ---
+struct recursive_mutex_lock{
+	// Spin lock used for mutual exclusion
+	__spinlock_t lock;
+
+	// List of blocked threads
+	__queue_t(struct thread_desc) blocked_threads;
+
+	// Current thread owning the lock
+	struct thread_desc * owner;
+
+	// Number of recursion level
+	size_t recursion_count;
+};
+
+void ?{}(recursive_mutex_lock & this);
+void ^?{}(recursive_mutex_lock & this);
+void lock(recursive_mutex_lock & this);
+bool try_lock(recursive_mutex_lock & this);
+void unlock(recursive_mutex_lock & this);
+
+trait is_lock(dtype L | sized(L)) {
+	void lock  (L &);
+	void unlock(L &);
+};
+
+//-----------------------------------------------------------------------------
+// Condition variables
+
+struct condition_variable {
+	// Spin lock used for mutual exclusion
+	__spinlock_t lock;
+
+	// List of blocked threads
+	__queue_t(struct thread_desc) blocked_threads;
+};
+
+void ?{}(condition_variable & this);
+void ^?{}(condition_variable & this);
+
+void notify_one(condition_variable & this);
+void notify_all(condition_variable & this);
+
+void wait(condition_variable & this);
+
+forall(dtype L | is_lock(L))
+void wait(condition_variable & this, L & l);
+
+//-----------------------------------------------------------------------------
+// Scopes
+forall(dtype L | is_lock(L)) {
+	#if !defined( __TUPLE_ARRAYS_EXIST__ )
+	void lock  ( L * locks [], size_t count);
+	void unlock( L * locks [], size_t count);
+
+	struct lock_scope {
+		L **   locks;
+		size_t count;
+	};
+
+	static inline void ?{}(lock_scope(L) & this) {
+		this.locks = NULL;
+		this.count = 0;
+	}
+
+	static inline void ^?{}(lock_scope(L) & this) {
+		if(this.count > 0) {
+			unlock(this.locks, this.count);
+		}
+	}
+
+	static inline lock_scope(L) lock( L * locks [], size_t count, lock_scope(L) & scope) {
+		lock(locks, count);
+		scope.locks = locks;
+		scope.count = count;
+	}
+
+	static inline void unlock( lock_scope(L) & this ) {
+		unlock(this.locks, this.count);
+		this.count = 0;
+	}
+
+	static inline void release( lock_scope(L) & this ) {
+		this.count = 0;
+	}
+	#else
+	void lock( [L &...] locks );
+	void unlock( [L &...] locks );
+
+	forall(size_t N)
+	struct lock_scope {
+		bool released;
+		[L &... N] locks;
+	};
+
+	void ?{}(lock_scope(L) & this) = void;
+	void ?{}(lock_scope(L) & this, lock_scope(L) other) = void;
+	void ?move?(lock_scope(L) & this, lock_scope(L) & other) = default;
+
+	static inline void ^?{}(lock_scope(L) & this) {
+		if( !this.released ) {
+			unlock(this.locks);
+		}
+	}
+
+	forall(size_t N)
+	static inline lock_scope(L, N) lock( [L &...] locks ) {
+		lock(locks);
+		return @{false, locks};
+	}
+
+	static inline void unlock( lock_scope(L) & this ) {
+		unlock(this.locks);
+		this.released = true
+	}
+
+	static inline void release( lock_scope(L) & this ) {
+		this.released = true;
+	}
+	#endif
+}
Index: src/libcfa/concurrency/mutex.c
===================================================================
--- src/libcfa/concurrency/mutex.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/libcfa/concurrency/mutex.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,193 @@
+
+//                              -*- Mode: CFA -*-
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// mutex.c --
+//
+// Author           : Thierry Delisle
+// Created On       : Fri May 25 01:37:11 2018
+// Last Modified By : Thierry Delisle
+// Last Modified On : Fri May 25 01:37:51 2018
+// Update Count     : 0
+//
+
+#include "mutex"
+
+#include "kernel_private.h"
+
+//-----------------------------------------------------------------------------
+// Locks
+
+// Exclusive lock - non-recursive
+// ---
+void ?{}(mutex_lock & this) {
+	this.lock{};
+	this.blocked_threads{};
+}
+
+void ^?{}(mutex_lock & this) {
+	// default
+}
+
+void lock(mutex_lock & this) with(this) {
+	lock( lock __cfaabi_dbg_ctx2 );
+	if( is_locked ) {
+		append( blocked_threads, kernelTLS.this_thread );
+		BlockInternal( &lock );
+	}
+	else {
+		is_locked = true;
+		unlock( lock );
+	}
+}
+
+bool try_lock(mutex_lock & this) with(this) {
+	bool ret = false;
+	lock( lock __cfaabi_dbg_ctx2 );
+	if( !is_locked ) {
+		ret = true;
+		is_locked = true;
+	}
+	unlock( lock );
+	return ret;
+}
+
+void unlock(mutex_lock & this) {
+	lock( this.lock __cfaabi_dbg_ctx2 );
+	this.is_locked = (this.blocked_threads != 0);
+	WakeThread(
+		pop_head( this.blocked_threads )
+	);
+	unlock( this.lock );
+}
+
+// Exclusive lock - non-recursive
+// ---
+void ?{}(recursive_mutex_lock & this) {
+	this.lock{};
+	this.blocked_threads{};
+	this.owner = NULL;
+	this.recursion_count = 0;
+}
+
+void ^?{}(recursive_mutex_lock & this) {
+	// default
+}
+
+void lock(recursive_mutex_lock & this) with(this) {
+	lock( lock __cfaabi_dbg_ctx2 );
+	if( owner == NULL ) {
+		owner = kernelTLS.this_thread;
+		recursion_count = 1;
+		unlock( lock );
+	}
+	else if( owner == kernelTLS.this_thread ) {
+		recursion_count++;
+		unlock( lock );
+	}
+	else {
+		append( blocked_threads, kernelTLS.this_thread );
+		BlockInternal( &lock );
+	}
+}
+
+bool try_lock(recursive_mutex_lock & this) with(this) {
+	bool ret = false;
+	lock( lock __cfaabi_dbg_ctx2 );
+	if( owner == NULL ) {
+		owner = kernelTLS.this_thread;
+		recursion_count = 1;
+		ret = true;
+	}
+	else if( owner == kernelTLS.this_thread ) {
+		recursion_count++;
+		ret = true;
+	}
+	unlock( lock );
+	return ret;
+}
+
+void unlock(recursive_mutex_lock & this) with(this) {
+	lock( lock __cfaabi_dbg_ctx2 );
+	recursion_count--;
+	if( recursion_count == 0 ) {
+		thread_desc * thrd = pop_head( blocked_threads );
+		owner = thrd;
+		recursion_count = (thrd ? 1 : 0);
+		WakeThread( thrd );
+	}
+	unlock( lock );
+}
+
+//-----------------------------------------------------------------------------
+// Conditions
+void ?{}(condition_variable & this) {
+	this.blocked_threads{};
+}
+
+void ^?{}(condition_variable & this) {
+	// default
+}
+
+void notify_one(condition_variable & this) with(this) {
+	lock( lock __cfaabi_dbg_ctx2 );
+	WakeThread(
+		pop_head( this.blocked_threads )
+	);
+	unlock( lock );
+}
+
+void notify_all(condition_variable & this) with(this) {
+	lock( lock __cfaabi_dbg_ctx2 );
+	while(this.blocked_threads) {
+		WakeThread(
+			pop_head( this.blocked_threads )
+		);
+	}
+	unlock( lock );
+}
+
+void wait(condition_variable & this) {
+	lock( this.lock __cfaabi_dbg_ctx2 );
+	append( this.blocked_threads, kernelTLS.this_thread );
+	BlockInternal( &this.lock );
+}
+
+forall(dtype L | is_lock(L))
+void wait(condition_variable & this, L & l) {
+	lock( this.lock __cfaabi_dbg_ctx2 );
+	append( this.blocked_threads, kernelTLS.this_thread );
+	void __unlock(void) {
+		unlock(l);
+		unlock(this.lock);
+	}
+	BlockInternal( __unlock );
+	lock(l);
+}
+
+//-----------------------------------------------------------------------------
+// Scopes
+forall(dtype L | is_lock(L))
+void lock_all  ( L * locks[], size_t count) {
+	// Sort locks based on addresses
+	__libcfa_small_sort(locks, count);
+
+	// Lock all
+	for(size_t i = 0; i < count; i++) {
+		L * l = locks[i];
+		lock( *l );
+	}
+}
+
+forall(dtype L | is_lock(L))
+void unlock_all( L * locks[], size_t count) {
+	// Lock all
+	for(size_t i = 0; i < count; i++) {
+		L * l = locks[i];
+		unlock( *l );
+	}
+}
Index: src/libcfa/concurrency/preemption.c
===================================================================
--- src/libcfa/concurrency/preemption.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/concurrency/preemption.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jun 5 14:20:42 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Apr  9 13:52:39 2018
-// Update Count     : 36
+// Last Modified On : Tue Jun  5 17:35:49 2018
+// Update Count     : 37
 //
 
@@ -116,5 +116,5 @@
 	// If there are still alarms pending, reset the timer
 	if( alarms->head ) {
-		__cfaabi_dbg_print_buffer_decl( " KERNEL: @%lu(%lu) resetting alarm to %lu.\n", currtime.tv, __kernel_get_time().tv, (alarms->head->alarm - currtime).tv);
+		__cfaabi_dbg_print_buffer_decl( " KERNEL: @%ju(%ju) resetting alarm to %ju.\n", currtime.tv, __kernel_get_time().tv, (alarms->head->alarm - currtime).tv);
 		Duration delta = alarms->head->alarm - currtime;
 		Duration caped = max(delta, 50`us);
@@ -161,5 +161,7 @@
 	void disable_interrupts() {
 		with( kernelTLS.preemption_state ) {
+			#if GCC_VERSION > 50000
 			static_assert(__atomic_always_lock_free(sizeof(enabled), &enabled), "Must be lock-free");
+			#endif
 
 			// Set enabled flag to false
@@ -190,5 +192,7 @@
 			// Check if we need to prempt the thread because an interrupt was missed
 			if( prev == 1 ) {
+				#if GCC_VERSION > 50000
 				static_assert(__atomic_always_lock_free(sizeof(enabled), &enabled), "Must be lock-free");
+				#endif
 
 				// Set enabled flag to true
@@ -217,5 +221,7 @@
 		verifyf( prev != 0u, "Incremented from %u\n", prev );                     // If this triggers someone is enabled already enabled interrupts
 		if( prev == 1 ) {
+			#if GCC_VERSION > 50000
 			static_assert(__atomic_always_lock_free(sizeof(kernelTLS.preemption_state.enabled), &kernelTLS.preemption_state.enabled), "Must be lock-free");
+			#endif
 			// Set enabled flag to true
 			// should be atomic to avoid preemption in the middle of the operation.
@@ -254,11 +260,4 @@
 static void preempt( processor * this ) {
 	sigval_t value = { PREEMPT_NORMAL };
-	pthread_sigqueue( this->kernel_thread, SIGUSR1, value );
-}
-
-// kill wrapper : signal a processor
-void terminate(processor * this) {
-	this->do_terminate = true;
-	sigval_t value = { PREEMPT_TERMINATE };
 	pthread_sigqueue( this->kernel_thread, SIGUSR1, value );
 }
@@ -362,5 +361,5 @@
 	choose(sfp->si_value.sival_int) {
 		case PREEMPT_NORMAL   : ;// Normal case, nothing to do here
-		case PREEMPT_TERMINATE: verify( kernelTLS.this_processor->do_terminate);
+		case PREEMPT_TERMINATE: verify( __atomic_load_n( &kernelTLS.this_processor->do_terminate, __ATOMIC_SEQ_CST ) );
 		default:
 			abort( "internal error, signal value is %d", sfp->si_value.sival_int );
@@ -376,5 +375,7 @@
 
 	// Clear sighandler mask before context switching.
+	#if GCC_VERSION > 50000
 	static_assert( sizeof( sigset_t ) == sizeof( cxt->uc_sigmask ), "Expected cxt->uc_sigmask to be of sigset_t" );
+	#endif
 	if ( pthread_sigmask( SIG_SETMASK, (sigset_t *)&(cxt->uc_sigmask), NULL ) == -1 ) {
 		abort( "internal error, sigprocmask" );
@@ -479,4 +480,10 @@
 }
 
+#ifdef __CFA_WITH_VERIFY__
+bool __cfaabi_dbg_in_kernel() {
+	return !kernelTLS.preemption_state.enabled;
+}
+#endif
+
 // Local Variables: //
 // mode: c //
Index: src/libcfa/fstream
===================================================================
--- src/libcfa/fstream	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/fstream	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Dec  7 15:17:26 2017
-// Update Count     : 130
+// Last Modified On : Tue Jun  5 10:20:25 2018
+// Update Count     : 131
 //
 
@@ -54,5 +54,5 @@
 void open( ofstream &, const char * name );
 void close( ofstream & );
-ofstream & write( ofstream &, const char * data, unsigned long int size );
+ofstream & write( ofstream &, const char * data, size_t size );
 int fmt( ofstream &, const char fmt[], ... );
 
@@ -74,5 +74,5 @@
 void open( ifstream & is, const char * name );
 void close( ifstream & is );
-ifstream & read( ifstream & is, char * data, unsigned long int size );
+ifstream & read( ifstream & is, char * data, size_t size );
 ifstream & ungetc( ifstream & is, char c );
 int fmt( ifstream &, const char fmt[], ... );
Index: src/libcfa/fstream.c
===================================================================
--- src/libcfa/fstream.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/fstream.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Dec  9 09:31:23 2017
-// Update Count     : 275
+// Last Modified On : Tue Jun  5 17:02:56 2018
+// Update Count     : 281
 //
 
@@ -116,5 +116,5 @@
 } // close
 
-ofstream & write( ofstream & os, const char * data, unsigned long int size ) {
+ofstream & write( ofstream & os, const char * data, size_t size ) {
 	if ( fail( os ) ) {
 		fprintf( stderr, "attempt write I/O on failed stream\n" );
@@ -198,5 +198,5 @@
 } // close
 
-ifstream & read( ifstream & is, char * data, unsigned long int size ) {
+ifstream & read( ifstream & is, char * data, size_t size ) {
 	if ( fail( is ) ) {
 		fprintf( stderr, "attempt read I/O on failed stream\n" );
Index: src/libcfa/iostream
===================================================================
--- src/libcfa/iostream	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/iostream	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Apr 28 13:08:24 2018
-// Update Count     : 152
+// Last Modified On : Sat Jun  2 08:07:55 2018
+// Update Count     : 153
 //
 
@@ -56,48 +56,50 @@
 // implement writable for intrinsic types
 
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, _Bool );
+forall( dtype ostype | ostream( ostype ) ) {
+	ostype & ?|?( ostype &, _Bool );
 
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, char );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, signed char );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned char );
+	ostype & ?|?( ostype &, char );
+	ostype & ?|?( ostype &, signed char );
+	ostype & ?|?( ostype &, unsigned char );
 
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, short int );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned short int );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, int );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned int );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long int );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long long int );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned long int );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned long long int );
+	ostype & ?|?( ostype &, short int );
+	ostype & ?|?( ostype &, unsigned short int );
+	ostype & ?|?( ostype &, int );
+	ostype & ?|?( ostype &, unsigned int );
+	ostype & ?|?( ostype &, long int );
+	ostype & ?|?( ostype &, long long int );
+	ostype & ?|?( ostype &, unsigned long int );
+	ostype & ?|?( ostype &, unsigned long long int );
 
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, float ); // FIX ME: should not be required
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, double );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long double );
+	ostype & ?|?( ostype &, float ); // FIX ME: should not be required
+	ostype & ?|?( ostype &, double );
+	ostype & ?|?( ostype &, long double );
 
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, float _Complex );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, double _Complex );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long double _Complex );
+	ostype & ?|?( ostype &, float _Complex );
+	ostype & ?|?( ostype &, double _Complex );
+	ostype & ?|?( ostype &, long double _Complex );
 
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const char * );
-//forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const char16_t * );
+	ostype & ?|?( ostype &, const char * );
+	// 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 * );
+	// 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 * );
+	// ostype & ?|?( ostype &, const wchar_t * );
+	ostype & ?|?( ostype &, const void * );
+
+	// manipulators
+	ostype & ?|?( ostype &, ostype & (*)( ostype & ) );
+	ostype & endl( ostype & );
+	ostype & sep( ostype & );
+	ostype & sepTuple( ostype & );
+	ostype & sepOn( ostype & );
+	ostype & sepOff( ostype & );
+	ostype & sepDisable( ostype & );
+	ostype & sepEnable( ostype & );
+} // distribution
 
 // tuples
 forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } )
 ostype & ?|?( ostype & os, T arg, Params rest );
-
-// manipulators
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, ostype & (*)( ostype & ) );
-forall( dtype ostype | ostream( ostype ) ) ostype & endl( ostype & );
-forall( dtype ostype | ostream( ostype ) ) ostype & sep( ostype & );
-forall( dtype ostype | ostream( ostype ) ) ostype & sepTuple( ostype & );
-forall( dtype ostype | ostream( ostype ) ) ostype & sepOn( ostype & );
-forall( dtype ostype | ostream( ostype ) ) ostype & sepOff( ostype & );
-forall( dtype ostype | ostream( ostype ) ) ostype & sepDisable( ostype & );
-forall( dtype ostype | ostream( ostype ) ) ostype & sepEnable( ostype & );
 
 // writes the range [begin, end) to the given stream
@@ -124,30 +126,32 @@
 }; // readable
 
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, _Bool & );
+forall( dtype istype | istream( istype ) ) {
+	istype & ?|?( istype &, _Bool & );
 
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, char & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, signed char & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned char & );
+	istype & ?|?( istype &, char & );
+	istype & ?|?( istype &, signed char & );
+	istype & ?|?( istype &, unsigned char & );
 
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, short int & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned short int & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, int & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned int & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long int & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long long int & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned long int & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned long long int & );
+	istype & ?|?( istype &, short int & );
+	istype & ?|?( istype &, unsigned short int & );
+	istype & ?|?( istype &, int & );
+	istype & ?|?( istype &, unsigned int & );
+	istype & ?|?( istype &, long int & );
+	istype & ?|?( istype &, long long int & );
+	istype & ?|?( istype &, unsigned long int & );
+	istype & ?|?( istype &, unsigned long long int & );
 
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, float & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, double & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long double & );
+	istype & ?|?( istype &, float & );
+	istype & ?|?( istype &, double & );
+	istype & ?|?( istype &, long double & );
 
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, float _Complex & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, double _Complex & );
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long double _Complex & );
+	istype & ?|?( istype &, float _Complex & );
+	istype & ?|?( istype &, double _Complex & );
+	istype & ?|?( istype &, long double _Complex & );
 
-// manipulators
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, istype & (*)( istype & ) );
-forall( dtype istype | istream( istype ) ) istype & endl( istype & is );
+	// manipulators
+	istype & ?|?( istype &, istype & (*)( istype & ) );
+	istype & endl( istype & is );
+} // distribution
 
 struct _Istream_cstrUC { char * s; };
Index: src/libcfa/iostream.c
===================================================================
--- src/libcfa/iostream.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/iostream.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Apr 28 13:08:25 2018
-// Update Count     : 469
+// Last Modified On : Sat Jun  2 08:24:56 2018
+// Update Count     : 471
 //
 
@@ -26,200 +26,223 @@
 }
 
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, _Bool b ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%s", b ? "true" : "false" );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, char ch ) {
-	fmt( os, "%c", ch );
-	if ( ch == '\n' ) setNL( os, true );
-	sepOff( os );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, signed char c ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%hhd", c );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, unsigned char c ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%hhu", c );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, short int si ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%hd", si );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, unsigned short int usi ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%hu", usi );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, int i ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%d", i );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, unsigned int ui ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%u", ui );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, long int li ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%ld", li );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, unsigned long int uli ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%lu", uli );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, long long int lli ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%lld", lli );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, unsigned long long int ulli ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%llu", ulli );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, float f ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%g", f );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, double d ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%.*lg", DBL_DIG, d );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, long double ld ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%.*Lg", LDBL_DIG, ld );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, float _Complex fc ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%g%+gi", crealf( fc ), cimagf( fc ) );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, double _Complex dc ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%.*lg%+.*lgi", DBL_DIG, creal( dc ), DBL_DIG, cimag( dc ) );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, long double _Complex ldc ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%.*Lg%+.*Lgi", LDBL_DIG, creall( ldc ), LDBL_DIG, cimagl( ldc ) );
-	return os;
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, const char * str ) {
-	enum { Open = 1, Close, OpenClose };
-	static const unsigned char mask[256] @= {
-		// opening delimiters, no space after
-		['('] : Open, ['['] : Open, ['{'] : Open,
-		['='] : Open, ['$'] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open,
-		[(unsigned char)'¡'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open,
-		// closing delimiters, no space before
-		[','] : Close, ['.'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close,
-		['%'] : Close, [(unsigned char)'¢'] : Close, [(unsigned char)'»'] : Close,
-		[')'] : Close, [']'] : Close, ['}'] : Close,
-		// opening-closing delimiters, no space before or after
-		['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose, [':'] : OpenClose,
-		[' '] : OpenClose, ['\f'] : OpenClose, ['\n'] : OpenClose, ['\r'] : OpenClose, ['\t'] : OpenClose, ['\v'] : OpenClose, // isspace
-	}; // mask
-
-  if ( str[0] == '\0' ) { sepOff( os ); return os; }		// null string => no separator
-
-	// first character IS NOT spacing or closing punctuation => add left separator
-	unsigned char ch = str[0];							// must make unsigned
-	if ( sepPrt( os ) && mask[ ch ] != Close && mask[ ch ] != OpenClose ) {
-		fmt( os, "%s", sepGetCur( os ) );
-	} // if
-
-	// if string starts line, must reset to determine open state because separator is off
-	sepReset( os );										// reset separator
-
-	// last character IS spacing or opening punctuation => turn off separator for next item
-	size_t len = strlen( str );
-	ch = str[len - 1];									// must make unsigned
-	if ( sepPrt( os ) && mask[ ch ] != Open && mask[ ch ] != OpenClose ) {
+forall( dtype ostype | ostream( ostype ) ) {
+	ostype & ?|?( ostype & os, _Bool b ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%s", b ? "true" : "false" );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, char ch ) {
+		fmt( os, "%c", ch );
+		if ( ch == '\n' ) setNL( os, true );
+		sepOff( os );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, signed char c ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%hhd", c );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, unsigned char c ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%hhu", c );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, short int si ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%hd", si );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, unsigned short int usi ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%hu", usi );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, int i ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%d", i );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, unsigned int ui ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%u", ui );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, long int li ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%ld", li );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, unsigned long int uli ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%lu", uli );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, long long int lli ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%lld", lli );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, unsigned long long int ulli ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%llu", ulli );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, float f ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%g", f );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, double d ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%.*lg", DBL_DIG, d );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, long double ld ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%.*Lg", LDBL_DIG, ld );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, float _Complex fc ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%g%+gi", crealf( fc ), cimagf( fc ) );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, double _Complex dc ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%.*lg%+.*lgi", DBL_DIG, creal( dc ), DBL_DIG, cimag( dc ) );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, long double _Complex ldc ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%.*Lg%+.*Lgi", LDBL_DIG, creall( ldc ), LDBL_DIG, cimagl( ldc ) );
+		return os;
+	} // ?|?
+
+	ostype & ?|?( ostype & os, const char * str ) {
+		enum { Open = 1, Close, OpenClose };
+		static const unsigned char mask[256] @= {
+			// opening delimiters, no space after
+			['('] : Open, ['['] : Open, ['{'] : Open,
+			['='] : Open, ['$'] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open,
+			[(unsigned char)'¡'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open,
+			// closing delimiters, no space before
+			[','] : Close, ['.'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close,
+			['%'] : Close, [(unsigned char)'¢'] : Close, [(unsigned char)'»'] : Close,
+			[')'] : Close, [']'] : Close, ['}'] : Close,
+			// opening-closing delimiters, no space before or after
+			['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose, [':'] : OpenClose,
+			[' '] : OpenClose, ['\f'] : OpenClose, ['\n'] : OpenClose, ['\r'] : OpenClose, ['\t'] : OpenClose, ['\v'] : OpenClose, // isspace
+		}; // mask
+
+	  if ( str[0] == '\0' ) { sepOff( os ); return os; } // null string => no separator
+
+		// first character IS NOT spacing or closing punctuation => add left separator
+		unsigned char ch = str[0];						// must make unsigned
+		if ( sepPrt( os ) && mask[ ch ] != Close && mask[ ch ] != OpenClose ) {
+			fmt( os, "%s", sepGetCur( os ) );
+		} // if
+
+		// if string starts line, must reset to determine open state because separator is off
+		sepReset( os );									// reset separator
+
+		// last character IS spacing or opening punctuation => turn off separator for next item
+		size_t len = strlen( str );
+		ch = str[len - 1];								// must make unsigned
+		if ( sepPrt( os ) && mask[ ch ] != Open && mask[ ch ] != OpenClose ) {
+			sepOn( os );
+		} else {
+			sepOff( os );
+		} // if
+		if ( ch == '\n' ) setNL( os, true );			// check *AFTER* sepPrt call above as it resets NL flag
+		return write( os, str, len );
+	} // ?|?
+
+// 	ostype & ?|?( ostype & os, const char16_t * str ) {
+// 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+// 		fmt( os, "%ls", str );
+// 		return os;
+// 	} // ?|?
+
+// #if ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) // char32_t == wchar_t => ambiguous
+// 	ostype & ?|?( ostype & os, const char32_t * str ) {
+// 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+// 		fmt( os, "%ls", str );
+// 		return os;
+// 	} // ?|?
+// #endif // ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 )
+
+// 	ostype & ?|?( ostype & os, const wchar_t * str ) {
+// 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+// 		fmt( os, "%ls", str );
+// 		return os;
+// 	} // ?|?
+
+	ostype & ?|?( ostype & os, const void * p ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%p", p );
+		return os;
+	} // ?|?
+
+
+	// manipulators
+	ostype & ?|?( ostype & os, ostype & (* manip)( ostype & ) ) {
+		return manip( os );
+	} // ?|?
+
+	ostype & sep( ostype & os ) {
+		os | sepGet( os );
+		return os;
+	} // sep
+
+	ostype & sepTuple( ostype & os ) {
+		os | sepGetTuple( os );
+		return os;
+	} // sepTuple
+
+	ostype & endl( ostype & os ) {
+		os | '\n';
+		setNL( os, true );
+		flush( os );
+		sepOff( os );									// prepare for next line
+		return os;
+	} // endl
+
+	ostype & sepOn( ostype & os ) {
 		sepOn( os );
-	} else {
+		return os;
+	} // sepOn
+
+	ostype & sepOff( ostype & os ) {
 		sepOff( os );
-	} // if
-	if ( ch == '\n' ) setNL( os, true );				// check *AFTER* sepPrt call above as it resets NL flag
-	return write( os, str, len );
-} // ?|?
-
-// forall( dtype ostype | ostream( ostype ) )
-// ostype & ?|?( ostype & os, const char16_t * str ) {
-// 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-// 	fmt( os, "%ls", str );
-// 	return os;
-// } // ?|?
-
-// #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 ) {
-// 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-// 	fmt( os, "%ls", str );
-// 	return os;
-// } // ?|?
-// #endif // ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 )
-
-// forall( dtype ostype | ostream( ostype ) )
-// ostype & ?|?( ostype & os, const wchar_t * str ) {
-// 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-// 	fmt( os, "%ls", str );
-// 	return os;
-// } // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, const void * p ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	fmt( os, "%p", p );
-	return os;
-} // ?|?
+		return os;
+	} // sepOff
+
+	ostype & sepEnable( ostype & os ) {
+		sepEnable( os );
+		return os;
+	} // sepEnable
+
+	ostype & sepDisable( ostype & os ) {
+		sepDisable( os );
+		return os;
+	} // sepDisable
+} // distribution
 
 
@@ -234,58 +257,7 @@
 } // ?|?
 
-
-// manipulators
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, ostype & (* manip)( ostype & ) ) {
-	return manip( os );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & sep( ostype & os ) {
-	os | sepGet( os );
-	return os;
-} // sep
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & sepTuple( ostype & os ) {
-	os | sepGetTuple( os );
-	return os;
-} // sepTuple
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & endl( ostype & os ) {
-	os | '\n';
-	setNL( os, true );
-	flush( os );
-	sepOff( os );										// prepare for next line
-	return os;
-} // endl
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & sepOn( ostype & os ) {
-	sepOn( os );
-	return os;
-} // sepOn
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & sepOff( ostype & os ) {
-	sepOff( os );
-	return os;
-} // sepOff
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & sepEnable( ostype & os ) {
-	sepEnable( os );
-	return os;
-} // sepEnable
-
-forall( dtype ostype | ostream( ostype ) )
-ostype & sepDisable( ostype & os ) {
-	sepDisable( os );
-	return os;
-} // sepDisable
-
 //---------------------------------------
 
+// writes the range [begin, end) to the given stream
 forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
 void write( iterator_type begin, iterator_type end, ostype & os ) {
@@ -302,137 +274,121 @@
 //---------------------------------------
 
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, _Bool & b ) {
-	char val[6];
-	fmt( is, "%5s", val );
-	if ( strcmp( val, "true" ) == 0 ) b = true;
-	else if ( strcmp( val, "false" ) == 0 ) b = false;
-	else {
-		fprintf( stderr, "invalid _Bool constant\n" );
-		abort();
-	} // if
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, char & c ) {
-	fmt( is, "%c", &c );								// must pass pointer through varg to fmt
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, signed char & sc ) {
-	fmt( is, "%hhd", &sc );
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, unsigned char & usc ) {
-	fmt( is, "%hhu", &usc );
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, short int & si ) {
-	fmt( is, "%hd", &si );
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, unsigned short int & usi ) {
-	fmt( is, "%hu", &usi );
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, int & i ) {
-	fmt( is, "%d", &i );
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, unsigned int & ui ) {
-	fmt( is, "%u", &ui );
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, long int & li ) {
-	fmt( is, "%ld", &li );
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, unsigned long int & ulli ) {
-	fmt( is, "%lu", &ulli );
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, long long int & lli ) {
-	fmt( is, "%lld", &lli );
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, unsigned long long int & ulli ) {
-	fmt( is, "%llu", &ulli );
-	return is;
-} // ?|?
-
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, float & f ) {
-	fmt( is, "%f", &f );
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, double & d ) {
-	fmt( is, "%lf", &d );
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, long double & ld ) {
-	fmt( is, "%Lf", &ld );
-	return is;
-} // ?|?
-
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, float _Complex & fc ) {
-	float re, im;
-	fmt( is, "%g%gi", &re, &im );
-	fc = re + im * _Complex_I;
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, double _Complex & dc ) {
-	double re, im;
-	fmt( is, "%lf%lfi", &re, &im );
-	dc = re + im * _Complex_I;
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, long double _Complex & ldc ) {
-	long double re, im;
-	fmt( is, "%Lf%Lfi", &re, &im );
-	ldc = re + im * _Complex_I;
-	return is;
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & ?|?( istype & is, istype & (* manip)( istype & ) ) {
-	return manip( is );
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype & endl( istype & is ) {
-	fmt( is, "%*[ \t\f\n\r\v]" );						// ignore whitespace
-	return is;
-} // endl
+forall( dtype istype | istream( istype ) ) {
+	istype & ?|?( istype & is, _Bool & b ) {
+		char val[6];
+		fmt( is, "%5s", val );
+		if ( strcmp( val, "true" ) == 0 ) b = true;
+		else if ( strcmp( val, "false" ) == 0 ) b = false;
+		else {
+			fprintf( stderr, "invalid _Bool constant\n" );
+			abort();
+		} // if
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, char & c ) {
+		fmt( is, "%c", &c );							// must pass pointer through varg to fmt
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, signed char & sc ) {
+		fmt( is, "%hhd", &sc );
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, unsigned char & usc ) {
+		fmt( is, "%hhu", &usc );
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, short int & si ) {
+		fmt( is, "%hd", &si );
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, unsigned short int & usi ) {
+		fmt( is, "%hu", &usi );
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, int & i ) {
+		fmt( is, "%d", &i );
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, unsigned int & ui ) {
+		fmt( is, "%u", &ui );
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, long int & li ) {
+		fmt( is, "%ld", &li );
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, unsigned long int & ulli ) {
+		fmt( is, "%lu", &ulli );
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, long long int & lli ) {
+		fmt( is, "%lld", &lli );
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, unsigned long long int & ulli ) {
+		fmt( is, "%llu", &ulli );
+		return is;
+	} // ?|?
+
+
+	istype & ?|?( istype & is, float & f ) {
+		fmt( is, "%f", &f );
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, double & d ) {
+		fmt( is, "%lf", &d );
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, long double & ld ) {
+		fmt( is, "%Lf", &ld );
+		return is;
+	} // ?|?
+
+
+	istype & ?|?( istype & is, float _Complex & fc ) {
+		float re, im;
+		fmt( is, "%g%gi", &re, &im );
+		fc = re + im * _Complex_I;
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, double _Complex & dc ) {
+		double re, im;
+		fmt( is, "%lf%lfi", &re, &im );
+		dc = re + im * _Complex_I;
+		return is;
+	} // ?|?
+
+	istype & ?|?( istype & is, long double _Complex & ldc ) {
+		long double re, im;
+		fmt( is, "%Lf%Lfi", &re, &im );
+		ldc = re + im * _Complex_I;
+		return is;
+	} // ?|?
+
+
+	// manipulators
+	istype & ?|?( istype & is, istype & (* manip)( istype & ) ) {
+		return manip( is );
+	} // ?|?
+
+	istype & endl( istype & is ) {
+		fmt( is, "%*[ \t\f\n\r\v]" );					// ignore whitespace
+		return is;
+	} // endl
+} // distribution
 
 _Istream_cstrUC cstr( char * str ) { return (_Istream_cstrUC){ str }; }
Index: src/libcfa/rational
===================================================================
--- src/libcfa/rational	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/rational	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -12,6 +12,6 @@
 // Created On       : Wed Apr  6 17:56:25 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Dec  6 23:12:53 2017
-// Update Count     : 97
+// Last Modified On : Sat Jun  2 09:10:01 2018
+// Update Count     : 105
 //
 
@@ -46,84 +46,53 @@
 // implementation
 
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-struct Rational {
-	RationalImpl numerator, denominator;				// invariant: denominator > 0
-}; // Rational
+forall( otype RationalImpl | arithmetic( RationalImpl ) ) {
+	struct Rational {
+		RationalImpl numerator, denominator;			// invariant: denominator > 0
+	}; // Rational
 
-// constructors
+	// constructors
 
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-void ?{}( Rational(RationalImpl) & r );
+	void ?{}( Rational(RationalImpl) & r );
+	void ?{}( Rational(RationalImpl) & r, RationalImpl n );
+	void ?{}( Rational(RationalImpl) & r, RationalImpl n, RationalImpl d );
+	void ?{}( Rational(RationalImpl) & r, zero_t );
+	void ?{}( Rational(RationalImpl) & r, one_t );
 
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-void ?{}( Rational(RationalImpl) & r, RationalImpl n );
+	// numerator/denominator getter
 
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-void ?{}( Rational(RationalImpl) & r, RationalImpl n, RationalImpl d );
+	RationalImpl numerator( Rational(RationalImpl) r );
+	RationalImpl denominator( Rational(RationalImpl) r );
+	[ RationalImpl, RationalImpl ] ?=?( & [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src );
 
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-void ?{}( Rational(RationalImpl) & r, zero_t );
+	// numerator/denominator setter
 
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-void ?{}( Rational(RationalImpl) & r, one_t );
+	RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n );
+	RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d );
 
-// numerator/denominator getter
+	// comparison
 
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-RationalImpl numerator( Rational(RationalImpl) r );
+	int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r );
+	int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
+	int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r );
+	int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
+	int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r );
+	int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-RationalImpl denominator( Rational(RationalImpl) r );
+	// arithmetic
 
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-[ RationalImpl, RationalImpl ] ?=?( & [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src );
+	Rational(RationalImpl) +?( Rational(RationalImpl) r );
+	Rational(RationalImpl) -?( Rational(RationalImpl) r );
+	Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r );
+	Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r );
+	Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r );
+	Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-// numerator/denominator setter
+	// I/O
+	forall( dtype istype | istream( istype ) | { istype & ?|?( istype &, RationalImpl & ); } )
+	istype & ?|?( istype &, Rational(RationalImpl) & );
 
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d );
-
-// comparison
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
-
-// arithmetic
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) +?( Rational(RationalImpl) r );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) -?( Rational(RationalImpl) r );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r );
+	forall( dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, RationalImpl ); } )
+	ostype & ?|?( ostype &, Rational(RationalImpl ) );
+} // distribution
 
 // conversion
@@ -133,13 +102,4 @@
 Rational(RationalImpl) narrow( double f, RationalImpl md );
 
-// I/O
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-forall( dtype istype | istream( istype ) | { istype & ?|?( istype &, RationalImpl & ); } )
-istype & ?|?( istype &, Rational(RationalImpl) & );
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-forall( dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, RationalImpl ); } )
-ostype & ?|?( ostype &, Rational(RationalImpl ) );
-
 // Local Variables: //
 // mode: c //
Index: src/libcfa/rational.c
===================================================================
--- src/libcfa/rational.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/rational.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Wed Apr  6 17:54:28 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Dec  6 23:13:58 2017
-// Update Count     : 156
+// Last Modified On : Sat Jun  2 09:24:33 2018
+// Update Count     : 162
 //
 
@@ -18,173 +18,166 @@
 #include "stdlib"
 
-// helper routines
-
-// Calculate greatest common denominator of two numbers, the first of which may be negative. Used to reduce rationals.
-// alternative: https://en.wikipedia.org/wiki/Binary_GCD_algorithm
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-static RationalImpl gcd( RationalImpl a, RationalImpl b ) {
-	for ( ;; ) {										// Euclid's algorithm
-		RationalImpl r = a % b;
-	  if ( r == (RationalImpl){0} ) break;
-		a = b;
-		b = r;
-	} // for
-	return b;
-} // gcd
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-static RationalImpl simplify( RationalImpl & n, RationalImpl & d ) {
-	if ( d == (RationalImpl){0} ) {
-		serr | "Invalid rational number construction: denominator cannot be equal to 0." | endl;
-		exit( EXIT_FAILURE );
-	} // exit
-	if ( d < (RationalImpl){0} ) { d = -d; n = -n; }	// move sign to numerator
-	return gcd( abs( n ), d );							// simplify
-} // Rationalnumber::simplify
-
-
-// constructors
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-void ?{}( Rational(RationalImpl) & r ) {
-	r{ (RationalImpl){0}, (RationalImpl){1} };
-} // rational
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-void ?{}( Rational(RationalImpl) & r, RationalImpl n ) {
-	r{ n, (RationalImpl){1} };
-} // rational
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-void ?{}( Rational(RationalImpl) & r, RationalImpl n, RationalImpl d ) {
-	RationalImpl t = simplify( n, d );					// simplify
-	r.numerator = n / t;
-	r.denominator = d / t;
-} // rational
-
-
-// getter for numerator/denominator
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-RationalImpl numerator( Rational(RationalImpl) r ) {
-	return r.numerator;
-} // numerator
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-RationalImpl denominator( Rational(RationalImpl) r ) {
-	return r.denominator;
-} // denominator
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-[ RationalImpl, RationalImpl ] ?=?( & [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src ) {
-	return dest = src.[ numerator, denominator ];
-}
-
-// setter for numerator/denominator
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n ) {
-	RationalImpl prev = r.numerator;
-	RationalImpl t = gcd( abs( n ), r.denominator );		// simplify
-	r.numerator = n / t;
-	r.denominator = r.denominator / t;
-	return prev;
-} // numerator
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d ) {
-	RationalImpl prev = r.denominator;
-	RationalImpl t = simplify( r.numerator, d );			// simplify
-	r.numerator = r.numerator / t;
-	r.denominator = d / t;
-	return prev;
-} // denominator
-
-
-// comparison
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
-	return l.numerator * r.denominator == l.denominator * r.numerator;
-} // ?==?
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
-	return ! ( l == r );
-} // ?!=?
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
-	return l.numerator * r.denominator < l.denominator * r.numerator;
-} // ?<?
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
-	return l.numerator * r.denominator <= l.denominator * r.numerator;
-} // ?<=?
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
-	return ! ( l <= r );
-} // ?>?
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
-	return ! ( l < r );
-} // ?>=?
-
-
-// arithmetic
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) +?( Rational(RationalImpl) r ) {
-	Rational(RationalImpl) t = { r.numerator, r.denominator };
-	return t;
-} // +?
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) -?( Rational(RationalImpl) r ) {
-	Rational(RationalImpl) t = { -r.numerator, r.denominator };
-	return t;
-} // -?
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
-	if ( l.denominator == r.denominator ) {				// special case
-		Rational(RationalImpl) t = { l.numerator + r.numerator, l.denominator };
-		return t;
-	} else {
-		Rational(RationalImpl) t = { l.numerator * r.denominator + l.denominator * r.numerator, l.denominator * r.denominator };
-		return t;
-	} // if
-} // ?+?
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
-	if ( l.denominator == r.denominator ) {				// special case
-		Rational(RationalImpl) t = { l.numerator - r.numerator, l.denominator };
-		return t;
-	} else {
-		Rational(RationalImpl) t = { l.numerator * r.denominator - l.denominator * r.numerator, l.denominator * r.denominator };
-		return t;
-	} // if
-} // ?-?
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
-	Rational(RationalImpl) t = { l.numerator * r.numerator, l.denominator * r.denominator };
-	return t;
-} // ?*?
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
-	if ( r.numerator < (RationalImpl){0} ) {
-		r.numerator = -r.numerator;
-		r.denominator = -r.denominator;
-	} // if
-	Rational(RationalImpl) t = { l.numerator * r.denominator, l.denominator * r.numerator };
-	return t;
-} // ?/?
-
+forall( otype RationalImpl | arithmetic( RationalImpl ) ) {
+	// helper routines
+
+	// Calculate greatest common denominator of two numbers, the first of which may be negative. Used to reduce
+	// rationals.  alternative: https://en.wikipedia.org/wiki/Binary_GCD_algorithm
+	static RationalImpl gcd( RationalImpl a, RationalImpl b ) {
+		for ( ;; ) {									// Euclid's algorithm
+			RationalImpl r = a % b;
+		  if ( r == (RationalImpl){0} ) break;
+			a = b;
+			b = r;
+		} // for
+		return b;
+	} // gcd
+
+	static RationalImpl simplify( RationalImpl & n, RationalImpl & d ) {
+		if ( d == (RationalImpl){0} ) {
+			serr | "Invalid rational number construction: denominator cannot be equal to 0." | endl;
+			exit( EXIT_FAILURE );
+		} // exit
+		if ( d < (RationalImpl){0} ) { d = -d; n = -n; } // move sign to numerator
+		return gcd( abs( n ), d );						// simplify
+	} // Rationalnumber::simplify
+
+	// constructors
+
+	void ?{}( Rational(RationalImpl) & r ) {
+		r{ (RationalImpl){0}, (RationalImpl){1} };
+	} // rational
+
+	void ?{}( Rational(RationalImpl) & r, RationalImpl n ) {
+		r{ n, (RationalImpl){1} };
+	} // rational
+
+	void ?{}( Rational(RationalImpl) & r, RationalImpl n, RationalImpl d ) {
+		RationalImpl t = simplify( n, d );				// simplify
+		r.numerator = n / t;
+		r.denominator = d / t;
+	} // rational
+
+
+	// getter for numerator/denominator
+
+	RationalImpl numerator( Rational(RationalImpl) r ) {
+		return r.numerator;
+	} // numerator
+
+	RationalImpl denominator( Rational(RationalImpl) r ) {
+		return r.denominator;
+	} // denominator
+
+	[ RationalImpl, RationalImpl ] ?=?( & [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src ) {
+		return dest = src.[ numerator, denominator ];
+	} // ?=?
+
+	// setter for numerator/denominator
+
+	RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n ) {
+		RationalImpl prev = r.numerator;
+		RationalImpl t = gcd( abs( n ), r.denominator ); // simplify
+		r.numerator = n / t;
+		r.denominator = r.denominator / t;
+		return prev;
+	} // numerator
+
+	RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d ) {
+		RationalImpl prev = r.denominator;
+		RationalImpl t = simplify( r.numerator, d );	// simplify
+		r.numerator = r.numerator / t;
+		r.denominator = d / t;
+		return prev;
+	} // denominator
+
+	// comparison
+
+	int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
+		return l.numerator * r.denominator == l.denominator * r.numerator;
+	} // ?==?
+
+	int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
+		return ! ( l == r );
+	} // ?!=?
+
+	int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
+		return l.numerator * r.denominator < l.denominator * r.numerator;
+	} // ?<?
+
+	int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
+		return l.numerator * r.denominator <= l.denominator * r.numerator;
+	} // ?<=?
+
+	int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
+		return ! ( l <= r );
+	} // ?>?
+
+	int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
+		return ! ( l < r );
+	} // ?>=?
+
+	// arithmetic
+
+	Rational(RationalImpl) +?( Rational(RationalImpl) r ) {
+		Rational(RationalImpl) t = { r.numerator, r.denominator };
+		return t;
+	} // +?
+
+	Rational(RationalImpl) -?( Rational(RationalImpl) r ) {
+		Rational(RationalImpl) t = { -r.numerator, r.denominator };
+		return t;
+	} // -?
+
+	Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
+		if ( l.denominator == r.denominator ) {			// special case
+			Rational(RationalImpl) t = { l.numerator + r.numerator, l.denominator };
+			return t;
+		} else {
+			Rational(RationalImpl) t = { l.numerator * r.denominator + l.denominator * r.numerator, l.denominator * r.denominator };
+			return t;
+		} // if
+	} // ?+?
+
+	Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
+		if ( l.denominator == r.denominator ) {			// special case
+			Rational(RationalImpl) t = { l.numerator - r.numerator, l.denominator };
+			return t;
+		} else {
+			Rational(RationalImpl) t = { l.numerator * r.denominator - l.denominator * r.numerator, l.denominator * r.denominator };
+			return t;
+		} // if
+	} // ?-?
+
+	Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
+		Rational(RationalImpl) t = { l.numerator * r.numerator, l.denominator * r.denominator };
+		return t;
+	} // ?*?
+
+	Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
+		if ( r.numerator < (RationalImpl){0} ) {
+			r.numerator = -r.numerator;
+			r.denominator = -r.denominator;
+		} // if
+		Rational(RationalImpl) t = { l.numerator * r.denominator, l.denominator * r.numerator };
+		return t;
+	} // ?/?
+
+	// I/O
+
+	forall( dtype istype | istream( istype ) | { istype & ?|?( istype &, RationalImpl & ); } )
+	istype & ?|?( istype & is, Rational(RationalImpl) & r ) {
+		RationalImpl t;
+		is | r.numerator | r.denominator;
+		t = simplify( r.numerator, r.denominator );
+		r.numerator /= t;
+		r.denominator /= t;
+		return is;
+	} // ?|?
+
+	forall( dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, RationalImpl ); } )
+	ostype & ?|?( ostype & os, Rational(RationalImpl ) r ) {
+		return os | r.numerator | '/' | r.denominator;
+	} // ?|?
+} // distribution
 
 // conversion
@@ -195,7 +188,7 @@
 } // widen
 
-// http://www.ics.uci.edu/~eppstein/numth/frap.c
 forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); RationalImpl convert( double ); } )
 Rational(RationalImpl) narrow( double f, RationalImpl md ) {
+	// http://www.ics.uci.edu/~eppstein/numth/frap.c
 	if ( md <= (RationalImpl){1} ) {					// maximum fractional digits too small?
 		return (Rational(RationalImpl)){ convert( f ), (RationalImpl){1}}; // truncate fraction
@@ -224,24 +217,4 @@
 } // narrow
 
-
-// I/O
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-forall( dtype istype | istream( istype ) | { istype & ?|?( istype &, RationalImpl & ); } )
-istype & ?|?( istype & is, Rational(RationalImpl) & r ) {
-	RationalImpl t;
-	is | r.numerator | r.denominator;
-	t = simplify( r.numerator, r.denominator );
-	r.numerator /= t;
-	r.denominator /= t;
-	return is;
-} // ?|?
-
-forall( otype RationalImpl | arithmetic( RationalImpl ) )
-forall( dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, RationalImpl ); } )
-ostype & ?|?( ostype & os, Rational(RationalImpl ) r ) {
-	return os | r.numerator | '/' | r.denominator;
-} // ?|?
-
 // Local Variables: //
 // tab-width: 4 //
Index: src/libcfa/stdhdr/assert.h
===================================================================
--- src/libcfa/stdhdr/assert.h	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/stdhdr/assert.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -33,4 +33,5 @@
 	#define verify(x) assert(x)
 	#define verifyf(x, ...) assertf(x, __VA_ARGS__)
+	#define __CFA_WITH_VERIFY__
 #else
 	#define verify(x)
Index: src/libcfa/stdlib
===================================================================
--- src/libcfa/stdlib	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/stdlib	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,11 +10,16 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 16 07:53:10 2018
-// Update Count     : 300
+// Last Modified On : Sat Jun  2 08:46:35 2018
+// Update Count     : 306
 //
 
 #pragma once
 
-#include <stdlib.h>										// strto*, *abs
+#include <stdlib.h>										// allocation, strto*, *abs
+extern "C" {
+	void * memalign( size_t align, size_t size );
+	void * aligned_alloc( size_t align, size_t size );
+	void * memset( void * dest, int c, size_t size );
+} // extern "C"
 
 //---------------------------------------
@@ -27,6 +32,7 @@
 //---------------------------------------
 
-// C dynamic allocation
 static inline forall( dtype T | sized(T) ) {
+	// C dynamic allocation
+
 	T * malloc( void ) {
 		// printf( "* malloc\n" );
@@ -51,5 +57,4 @@
 	} // realloc
 
-	extern "C" { void * memalign( size_t align, size_t size ); } // use default C routine for void *
 	T * memalign( size_t align ) {
 		//printf( "X4\n" );
@@ -57,5 +62,4 @@
 	} // memalign
 
-	extern "C" { void * aligned_alloc( size_t align, size_t size ); } // use default C routine for void *
 	T * aligned_alloc( size_t align ) {
 		//printf( "X5\n" );
@@ -70,5 +74,4 @@
 
 	// Cforall dynamic allocation
-	extern "C" { void * memset( void * dest, int c, size_t size ); } // use default C routine for void *
 
 	T * alloc( void ) {
@@ -103,45 +106,59 @@
 forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim, char fill );
 
-static inline forall( dtype T | sized(T) ) T * align_alloc( size_t align ) {
-	//printf( "X13\n" );
-	return (T *)memalign( align, sizeof(T) );
-} // align_alloc
-static inline forall( dtype T | sized(T) ) T * align_alloc( size_t align, char fill ) {
-	//printf( "X14\n" );
-    T * ptr = (T *)memalign( align, sizeof(T) );
-    return (T *)memset( ptr, (int)fill, sizeof(T) );
-} // align_alloc
-
-static inline forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim ) {
-	//printf( "X15\n" );
-	return (T *)memalign( align, dim * sizeof(T) );
-} // align_alloc
-static inline forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim, char fill ) {
-	//printf( "X16\n" );
-    T * ptr = (T *)memalign( align, dim * sizeof(T) );
-    return (T *)memset( ptr, (int)fill, dim * sizeof(T) );
-} // align_alloc
-
-
-// data, non-array types
-static inline forall( dtype T | sized(T) ) T * memset( T * dest, char c ) {
-	//printf( "X17\n" );
-	return (T *)memset( dest, c, sizeof(T) );
-} // memset
-extern "C" { void * memcpy( void * dest, const void * src, size_t size ); } // use default C routine for void *
-static inline forall( dtype T | sized(T) ) T * memcpy( T * dest, const T * src ) {
-	//printf( "X18\n" );
-	return (T *)memcpy( dest, src, sizeof(T) );
-} // memcpy
-
-// data, array types
-static inline forall( dtype T | sized(T) ) T * memset( T dest[], size_t dim, char c ) {
-	//printf( "X19\n" );
-	return (T *)(void *)memset( dest, c, dim * sizeof(T) );	// C memset
-} // memset
-static inline forall( dtype T | sized(T) ) T * memcpy( T dest[], const T src[], size_t dim ) {
-	//printf( "X20\n" );
-	return (T *)(void *)memcpy( dest, src, dim * sizeof(T) ); // C memcpy
-} // memcpy
+
+static inline forall( dtype T | sized(T) ) {
+	T * align_alloc( size_t align ) {
+		//printf( "X13\n" );
+		return (T *)memalign( align, sizeof(T) );
+	} // align_alloc
+
+	T * align_alloc( size_t align, char fill ) {
+		//printf( "X14\n" );
+		T * ptr = (T *)memalign( align, sizeof(T) );
+		return (T *)memset( ptr, (int)fill, sizeof(T) );
+	} // align_alloc
+
+	T * align_alloc( size_t align, size_t dim ) {
+		//printf( "X15\n" );
+		return (T *)memalign( align, dim * sizeof(T) );
+	} // align_alloc
+
+	T * align_alloc( size_t align, size_t dim, char fill ) {
+		//printf( "X16\n" );
+		T * ptr = (T *)memalign( align, dim * sizeof(T) );
+		return (T *)memset( ptr, (int)fill, dim * sizeof(T) );
+	} // align_alloc
+} // distribution
+
+
+static inline forall( dtype T | sized(T) ) {
+	// data, non-array types
+
+	T * memset( T * dest, char c ) {
+		//printf( "X17\n" );
+		return (T *)memset( dest, c, sizeof(T) );
+	} // memset
+
+	extern "C" { void * memcpy( void * dest, const void * src, size_t size ); } // use default C routine for void *
+
+	T * memcpy( T * dest, const T * src ) {
+		//printf( "X18\n" );
+		return (T *)memcpy( dest, src, sizeof(T) );
+	} // memcpy
+} // distribution
+
+static inline forall( dtype T | sized(T) ) {
+	// data, array types
+
+	T * memset( T dest[], size_t dim, char c ) {
+		//printf( "X19\n" );
+		return (T *)(void *)memset( dest, c, dim * sizeof(T) );	// C memset
+	} // memset
+
+	T * memcpy( T dest[], const T src[], size_t dim ) {
+		//printf( "X20\n" );
+		return (T *)(void *)memcpy( dest, src, dim * sizeof(T) ); // C memcpy
+	} // memcpy
+} // distribution
 
 // allocation/deallocation and constructor/destructor, non-array types
@@ -189,45 +206,23 @@
 //---------------------------------------
 
-forall( otype E | { int ?<?( E, E ); } )
-E * bsearch( E key, const E * vals, size_t dim );
-
-forall( otype E | { int ?<?( E, E ); } )
-size_t bsearch( E key, const E * vals, size_t dim );
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-E * bsearch( K key, const E * vals, size_t dim );
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-size_t bsearch( K key, const E * vals, size_t dim );
-
-
-forall( otype E | { int ?<?( E, E ); } )
-E * bsearchl( E key, const E * vals, size_t dim );
-
-forall( otype E | { int ?<?( E, E ); } )
-size_t bsearchl( E key, const E * vals, size_t dim );
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-E * bsearchl( K key, const E * vals, size_t dim );
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-size_t bsearchl( K key, const E * vals, size_t dim );
-
-
-forall( otype E | { int ?<?( E, E ); } )
-E * bsearchu( E key, const E * vals, size_t dim );
-
-forall( otype E | { int ?<?( E, E ); } )
-size_t bsearchu( E key, const E * vals, size_t dim );
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-E * bsearchu( K key, const E * vals, size_t dim );
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-size_t bsearchu( K key, const E * vals, size_t dim );
-
-
-forall( otype E | { int ?<?( E, E ); } )
-void qsort( E * vals, size_t dim );
+forall( otype E | { int ?<?( E, E ); } ) {
+	E * bsearch( E key, const E * vals, size_t dim );
+	size_t bsearch( E key, const E * vals, size_t dim );
+	E * bsearchl( E key, const E * vals, size_t dim );
+	size_t bsearchl( E key, const E * vals, size_t dim );
+	E * bsearchu( E key, const E * vals, size_t dim );
+	size_t bsearchu( E key, const E * vals, size_t dim );
+
+	void qsort( E * vals, size_t dim );
+} // distribution
+
+forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } ) {
+	E * bsearch( K key, const E * vals, size_t dim );
+	size_t bsearch( K key, const E * vals, size_t dim );
+	E * bsearchl( K key, const E * vals, size_t dim );
+	size_t bsearchl( K key, const E * vals, size_t dim );
+	E * bsearchu( K key, const E * vals, size_t dim );
+	size_t bsearchu( K key, const E * vals, size_t dim );
+} // distribution
 
 //---------------------------------------
Index: src/libcfa/stdlib.c
===================================================================
--- src/libcfa/stdlib.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/libcfa/stdlib.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:10:29 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jan  3 08:29:29 2018
-// Update Count     : 444
+// Last Modified On : Sat Jun  2 06:15:05 2018
+// Update Count     : 448
 //
 
@@ -130,122 +130,112 @@
 //---------------------------------------
 
-forall( otype E | { int ?<?( E, E ); } )
-E * bsearch( E key, const E * vals, size_t dim ) {
-	int cmp( const void * t1, const void * t2 ) {
-		return *(E *)t1 < *(E *)t2 ? -1 : *(E *)t2 < *(E *)t1 ? 1 : 0;
-	} // cmp
-	return (E *)bsearch( &key, vals, dim, sizeof(E), cmp );
-} // bsearch
-
-forall( otype E | { int ?<?( E, E ); } )
-size_t bsearch( E key, const E * vals, size_t dim ) {
-	E * result = bsearch( key, vals, dim );
-	return result ? result - vals : dim;				// pointer subtraction includes sizeof(E)
-} // bsearch
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-E * bsearch( K key, const E * vals, size_t dim ) {
-	int cmp( const void * t1, const void * t2 ) {
-		return *(K *)t1 < getKey( *(E *)t2 ) ? -1 : getKey( *(E *)t2 ) < *(K *)t1 ? 1 : 0;
-	} // cmp
-	return (E *)bsearch( &key, vals, dim, sizeof(E), cmp );
-} // bsearch
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-size_t bsearch( K key, const E * vals, size_t dim ) {
-	E * result = bsearch( key, vals, dim );
-	return result ? result - vals : dim;				// pointer subtraction includes sizeof(E)
-} // bsearch
-
-
-forall( otype E | { int ?<?( E, E ); } )
-size_t bsearchl( E key, const E * vals, size_t dim ) {
-	size_t l = 0, m, h = dim;
-	while ( l < h ) {
-		m = (l + h) / 2;
-		if ( (E &)(vals[m]) < key ) {					// cast away const
-			l = m + 1;
-		} else {
-			h = m;
-		} // if
-	} // while
-	return l;
-} // bsearchl
-
-forall( otype E | { int ?<?( E, E ); } )
-E * bsearchl( E key, const E * vals, size_t dim ) {
-	size_t posn = bsearchl( key, vals, dim );
-	return (E *)(&vals[posn]);							// cast away const
-} // bsearchl
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-size_t bsearchl( K key, const E * vals, size_t dim ) {
-	size_t l = 0, m, h = dim;
-	while ( l < h ) {
-		m = (l + h) / 2;
-		if ( getKey( vals[m] ) < key ) {
-			l = m + 1;
-		} else {
-			h = m;
-		} // if
-	} // while
-	return l;
-} // bsearchl
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-E * bsearchl( K key, const E * vals, size_t dim ) {
-	size_t posn = bsearchl( key, vals, dim );
-	return (E *)(&vals[posn]);							// cast away const
-} // bsearchl
-
-
-forall( otype E | { int ?<?( E, E ); } )
-size_t bsearchu( E key, const E * vals, size_t dim ) {
-	size_t l = 0, m, h = dim;
-	while ( l < h ) {
-		m = (l + h) / 2;
-		if ( ! ( key < (E &)(vals[m]) ) ) {				// cast away const
-			l = m + 1;
-		} else {
-			h = m;
-		} // if
-	} // while
-	return l;
-} // bsearchu
-
-forall( otype E | { int ?<?( E, E ); } )
-E * bsearchu( E key, const E * vals, size_t dim ) {
-	size_t posn = bsearchu( key, vals, dim );
-	return (E *)(&vals[posn]);
-} // bsearchu
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-size_t bsearchu( K key, const E * vals, size_t dim ) {
-	size_t l = 0, m, h = dim;
-	while ( l < h ) {
-		m = (l + h) / 2;
-		if ( ! ( key < getKey( vals[m] ) ) ) {
-			l = m + 1;
-		} else {
-			h = m;
-		} // if
-	} // while
-	return l;
-} // bsearchu
-
-forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } )
-E * bsearchu( K key, const E * vals, size_t dim ) {
-	size_t posn = bsearchu( key, vals, dim );
-	return (E *)(&vals[posn]);
-} // bsearchu
-
-
-forall( otype E | { int ?<?( E, E ); } )
-void qsort( E * vals, size_t dim ) {
-	int cmp( const void * t1, const void * t2 ) {
-		return *(E *)t1 < *(E *)t2 ? -1 : *(E *)t2 < *(E *)t1 ? 1 : 0;
-	} // cmp
-	qsort( vals, dim, sizeof(E), cmp );
-} // qsort
+forall( otype E | { int ?<?( E, E ); } ) {
+	E * bsearch( E key, const E * vals, size_t dim ) {
+		int cmp( const void * t1, const void * t2 ) {
+			return *(E *)t1 < *(E *)t2 ? -1 : *(E *)t2 < *(E *)t1 ? 1 : 0;
+		} // cmp
+		return (E *)bsearch( &key, vals, dim, sizeof(E), cmp );
+	} // bsearch
+
+	size_t bsearch( E key, const E * vals, size_t dim ) {
+		E * result = bsearch( key, vals, dim );
+		return result ? result - vals : dim;			// pointer subtraction includes sizeof(E)
+	} // bsearch
+
+	size_t bsearchl( E key, const E * vals, size_t dim ) {
+		size_t l = 0, m, h = dim;
+		while ( l < h ) {
+			m = (l + h) / 2;
+			if ( (E &)(vals[m]) < key ) {				// cast away const
+				l = m + 1;
+			} else {
+				h = m;
+			} // if
+		} // while
+		return l;
+	} // bsearchl
+
+	E * bsearchl( E key, const E * vals, size_t dim ) {
+		size_t posn = bsearchl( key, vals, dim );
+		return (E *)(&vals[posn]);						// cast away const
+	} // bsearchl
+
+	size_t bsearchu( E key, const E * vals, size_t dim ) {
+		size_t l = 0, m, h = dim;
+		while ( l < h ) {
+			m = (l + h) / 2;
+			if ( ! ( key < (E &)(vals[m]) ) ) {			// cast away const
+				l = m + 1;
+			} else {
+				h = m;
+			} // if
+		} // while
+		return l;
+	} // bsearchu
+
+	E * bsearchu( E key, const E * vals, size_t dim ) {
+		size_t posn = bsearchu( key, vals, dim );
+		return (E *)(&vals[posn]);
+	} // bsearchu
+
+
+	void qsort( E * vals, size_t dim ) {
+		int cmp( const void * t1, const void * t2 ) {
+			return *(E *)t1 < *(E *)t2 ? -1 : *(E *)t2 < *(E *)t1 ? 1 : 0;
+		} // cmp
+		qsort( vals, dim, sizeof(E), cmp );
+	} // qsort
+} // distribution
+
+
+forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } ) {
+	E * bsearch( K key, const E * vals, size_t dim ) {
+		int cmp( const void * t1, const void * t2 ) {
+			return *(K *)t1 < getKey( *(E *)t2 ) ? -1 : getKey( *(E *)t2 ) < *(K *)t1 ? 1 : 0;
+		} // cmp
+		return (E *)bsearch( &key, vals, dim, sizeof(E), cmp );
+	} // bsearch
+
+	size_t bsearch( K key, const E * vals, size_t dim ) {
+		E * result = bsearch( key, vals, dim );
+		return result ? result - vals : dim;			// pointer subtraction includes sizeof(E)
+	} // bsearch
+
+	size_t bsearchl( K key, const E * vals, size_t dim ) {
+		size_t l = 0, m, h = dim;
+		while ( l < h ) {
+			m = (l + h) / 2;
+			if ( getKey( vals[m] ) < key ) {
+				l = m + 1;
+			} else {
+				h = m;
+			} // if
+		} // while
+		return l;
+	} // bsearchl
+
+	E * bsearchl( K key, const E * vals, size_t dim ) {
+		size_t posn = bsearchl( key, vals, dim );
+		return (E *)(&vals[posn]);						// cast away const
+	} // bsearchl
+
+	size_t bsearchu( K key, const E * vals, size_t dim ) {
+		size_t l = 0, m, h = dim;
+		while ( l < h ) {
+			m = (l + h) / 2;
+			if ( ! ( key < getKey( vals[m] ) ) ) {
+				l = m + 1;
+			} else {
+				h = m;
+			} // if
+		} // while
+		return l;
+	} // bsearchu
+
+	E * bsearchu( K key, const E * vals, size_t dim ) {
+		size_t posn = bsearchu( key, vals, dim );
+		return (E *)(&vals[posn]);
+	} // bsearchu
+} // distribution
 
 //---------------------------------------
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/main.cc	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -11,6 +11,6 @@
 // Created On       : Fri May 15 23:12:02 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May  7 14:35:57 2018
-// Update Count     : 492
+// Last Modified On : Wed Jun  6 15:51:47 2018
+// Update Count     : 498
 //
 
@@ -160,5 +160,6 @@
 		 << "." << endl;
 	backtrace( 2 );										// skip first 2 stack frames
-	exit( EXIT_FAILURE );
+	//_exit( EXIT_FAILURE );
+	abort();
 } // sigSegvBusHandler
 
@@ -261,5 +262,5 @@
 		} // if
 
-		PASS( "mutate", ControlStruct::mutate( translationUnit ) );
+		PASS( "fixLabels", ControlStruct::fixLabels( translationUnit ) );
 		PASS( "fixNames", CodeGen::fixNames( translationUnit ) );
 		PASS( "genInit", InitTweak::genInit( translationUnit ) );
@@ -571,5 +572,4 @@
 	yyin = input;
 	yylineno = 1;
-	typedefTable.enterScope();
 	int parseStatus = yyparse();
 
Index: src/prelude/Makefile.am
===================================================================
--- src/prelude/Makefile.am	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/prelude/Makefile.am	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -37,8 +37,8 @@
 # create forward declarations for gcc builtins
 gcc-builtins.cf : gcc-builtins.c prototypes.sed
-	${AM_V_GEN}@BACKEND_CC@ -E -P $< | sed -r -f prototypes.sed > $@
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E -P $< | sed -r -f prototypes.sed > $@
 
 gcc-builtins.c : builtins.def prototypes.awk sync-builtins.cf
-	${AM_V_GEN}@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E prototypes.c | awk -f prototypes.awk > $@
 
 builtins.def :
Index: src/prelude/Makefile.in
===================================================================
--- src/prelude/Makefile.in	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/prelude/Makefile.in	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -506,8 +506,8 @@
 # create forward declarations for gcc builtins
 gcc-builtins.cf : gcc-builtins.c prototypes.sed
-	${AM_V_GEN}@BACKEND_CC@ -E -P $< | sed -r -f prototypes.sed > $@
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E -P $< | sed -r -f prototypes.sed > $@
 
 gcc-builtins.c : builtins.def prototypes.awk sync-builtins.cf
-	${AM_V_GEN}@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E prototypes.c | awk -f prototypes.awk > $@
 
 builtins.def :
Index: src/prelude/extras.regx
===================================================================
--- src/prelude/extras.regx	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/prelude/extras.regx	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -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.* int8_t;
 typedef.* int16_t;
Index: src/prelude/prelude.cf
===================================================================
--- src/prelude/prelude.cf	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/prelude/prelude.cf	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -458,5 +458,4 @@
 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 );
-__int128	?=?( __int128 &, __int128 ),	?=?( volatile __int128 &, __int128 );
 zero_t			?=?( zero_t &, zero_t );
 one_t			?=?( one_t &, one_t );
Index: src/prelude/sync-builtins.cf
===================================================================
--- src/prelude/sync-builtins.cf	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/prelude/sync-builtins.cf	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -7,6 +7,8 @@
 long long int __sync_fetch_and_add(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_add_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_add(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_add_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_fetch_and_sub(volatile char *, char,...);
@@ -18,6 +20,8 @@
 long long int __sync_fetch_and_sub(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_sub_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_sub(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_sub_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_fetch_and_or(volatile char *, char,...);
@@ -29,6 +33,8 @@
 long long int __sync_fetch_and_or(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_or_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_or(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_or_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_fetch_and_and(volatile char *, char,...);
@@ -40,6 +46,8 @@
 long long int __sync_fetch_and_and(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_and_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_and(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_and_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_fetch_and_xor(volatile char *, char,...);
@@ -51,6 +59,8 @@
 long long int __sync_fetch_and_xor(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_xor_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_xor(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_xor_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_fetch_and_nand(volatile char *, char,...);
@@ -62,6 +72,8 @@
 long long int __sync_fetch_and_nand(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_nand_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_nand(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_nand_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_add_and_fetch(volatile char *, char,...);
@@ -73,6 +85,8 @@
 long long int __sync_add_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_add_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_add_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_add_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_sub_and_fetch(volatile char *, char,...);
@@ -84,6 +98,8 @@
 long long int __sync_sub_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_sub_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_sub_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_sub_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_or_and_fetch(volatile char *, char,...);
@@ -95,6 +111,8 @@
 long long int __sync_or_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_or_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_or_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_or_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_and_and_fetch(volatile char *, char,...);
@@ -106,6 +124,8 @@
 long long int __sync_and_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_and_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_and_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_and_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_xor_and_fetch(volatile char *, char,...);
@@ -117,6 +137,8 @@
 long long int __sync_xor_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_xor_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_xor_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_xor_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_nand_and_fetch(volatile char *, char,...);
@@ -128,6 +150,8 @@
 long long int __sync_nand_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_nand_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_nand_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_nand_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 _Bool __sync_bool_compare_and_swap(volatile char *, char, char,...);
@@ -139,6 +163,8 @@
 _Bool __sync_bool_compare_and_swap(volatile long long int *, long long int, long long int,...);
 _Bool __sync_bool_compare_and_swap_8(volatile long long int *, long long int, long long int,...);
+#if defined(__SIZEOF_INT128__)
 _Bool __sync_bool_compare_and_swap(volatile __int128 *, __int128, __int128,...);
 _Bool __sync_bool_compare_and_swap_16(volatile __int128 *, __int128, __int128,...);
+#endif
 
 char __sync_val_compare_and_swap(volatile char *, char, char,...);
@@ -150,6 +176,8 @@
 long long int __sync_val_compare_and_swap(volatile long long int *, long long int, long long int,...);
 long long int __sync_val_compare_and_swap_8(volatile long long int *, long long int, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_val_compare_and_swap(volatile __int128 *, __int128, __int128,...);
 __int128 __sync_val_compare_and_swap_16(volatile __int128 *, __int128, __int128,...);
+#endif
 
 char __sync_lock_test_and_set(volatile char *, char,...);
@@ -161,6 +189,8 @@
 long long int __sync_lock_test_and_set(volatile long long int *, long long int,...);
 long long int __sync_lock_test_and_set_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_lock_test_and_set(volatile __int128 *, __int128,...);
 __int128 __sync_lock_test_and_set_16(volatile __int128 *, __int128,...);
+#endif
 
 void __sync_lock_release(volatile char *,...);
@@ -172,6 +202,8 @@
 void __sync_lock_release(volatile long long int *,...);
 void __sync_lock_release_8(volatile long long int *,...);
+#if defined(__SIZEOF_INT128__)
 void __sync_lock_release(volatile __int128 *,...);
 void __sync_lock_release_16(volatile __int128 *,...);
+#endif
 
 void __sync_synchronize();
@@ -185,5 +217,8 @@
 _Bool __atomic_test_and_set(volatile int *, int);
 _Bool __atomic_test_and_set(volatile long long int *, int);
+#if defined(__SIZEOF_INT128__)
 _Bool __atomic_test_and_set(volatile __int128 *, int);
+#endif
+
 void __atomic_clear(volatile _Bool *, int);
 void __atomic_clear(volatile char *, int);
@@ -191,5 +226,7 @@
 void __atomic_clear(volatile int *, int);
 void __atomic_clear(volatile long long int *, int);
+#if defined(__SIZEOF_INT128__)
 void __atomic_clear(volatile __int128 *, int);
+#endif
 
 char __atomic_exchange_n(volatile char *, volatile char *, int);
@@ -205,8 +242,12 @@
 long long int __atomic_exchange_8(volatile long long int *, long long int, int);
 void __atomic_exchange(volatile long long int *, volatile long long int *, volatile long long int *, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_exchange_n(volatile __int128 *, volatile __int128 *, int);
 __int128 __atomic_exchange_16(volatile __int128 *, __int128, int);
 void __atomic_exchange(volatile __int128 *, volatile __int128 *, volatile __int128 *, int);
-
+#endif
+
+_Bool __atomic_load_n(const volatile _Bool *, int);
+void __atomic_load(const volatile _Bool *, volatile _Bool *, int);
 char __atomic_load_n(const volatile char *, int);
 char __atomic_load_1(const volatile char *, int);
@@ -221,7 +262,9 @@
 long long int __atomic_load_8(const volatile long long int *, int);
 void __atomic_load(const volatile long long int *, volatile long long int *, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_load_n(const volatile __int128 *, int);
 __int128 __atomic_load_16(const volatile __int128 *, int);
 void __atomic_load(const volatile __int128 *, volatile __int128 *, int);
+#endif
 
 _Bool __atomic_compare_exchange_n(volatile char *, char *, char, _Bool, int, int);
@@ -237,10 +280,11 @@
 _Bool __atomic_compare_exchange_8(volatile long long int *, long long int *, long long int, _Bool, int, int);
 _Bool __atomic_compare_exchange  (volatile long long int *, long long int *, long long int *, _Bool, int, int);
+#if defined(__SIZEOF_INT128__)
 _Bool __atomic_compare_exchange_n (volatile __int128 *, __int128 *, __int128, _Bool, int, int);
 _Bool __atomic_compare_exchange_16(volatile __int128 *, __int128 *, __int128, _Bool, int, int);
 _Bool __atomic_compare_exchange   (volatile __int128 *, __int128 *, __int128 *, _Bool, int, int);
+#endif
 
 void __atomic_store_n(volatile _Bool *, _Bool, int);
-void __atomic_store_1(volatile _Bool *, _Bool, int);
 void __atomic_store(volatile _Bool *, _Bool *, int);
 void __atomic_store_n(volatile char *, char, int);
@@ -256,7 +300,9 @@
 void __atomic_store_8(volatile long long int *, long long int, int);
 void __atomic_store(volatile long long int *, long long int *, int);
+#if defined(__SIZEOF_INT128__)
 void __atomic_store_n(volatile __int128 *, __int128, int);
 void __atomic_store_16(volatile __int128 *, __int128, int);
 void __atomic_store(volatile __int128 *, __int128 *, int);
+#endif
 
 char __atomic_add_fetch  (volatile char *, char, int);
@@ -268,6 +314,8 @@
 long long int __atomic_add_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_add_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_add_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_add_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_sub_fetch  (volatile char *, char, int);
@@ -279,6 +327,8 @@
 long long int __atomic_sub_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_sub_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_sub_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_sub_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_and_fetch  (volatile char *, char, int);
@@ -290,6 +340,8 @@
 long long int __atomic_and_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_and_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_and_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_and_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_nand_fetch  (volatile char *, char, int);
@@ -301,6 +353,8 @@
 long long int __atomic_nand_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_nand_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_nand_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_nand_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_xor_fetch  (volatile char *, char, int);
@@ -312,6 +366,8 @@
 long long int __atomic_xor_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_xor_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_xor_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_xor_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_or_fetch  (volatile char *, char, int);
@@ -323,6 +379,8 @@
 long long int __atomic_or_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_or_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_or_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_or_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_add  (volatile char *, char, int);
@@ -334,6 +392,8 @@
 long long int __atomic_fetch_add  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_add_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_add   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_add_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_sub  (volatile char *, char, int);
@@ -345,6 +405,8 @@
 long long int __atomic_fetch_sub  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_sub_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_sub   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_sub_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_and  (volatile char *, char, int);
@@ -356,6 +418,8 @@
 long long int __atomic_fetch_and  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_and_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_and   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_and_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_nand  (volatile char *, char, int);
@@ -367,6 +431,8 @@
 long long int __atomic_fetch_nand  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_nand_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_nand   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_nand_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_xor  (volatile char *, char, int);
@@ -378,6 +444,8 @@
 long long int __atomic_fetch_xor  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_xor_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_xor   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_xor_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_or  (volatile char *, char, int);
@@ -389,6 +457,8 @@
 long long int __atomic_fetch_or  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_or_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_or   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_or_16(volatile __int128 *, __int128, int);
+#endif
 
 _Bool __atomic_always_lock_free(unsigned long, const volatile void *);
Index: c/tests/.expect/ifcond.txt
===================================================================
--- src/tests/.expect/ifcond.txt	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ 	(revision )
@@ -1,3 +1,0 @@
-x != 0 correct
-x != 0 && y != 0 correct
-x == y correct
Index: src/tests/.expect/ifwhileCtl.txt
===================================================================
--- src/tests/.expect/ifwhileCtl.txt	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/tests/.expect/ifwhileCtl.txt	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,7 @@
+x != 0 correct
+x != 0 && y != 0 correct
+x == y correct
+s.i < 4 correct
+x != 0 correct
+x == y correct
+s.i < 4 correct
Index: src/tests/.expect/literals.txt
===================================================================
--- src/tests/.expect/literals.txt	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/tests/.expect/literals.txt	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,6 @@
+char a
+signed char 20
+unsigned char 21
+signed short int 22
+unsigned short int 23
+size_t 24
Index: c/tests/.expect/literals.x64.txt
===================================================================
--- src/tests/.expect/literals.x64.txt	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ 	(revision )
@@ -1,1494 +1,0 @@
-void __for_each__A0_2_0_0____operator_assign__Fd0_d0d0____constructor__F_d0____constructor__F_d0d0____destructor__F_d0____operator_assign__Fd1_d1d1____constructor__F_d1____constructor__F_d1d1____destructor__F_d1____operator_preincr__Fd0_d0____operator_predecr__Fd0_d0____operator_equal__Fi_d0d0____operator_notequal__Fi_d0d0____operator_deref__Fd1_d0__F_d0d0F_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__F14titerator_type_14titerator_type14titerator_type__1)(void *__anonymous_object21, void *__anonymous_object22), __attribute__ ((unused)) void (*___constructor__F_14titerator_type__1)(void *__anonymous_object23), __attribute__ ((unused)) void (*___constructor__F_14titerator_type14titerator_type__1)(void *__anonymous_object24, void *__anonymous_object25), __attribute__ ((unused)) void (*___destructor__F_14titerator_type__1)(void *__anonymous_object26), __attribute__ ((unused)) void *(*___operator_assign__F9telt_type_9telt_type9telt_type__1)(void *__anonymous_object27, void *__anonymous_object28), __attribute__ ((unused)) void (*___constructor__F_9telt_type__1)(void *__anonymous_object29), __attribute__ ((unused)) void (*___constructor__F_9telt_type9telt_type__1)(void *__anonymous_object30, void *__anonymous_object31), __attribute__ ((unused)) void (*___destructor__F_9telt_type__1)(void *__anonymous_object32), __attribute__ ((unused)) void *(*___operator_preincr__F14titerator_type_14titerator_type__1)(void *__anonymous_object33), __attribute__ ((unused)) void *(*___operator_predecr__F14titerator_type_14titerator_type__1)(void *__anonymous_object34), __attribute__ ((unused)) signed int (*___operator_equal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object35, void *__anonymous_object36), __attribute__ ((unused)) signed int (*___operator_notequal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object37, void *__anonymous_object38), __attribute__ ((unused)) void *(*___operator_deref__F9telt_type_14titerator_type__1)(void *__anonymous_object39), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__F_9telt_type__1)(void *__anonymous_object40));
-void __for_each_reverse__A0_2_0_0____operator_assign__Fd0_d0d0____constructor__F_d0____constructor__F_d0d0____destructor__F_d0____operator_assign__Fd1_d1d1____constructor__F_d1____constructor__F_d1d1____destructor__F_d1____operator_preincr__Fd0_d0____operator_predecr__Fd0_d0____operator_equal__Fi_d0d0____operator_notequal__Fi_d0d0____operator_deref__Fd1_d0__F_d0d0F_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__F14titerator_type_14titerator_type14titerator_type__1)(void *__anonymous_object62, void *__anonymous_object63), __attribute__ ((unused)) void (*___constructor__F_14titerator_type__1)(void *__anonymous_object64), __attribute__ ((unused)) void (*___constructor__F_14titerator_type14titerator_type__1)(void *__anonymous_object65, void *__anonymous_object66), __attribute__ ((unused)) void (*___destructor__F_14titerator_type__1)(void *__anonymous_object67), __attribute__ ((unused)) void *(*___operator_assign__F9telt_type_9telt_type9telt_type__1)(void *__anonymous_object68, void *__anonymous_object69), __attribute__ ((unused)) void (*___constructor__F_9telt_type__1)(void *__anonymous_object70), __attribute__ ((unused)) void (*___constructor__F_9telt_type9telt_type__1)(void *__anonymous_object71, void *__anonymous_object72), __attribute__ ((unused)) void (*___destructor__F_9telt_type__1)(void *__anonymous_object73), __attribute__ ((unused)) void *(*___operator_preincr__F14titerator_type_14titerator_type__1)(void *__anonymous_object74), __attribute__ ((unused)) void *(*___operator_predecr__F14titerator_type_14titerator_type__1)(void *__anonymous_object75), __attribute__ ((unused)) signed int (*___operator_equal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object76, void *__anonymous_object77), __attribute__ ((unused)) signed int (*___operator_notequal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object78, void *__anonymous_object79), __attribute__ ((unused)) void *(*___operator_deref__F9telt_type_14titerator_type__1)(void *__anonymous_object80), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__F_9telt_type__1)(void *__anonymous_object81));
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0b__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object82), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object83), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object84, _Bool __anonymous_object85), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object86), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object87, const char *__anonymous_object88), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object89), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object90, _Bool __anonymous_object91), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object92), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object93), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object94), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object95), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object96), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object97, const char *__anonymous_object98), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object99), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object100, const char *__anonymous_object101), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object102), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object103), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object104, const char *__anonymous_object105, unsigned long int __anonymous_object106), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object107, const char *__fmt__PCc_1, ...), void *__anonymous_object108, _Bool __anonymous_object109);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0c__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object110), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object111), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object112, _Bool __anonymous_object113), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object114), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object115, const char *__anonymous_object116), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object117), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object118, _Bool __anonymous_object119), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object120), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object121), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object122), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object123), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object124), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object125, const char *__anonymous_object126), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object127), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object128, const char *__anonymous_object129), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object130), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object131), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object132, const char *__anonymous_object133, unsigned long int __anonymous_object134), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object135, const char *__fmt__PCc_1, ...), void *__anonymous_object136, char __anonymous_object137);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Sc__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object138), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object139), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object140, _Bool __anonymous_object141), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object142), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object143, const char *__anonymous_object144), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object145), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object146, _Bool __anonymous_object147), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object148), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object149), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object150), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object151), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object152), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object153, const char *__anonymous_object154), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object155), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object156, const char *__anonymous_object157), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object158), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object159), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object160, const char *__anonymous_object161, unsigned long int __anonymous_object162), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object163, const char *__fmt__PCc_1, ...), void *__anonymous_object164, signed char __anonymous_object165);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Uc__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object166), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object167), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object168, _Bool __anonymous_object169), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object170), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object171, const char *__anonymous_object172), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object173), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object174, _Bool __anonymous_object175), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object176), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object177), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object178), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object179), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object180), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object181, const char *__anonymous_object182), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object183), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object184, const char *__anonymous_object185), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object186), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object187), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object188, const char *__anonymous_object189, unsigned long int __anonymous_object190), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object191, const char *__fmt__PCc_1, ...), void *__anonymous_object192, unsigned char __anonymous_object193);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0s__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object194), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object195), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object196, _Bool __anonymous_object197), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object198), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object199, const char *__anonymous_object200), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object201), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object202, _Bool __anonymous_object203), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object204), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object205), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object206), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object207), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object208), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object209, const char *__anonymous_object210), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object211), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object212, const char *__anonymous_object213), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object214), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object215), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object216, const char *__anonymous_object217, unsigned long int __anonymous_object218), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object219, const char *__fmt__PCc_1, ...), void *__anonymous_object220, signed short int __anonymous_object221);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Us__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object222), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object223), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object224, _Bool __anonymous_object225), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object226), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object227, const char *__anonymous_object228), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object229), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object230, _Bool __anonymous_object231), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object232), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object233), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object234), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object235), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object236), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object237, const char *__anonymous_object238), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object239), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object240, const char *__anonymous_object241), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object242), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object243), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object244, const char *__anonymous_object245, unsigned long int __anonymous_object246), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object247, const char *__fmt__PCc_1, ...), void *__anonymous_object248, unsigned short int __anonymous_object249);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0i__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object250), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object251), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object252, _Bool __anonymous_object253), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object254), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object255, const char *__anonymous_object256), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object257), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object258, _Bool __anonymous_object259), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object260), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object261), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object262), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object263), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object264), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object265, const char *__anonymous_object266), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object267), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object268, const char *__anonymous_object269), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object270), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object271), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object272, const char *__anonymous_object273, unsigned long int __anonymous_object274), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object275, const char *__fmt__PCc_1, ...), void *__anonymous_object276, signed int __anonymous_object277);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Ui__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object278), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object279), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object280, _Bool __anonymous_object281), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object282), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object283, const char *__anonymous_object284), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object285), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object286, _Bool __anonymous_object287), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object288), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object289), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object290), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object291), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object292), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object293, const char *__anonymous_object294), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object295), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object296, const char *__anonymous_object297), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object298), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object299), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object300, const char *__anonymous_object301, unsigned long int __anonymous_object302), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object303, const char *__fmt__PCc_1, ...), void *__anonymous_object304, unsigned int __anonymous_object305);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0l__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object306), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object307), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object308, _Bool __anonymous_object309), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object310), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object311, const char *__anonymous_object312), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object313), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object314, _Bool __anonymous_object315), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object316), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object317), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object318), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object319), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object320), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object321, const char *__anonymous_object322), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object323), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object324, const char *__anonymous_object325), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object326), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object327), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object328, const char *__anonymous_object329, unsigned long int __anonymous_object330), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object331, const char *__fmt__PCc_1, ...), void *__anonymous_object332, signed long int __anonymous_object333);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0q__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object334), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object335), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object336, _Bool __anonymous_object337), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object338), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object339, const char *__anonymous_object340), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object341), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object342, _Bool __anonymous_object343), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object344), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object345), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object346), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object347), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object348), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object349, const char *__anonymous_object350), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object351), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object352, const char *__anonymous_object353), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object354), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object355), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object356, const char *__anonymous_object357, unsigned long int __anonymous_object358), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object359, const char *__fmt__PCc_1, ...), void *__anonymous_object360, signed long long int __anonymous_object361);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Ul__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object362), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object363), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object364, _Bool __anonymous_object365), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object366), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object367, const char *__anonymous_object368), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object369), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object370, _Bool __anonymous_object371), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object372), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object373), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object374), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object375), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object376), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object377, const char *__anonymous_object378), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object379), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object380, const char *__anonymous_object381), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object382), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object383), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object384, const char *__anonymous_object385, unsigned long int __anonymous_object386), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object387, const char *__fmt__PCc_1, ...), void *__anonymous_object388, unsigned long int __anonymous_object389);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Uq__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object390), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object391), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object392, _Bool __anonymous_object393), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object394), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object395, const char *__anonymous_object396), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object397), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object398, _Bool __anonymous_object399), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object400), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object401), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object402), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object403), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object404), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object405, const char *__anonymous_object406), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object407), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object408, const char *__anonymous_object409), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object410), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object411), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object412, const char *__anonymous_object413, unsigned long int __anonymous_object414), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object415, const char *__fmt__PCc_1, ...), void *__anonymous_object416, unsigned long long int __anonymous_object417);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0f__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object418), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object419), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object420, _Bool __anonymous_object421), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object422), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object423, const char *__anonymous_object424), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object425), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object426, _Bool __anonymous_object427), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object428), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object429), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object430), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object431), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object432), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object433, const char *__anonymous_object434), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object435), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object436, const char *__anonymous_object437), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object438), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object439), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object440, const char *__anonymous_object441, unsigned long int __anonymous_object442), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object443, const char *__fmt__PCc_1, ...), void *__anonymous_object444, float __anonymous_object445);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0d__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object446), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object447), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object448, _Bool __anonymous_object449), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object450), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object451, const char *__anonymous_object452), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object453), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object454, _Bool __anonymous_object455), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object456), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object457), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object458), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object459), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object460), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object461, const char *__anonymous_object462), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object463), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object464, const char *__anonymous_object465), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object466), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object467), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object468, const char *__anonymous_object469, unsigned long int __anonymous_object470), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object471, const char *__fmt__PCc_1, ...), void *__anonymous_object472, double __anonymous_object473);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0r__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object474), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object475), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object476, _Bool __anonymous_object477), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object478), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object479, const char *__anonymous_object480), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object481), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object482, _Bool __anonymous_object483), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object484), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object485), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object486), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object487), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object488), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object489, const char *__anonymous_object490), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object491), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object492, const char *__anonymous_object493), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object494), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object495), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object496, const char *__anonymous_object497, unsigned long int __anonymous_object498), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object499, const char *__fmt__PCc_1, ...), void *__anonymous_object500, long double __anonymous_object501);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Xf__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object502), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object503), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object504, _Bool __anonymous_object505), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object506), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object507, const char *__anonymous_object508), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object509), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object510, _Bool __anonymous_object511), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object512), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object513), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object514), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object515), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object516), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object517, const char *__anonymous_object518), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object519), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object520, const char *__anonymous_object521), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object522), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object523), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object524, const char *__anonymous_object525, unsigned long int __anonymous_object526), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object527, const char *__fmt__PCc_1, ...), void *__anonymous_object528, float _Complex __anonymous_object529);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Xd__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object530), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object531), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object532, _Bool __anonymous_object533), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object534), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object535, const char *__anonymous_object536), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object537), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object538, _Bool __anonymous_object539), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object540), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object541), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object542), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object543), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object544), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object545, const char *__anonymous_object546), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object547), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object548, const char *__anonymous_object549), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object550), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object551), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object552, const char *__anonymous_object553, unsigned long int __anonymous_object554), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object555, const char *__fmt__PCc_1, ...), void *__anonymous_object556, double _Complex __anonymous_object557);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Xr__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object558), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object559), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object560, _Bool __anonymous_object561), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object562), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object563, const char *__anonymous_object564), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object565), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object566, _Bool __anonymous_object567), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object568), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object569), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object570), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object571), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object572), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object573, const char *__anonymous_object574), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object575), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object576, const char *__anonymous_object577), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object578), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object579), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object580, const char *__anonymous_object581, unsigned long int __anonymous_object582), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object583, const char *__fmt__PCc_1, ...), void *__anonymous_object584, long double _Complex __anonymous_object585);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object586), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object587), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object588, _Bool __anonymous_object589), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object590), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object591, const char *__anonymous_object592), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object593), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object594, _Bool __anonymous_object595), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object596), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object597), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object598), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object599), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object600), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object601, const char *__anonymous_object602), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object603), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object604, const char *__anonymous_object605), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object606), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object607), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object608, const char *__anonymous_object609, unsigned long int __anonymous_object610), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object611, const char *__fmt__PCc_1, ...), void *__anonymous_object612, const char *__anonymous_object613);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCv__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object614), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object615), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object616, _Bool __anonymous_object617), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object618), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object619, const char *__anonymous_object620), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object621), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object622, _Bool __anonymous_object623), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object624), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object625), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object626), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object627), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object628), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object629, const char *__anonymous_object630), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object631), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object632, const char *__anonymous_object633), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object634), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object635), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object636, const char *__anonymous_object637, unsigned long int __anonymous_object638), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object639, const char *__fmt__PCc_1, ...), void *__anonymous_object640, const void *__anonymous_object641);
-void *___operator_bitor__A0_2_0_1____operator_assign__Fd1_d1d1____constructor__F_d1____constructor__F_d1d1____destructor__F_d1____operator_bitor__Fd0_d0d1___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc____operator_bitor__Fd0_d0tVARGS2__Fd0_d0d1tVARGS2__1(__attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype7tParams_M_MP)(void (*__anonymous_object642)(), void *__anonymous_object643, void *__anonymous_object644), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype2tT_M_MP)(void (*__anonymous_object645)(), void *__anonymous_object646, void *__anonymous_object647), __attribute__ ((unused)) void (*_adapterF_P2tT2tT__MP)(void (*__anonymous_object648)(), void *__anonymous_object649, void *__anonymous_object650), __attribute__ ((unused)) void (*_adapterF2tT_P2tT2tT_P_MP)(void (*__anonymous_object651)(), __attribute__ ((unused)) void *___retval__operator_assign__2tT_1, void *__anonymous_object652, void *__anonymous_object653), __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__F2tT_2tT2tT__1)(void *__anonymous_object654, void *__anonymous_object655), __attribute__ ((unused)) void (*___constructor__F_2tT__1)(void *__anonymous_object656), __attribute__ ((unused)) void (*___constructor__F_2tT2tT__1)(void *__anonymous_object657, void *__anonymous_object658), __attribute__ ((unused)) void (*___destructor__F_2tT__1)(void *__anonymous_object659), __attribute__ ((unused)) void *(*___operator_bitor__F7tostype_7tostype2tT__1)(void *__anonymous_object660, void *__anonymous_object661), __attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object662), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object663), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object664, _Bool __anonymous_object665), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object666), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object667, const char *__anonymous_object668), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object669), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object670, _Bool __anonymous_object671), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object672), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object673), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object674), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object675), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object676), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object677, const char *__anonymous_object678), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object679), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object680, const char *__anonymous_object681), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object682), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object683), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object684, const char *__anonymous_object685, unsigned long int __anonymous_object686), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object687, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_bitor__F7tostype_7tostype7tParams__1)(void *__anonymous_object688, void *__anonymous_object689), void *__os__7tostype_1, void *__arg__2tT_1, void *__rest__7tParams_1);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object690), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object691), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object692, _Bool __anonymous_object693), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object694), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object695, const char *__anonymous_object696), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object697), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object698, _Bool __anonymous_object699), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object700), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object701), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object702), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object703), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object704), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object705, const char *__anonymous_object706), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object707), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object708, const char *__anonymous_object709), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object710), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object711), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object712, const char *__anonymous_object713, unsigned long int __anonymous_object714), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object715, const char *__fmt__PCc_1, ...), void *__anonymous_object716, void *(*__anonymous_object717)(void *__anonymous_object718));
-void *__endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object719), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object720), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object721, _Bool __anonymous_object722), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object723), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object724, const char *__anonymous_object725), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object726), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object727, _Bool __anonymous_object728), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object729), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object730), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object731), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object732), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object733), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object734, const char *__anonymous_object735), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object736), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object737, const char *__anonymous_object738), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object739), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object740), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object741, const char *__anonymous_object742, unsigned long int __anonymous_object743), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object744, const char *__fmt__PCc_1, ...), void *__anonymous_object745);
-void *__sep__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object746), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object747), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object748, _Bool __anonymous_object749), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object750), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object751, const char *__anonymous_object752), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object753), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object754, _Bool __anonymous_object755), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object756), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object757), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object758), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object759), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object760), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object761, const char *__anonymous_object762), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object763), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object764, const char *__anonymous_object765), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object766), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object767), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object768, const char *__anonymous_object769, unsigned long int __anonymous_object770), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object771, const char *__fmt__PCc_1, ...), void *__anonymous_object772);
-void *__sepTuple__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object773), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object774), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object775, _Bool __anonymous_object776), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object777), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object778, const char *__anonymous_object779), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object780), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object781, _Bool __anonymous_object782), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object783), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object784), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object785), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object786), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object787), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object788, const char *__anonymous_object789), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object790), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object791, const char *__anonymous_object792), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object793), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object794), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object795, const char *__anonymous_object796, unsigned long int __anonymous_object797), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object798, const char *__fmt__PCc_1, ...), void *__anonymous_object799);
-void *__sepOn__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object800), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object801), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object802, _Bool __anonymous_object803), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object804), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object805, const char *__anonymous_object806), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object807), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object808, _Bool __anonymous_object809), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object810), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object811), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object812), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object813), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object814), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object815, const char *__anonymous_object816), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object817), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object818, const char *__anonymous_object819), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object820), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object821), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object822, const char *__anonymous_object823, unsigned long int __anonymous_object824), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object825, const char *__fmt__PCc_1, ...), void *__anonymous_object826);
-void *__sepOff__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object827), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object828), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object829, _Bool __anonymous_object830), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object831), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object832, const char *__anonymous_object833), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object834), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object835, _Bool __anonymous_object836), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object837), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object838), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object839), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object840), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object841), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object842, const char *__anonymous_object843), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object844), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object845, const char *__anonymous_object846), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object847), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object848), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object849, const char *__anonymous_object850, unsigned long int __anonymous_object851), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object852, const char *__fmt__PCc_1, ...), void *__anonymous_object853);
-void *__sepDisable__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object854), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object855), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object856, _Bool __anonymous_object857), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object858), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object859, const char *__anonymous_object860), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object861), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object862, _Bool __anonymous_object863), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object864), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object865), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object866), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object867), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object868), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object869, const char *__anonymous_object870), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object871), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object872, const char *__anonymous_object873), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object874), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object875), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object876, const char *__anonymous_object877, unsigned long int __anonymous_object878), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object879, const char *__fmt__PCc_1, ...), void *__anonymous_object880);
-void *__sepEnable__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object881), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object882), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object883, _Bool __anonymous_object884), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object885), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object886, const char *__anonymous_object887), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object888), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object889, _Bool __anonymous_object890), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object891), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object892), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object893), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object894), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object895), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object896, const char *__anonymous_object897), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object898), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object899, const char *__anonymous_object900), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object901), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object902), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object903, const char *__anonymous_object904, unsigned long int __anonymous_object905), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object906, const char *__fmt__PCc_1, ...), void *__anonymous_object907);
-void __write__A0_3_0_0____operator_assign__Fd1_d1d1____constructor__F_d1____constructor__F_d1d1____destructor__F_d1____operator_bitor__Fd0_d0d1___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc____operator_assign__Fd2_d2d2____constructor__F_d2____constructor__F_d2d2____destructor__F_d2____operator_preincr__Fd2_d2____operator_predecr__Fd2_d2____operator_equal__Fi_d2d2____operator_notequal__Fi_d2d2____operator_deref__Fd1_d2__F_d2d2d0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object908)(), void *__anonymous_object909), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object910)(), void *__anonymous_object911, void *__anonymous_object912), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object913)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object914), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object915)(), void *__anonymous_object916, void *__anonymous_object917), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object918)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object919, void *__anonymous_object920), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object921)(), void *__anonymous_object922, void *__anonymous_object923), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object924)(), void *__anonymous_object925, void *__anonymous_object926), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object927)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object928, void *__anonymous_object929), __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__F9telt_type_9telt_type9telt_type__1)(void *__anonymous_object930, void *__anonymous_object931), __attribute__ ((unused)) void (*___constructor__F_9telt_type__1)(void *__anonymous_object932), __attribute__ ((unused)) void (*___constructor__F_9telt_type9telt_type__1)(void *__anonymous_object933, void *__anonymous_object934), __attribute__ ((unused)) void (*___destructor__F_9telt_type__1)(void *__anonymous_object935), __attribute__ ((unused)) void *(*___operator_bitor__F7tostype_7tostype9telt_type__1)(void *__anonymous_object936, void *__anonymous_object937), __attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object938), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object939), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object940, _Bool __anonymous_object941), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object942), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object943, const char *__anonymous_object944), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object945), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object946, _Bool __anonymous_object947), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object948), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object949), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object950), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object951), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object952), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object953, const char *__anonymous_object954), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object955), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object956, const char *__anonymous_object957), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object958), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object959), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object960, const char *__anonymous_object961, unsigned long int __anonymous_object962), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object963, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__F14titerator_type_14titerator_type14titerator_type__1)(void *__anonymous_object964, void *__anonymous_object965), __attribute__ ((unused)) void (*___constructor__F_14titerator_type__1)(void *__anonymous_object966), __attribute__ ((unused)) void (*___constructor__F_14titerator_type14titerator_type__1)(void *__anonymous_object967, void *__anonymous_object968), __attribute__ ((unused)) void (*___destructor__F_14titerator_type__1)(void *__anonymous_object969), __attribute__ ((unused)) void *(*___operator_preincr__F14titerator_type_14titerator_type__1)(void *__anonymous_object970), __attribute__ ((unused)) void *(*___operator_predecr__F14titerator_type_14titerator_type__1)(void *__anonymous_object971), __attribute__ ((unused)) signed int (*___operator_equal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object972, void *__anonymous_object973), __attribute__ ((unused)) signed int (*___operator_notequal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object974, void *__anonymous_object975), __attribute__ ((unused)) void *(*___operator_deref__F9telt_type_14titerator_type__1)(void *__anonymous_object976), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__7tostype_1);
-void __write_reverse__A0_3_0_0____operator_assign__Fd1_d1d1____constructor__F_d1____constructor__F_d1d1____destructor__F_d1____operator_bitor__Fd0_d0d1___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc____operator_assign__Fd2_d2d2____constructor__F_d2____constructor__F_d2d2____destructor__F_d2____operator_preincr__Fd2_d2____operator_predecr__Fd2_d2____operator_equal__Fi_d2d2____operator_notequal__Fi_d2d2____operator_deref__Fd1_d2__F_d2d2d0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object977)(), void *__anonymous_object978), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object979)(), void *__anonymous_object980, void *__anonymous_object981), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object982)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object983), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object984)(), void *__anonymous_object985, void *__anonymous_object986), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object987)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object988, void *__anonymous_object989), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object990)(), void *__anonymous_object991, void *__anonymous_object992), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object993)(), void *__anonymous_object994, void *__anonymous_object995), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object996)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object997, void *__anonymous_object998), __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__F9telt_type_9telt_type9telt_type__1)(void *__anonymous_object999, void *__anonymous_object1000), __attribute__ ((unused)) void (*___constructor__F_9telt_type__1)(void *__anonymous_object1001), __attribute__ ((unused)) void (*___constructor__F_9telt_type9telt_type__1)(void *__anonymous_object1002, void *__anonymous_object1003), __attribute__ ((unused)) void (*___destructor__F_9telt_type__1)(void *__anonymous_object1004), __attribute__ ((unused)) void *(*___operator_bitor__F7tostype_7tostype9telt_type__1)(void *__anonymous_object1005, void *__anonymous_object1006), __attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object1007), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object1008), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object1009, _Bool __anonymous_object1010), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object1011), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object1012, const char *__anonymous_object1013), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object1014), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object1015, _Bool __anonymous_object1016), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object1017), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object1018), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object1019), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object1020), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object1021), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object1022, const char *__anonymous_object1023), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object1024), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object1025, const char *__anonymous_object1026), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object1027), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object1028), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object1029, const char *__anonymous_object1030, unsigned long int __anonymous_object1031), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object1032, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__F14titerator_type_14titerator_type14titerator_type__1)(void *__anonymous_object1033, void *__anonymous_object1034), __attribute__ ((unused)) void (*___constructor__F_14titerator_type__1)(void *__anonymous_object1035), __attribute__ ((unused)) void (*___constructor__F_14titerator_type14titerator_type__1)(void *__anonymous_object1036, void *__anonymous_object1037), __attribute__ ((unused)) void (*___destructor__F_14titerator_type__1)(void *__anonymous_object1038), __attribute__ ((unused)) void *(*___operator_preincr__F14titerator_type_14titerator_type__1)(void *__anonymous_object1039), __attribute__ ((unused)) void *(*___operator_predecr__F14titerator_type_14titerator_type__1)(void *__anonymous_object1040), __attribute__ ((unused)) signed int (*___operator_equal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object1041, void *__anonymous_object1042), __attribute__ ((unused)) signed int (*___operator_notequal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object1043, void *__anonymous_object1044), __attribute__ ((unused)) void *(*___operator_deref__F9telt_type_14titerator_type__1)(void *__anonymous_object1045), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__7tostype_1);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0b__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1046), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1047), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1048, char *__anonymous_object1049, unsigned long int __anonymous_object1050), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1051, char __anonymous_object1052), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1053, const char *__fmt__PCc_1, ...), void *__anonymous_object1054, _Bool *__anonymous_object1055);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0c__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1056), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1057), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1058, char *__anonymous_object1059, unsigned long int __anonymous_object1060), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1061, char __anonymous_object1062), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1063, const char *__fmt__PCc_1, ...), void *__anonymous_object1064, char *__anonymous_object1065);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Sc__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1066), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1067), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1068, char *__anonymous_object1069, unsigned long int __anonymous_object1070), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1071, char __anonymous_object1072), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1073, const char *__fmt__PCc_1, ...), void *__anonymous_object1074, signed char *__anonymous_object1075);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Uc__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1076), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1077), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1078, char *__anonymous_object1079, unsigned long int __anonymous_object1080), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1081, char __anonymous_object1082), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1083, const char *__fmt__PCc_1, ...), void *__anonymous_object1084, unsigned char *__anonymous_object1085);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0s__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1086), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1087), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1088, char *__anonymous_object1089, unsigned long int __anonymous_object1090), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1091, char __anonymous_object1092), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1093, const char *__fmt__PCc_1, ...), void *__anonymous_object1094, signed short int *__anonymous_object1095);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Us__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1096), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1097), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1098, char *__anonymous_object1099, unsigned long int __anonymous_object1100), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1101, char __anonymous_object1102), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1103, const char *__fmt__PCc_1, ...), void *__anonymous_object1104, unsigned short int *__anonymous_object1105);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0i__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1106), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1107), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1108, char *__anonymous_object1109, unsigned long int __anonymous_object1110), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1111, char __anonymous_object1112), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1113, const char *__fmt__PCc_1, ...), void *__anonymous_object1114, signed int *__anonymous_object1115);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Ui__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1116), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1117), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1118, char *__anonymous_object1119, unsigned long int __anonymous_object1120), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1121, char __anonymous_object1122), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1123, const char *__fmt__PCc_1, ...), void *__anonymous_object1124, unsigned int *__anonymous_object1125);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0l__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1126), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1127), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1128, char *__anonymous_object1129, unsigned long int __anonymous_object1130), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1131, char __anonymous_object1132), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1133, const char *__fmt__PCc_1, ...), void *__anonymous_object1134, signed long int *__anonymous_object1135);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0q__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1136), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1137), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1138, char *__anonymous_object1139, unsigned long int __anonymous_object1140), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1141, char __anonymous_object1142), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1143, const char *__fmt__PCc_1, ...), void *__anonymous_object1144, signed long long int *__anonymous_object1145);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Ul__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1146), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1147), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1148, char *__anonymous_object1149, unsigned long int __anonymous_object1150), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1151, char __anonymous_object1152), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1153, const char *__fmt__PCc_1, ...), void *__anonymous_object1154, unsigned long int *__anonymous_object1155);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Uq__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1156), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1157), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1158, char *__anonymous_object1159, unsigned long int __anonymous_object1160), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1161, char __anonymous_object1162), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1163, const char *__fmt__PCc_1, ...), void *__anonymous_object1164, unsigned long long int *__anonymous_object1165);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0f__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1166), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1167), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1168, char *__anonymous_object1169, unsigned long int __anonymous_object1170), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1171, char __anonymous_object1172), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1173, const char *__fmt__PCc_1, ...), void *__anonymous_object1174, float *__anonymous_object1175);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0d__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1176), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1177), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1178, char *__anonymous_object1179, unsigned long int __anonymous_object1180), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1181, char __anonymous_object1182), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1183, const char *__fmt__PCc_1, ...), void *__anonymous_object1184, double *__anonymous_object1185);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0r__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1186), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1187), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1188, char *__anonymous_object1189, unsigned long int __anonymous_object1190), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1191, char __anonymous_object1192), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1193, const char *__fmt__PCc_1, ...), void *__anonymous_object1194, long double *__anonymous_object1195);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Xf__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1196), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1197), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1198, char *__anonymous_object1199, unsigned long int __anonymous_object1200), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1201, char __anonymous_object1202), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1203, const char *__fmt__PCc_1, ...), void *__anonymous_object1204, float _Complex *__anonymous_object1205);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Xd__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1206), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1207), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1208, char *__anonymous_object1209, unsigned long int __anonymous_object1210), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1211, char __anonymous_object1212), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1213, const char *__fmt__PCc_1, ...), void *__anonymous_object1214, double _Complex *__anonymous_object1215);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Xr__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1216), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1217), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1218, char *__anonymous_object1219, unsigned long int __anonymous_object1220), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1221, char __anonymous_object1222), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1223, const char *__fmt__PCc_1, ...), void *__anonymous_object1224, long double _Complex *__anonymous_object1225);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1226), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1227), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1228, char *__anonymous_object1229, unsigned long int __anonymous_object1230), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1231, char __anonymous_object1232), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1233, const char *__fmt__PCc_1, ...), void *__anonymous_object1234, void *(*__anonymous_object1235)(void *__anonymous_object1236));
-void *__endl__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1237), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1238), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1239, char *__anonymous_object1240, unsigned long int __anonymous_object1241), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1242, char __anonymous_object1243), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1244, const char *__fmt__PCc_1, ...), void *__is__7tistype_1);
-struct _Istream_cstrUC {
-    char *__s__Pc_1;
-};
-static inline void ___constructor__F_16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1);
-static inline void ___constructor__F_16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, struct _Istream_cstrUC ___src__16s_Istream_cstrUC_1);
-static inline void ___destructor__F_16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1);
-static inline struct _Istream_cstrUC ___operator_assign__F16s_Istream_cstrUC_16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, struct _Istream_cstrUC ___src__16s_Istream_cstrUC_1);
-static inline void ___constructor__F_16s_Istream_cstrUCPc_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, char *__s__Pc_1);
-static inline void ___constructor__F_16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1){
-    ((void)((*___dst__16s_Istream_cstrUC_1).__s__Pc_1) /* ?{} */);
-}
-static inline void ___constructor__F_16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, struct _Istream_cstrUC ___src__16s_Istream_cstrUC_1){
-    ((void)((*___dst__16s_Istream_cstrUC_1).__s__Pc_1=___src__16s_Istream_cstrUC_1.__s__Pc_1) /* ?{} */);
-}
-static inline void ___destructor__F_16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1){
-    ((void)((*___dst__16s_Istream_cstrUC_1).__s__Pc_1) /* ^?{} */);
-}
-static inline struct _Istream_cstrUC ___operator_assign__F16s_Istream_cstrUC_16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, struct _Istream_cstrUC ___src__16s_Istream_cstrUC_1){
-    struct _Istream_cstrUC ___ret__16s_Istream_cstrUC_1;
-    ((void)((*___dst__16s_Istream_cstrUC_1).__s__Pc_1=___src__16s_Istream_cstrUC_1.__s__Pc_1));
-    ((void)___constructor__F_16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1((&___ret__16s_Istream_cstrUC_1), (*___dst__16s_Istream_cstrUC_1)));
-    return ___ret__16s_Istream_cstrUC_1;
-}
-static inline void ___constructor__F_16s_Istream_cstrUCPc_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, char *__s__Pc_1){
-    ((void)((*___dst__16s_Istream_cstrUC_1).__s__Pc_1=__s__Pc_1) /* ?{} */);
-}
-struct _Istream_cstrUC __cstr__F16s_Istream_cstrUC_Pc__1(char *__anonymous_object1245);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d016s_Istream_cstrUC__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1246), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1247), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1248, char *__anonymous_object1249, unsigned long int __anonymous_object1250), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1251, char __anonymous_object1252), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1253, const char *__fmt__PCc_1, ...), void *__anonymous_object1254, struct _Istream_cstrUC __anonymous_object1255);
-struct _Istream_cstrC {
-    char *__s__Pc_1;
-    signed int __size__i_1;
-};
-static inline void ___constructor__F_15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1);
-static inline void ___constructor__F_15s_Istream_cstrC15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, struct _Istream_cstrC ___src__15s_Istream_cstrC_1);
-static inline void ___destructor__F_15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1);
-static inline struct _Istream_cstrC ___operator_assign__F15s_Istream_cstrC_15s_Istream_cstrC15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, struct _Istream_cstrC ___src__15s_Istream_cstrC_1);
-static inline void ___constructor__F_15s_Istream_cstrCPc_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, char *__s__Pc_1);
-static inline void ___constructor__F_15s_Istream_cstrCPci_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, char *__s__Pc_1, signed int __size__i_1);
-static inline void ___constructor__F_15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1){
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1) /* ?{} */);
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1) /* ?{} */);
-}
-static inline void ___constructor__F_15s_Istream_cstrC15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, struct _Istream_cstrC ___src__15s_Istream_cstrC_1){
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1=___src__15s_Istream_cstrC_1.__s__Pc_1) /* ?{} */);
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1=___src__15s_Istream_cstrC_1.__size__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1){
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1) /* ^?{} */);
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1) /* ^?{} */);
-}
-static inline struct _Istream_cstrC ___operator_assign__F15s_Istream_cstrC_15s_Istream_cstrC15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, struct _Istream_cstrC ___src__15s_Istream_cstrC_1){
-    struct _Istream_cstrC ___ret__15s_Istream_cstrC_1;
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1=___src__15s_Istream_cstrC_1.__s__Pc_1));
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1=___src__15s_Istream_cstrC_1.__size__i_1));
-    ((void)___constructor__F_15s_Istream_cstrC15s_Istream_cstrC_autogen___1((&___ret__15s_Istream_cstrC_1), (*___dst__15s_Istream_cstrC_1)));
-    return ___ret__15s_Istream_cstrC_1;
-}
-static inline void ___constructor__F_15s_Istream_cstrCPc_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, char *__s__Pc_1){
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1=__s__Pc_1) /* ?{} */);
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1) /* ?{} */);
-}
-static inline void ___constructor__F_15s_Istream_cstrCPci_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, char *__s__Pc_1, signed int __size__i_1){
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1=__s__Pc_1) /* ?{} */);
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1=__size__i_1) /* ?{} */);
-}
-struct _Istream_cstrC __cstr__F15s_Istream_cstrC_Pci__1(char *__anonymous_object1256, signed int __size__i_1);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d015s_Istream_cstrC__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1257), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1258), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1259, char *__anonymous_object1260, unsigned long int __anonymous_object1261), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1262, char __anonymous_object1263), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1264, const char *__fmt__PCc_1, ...), void *__anonymous_object1265, struct _Istream_cstrC __anonymous_object1266);
-struct Duration {
-    signed long int __tv__l_1;
-};
-static inline void ___constructor__F_9sDuration_autogen___1(struct Duration *___dst__9sDuration_1);
-static inline void ___constructor__F_9sDuration9sDuration_autogen___1(struct Duration *___dst__9sDuration_1, struct Duration ___src__9sDuration_1);
-static inline void ___destructor__F_9sDuration_autogen___1(struct Duration *___dst__9sDuration_1);
-static inline struct Duration ___operator_assign__F9sDuration_9sDuration9sDuration_autogen___1(struct Duration *___dst__9sDuration_1, struct Duration ___src__9sDuration_1);
-static inline void ___constructor__F_9sDurationl_autogen___1(struct Duration *___dst__9sDuration_1, signed long int __tv__l_1);
-static inline void ___constructor__F_9sDuration_autogen___1(struct Duration *___dst__9sDuration_1){
-    ((void)((*___dst__9sDuration_1).__tv__l_1) /* ?{} */);
-}
-static inline void ___constructor__F_9sDuration9sDuration_autogen___1(struct Duration *___dst__9sDuration_1, struct Duration ___src__9sDuration_1){
-    ((void)((*___dst__9sDuration_1).__tv__l_1=___src__9sDuration_1.__tv__l_1) /* ?{} */);
-}
-static inline void ___destructor__F_9sDuration_autogen___1(struct Duration *___dst__9sDuration_1){
-    ((void)((*___dst__9sDuration_1).__tv__l_1) /* ^?{} */);
-}
-static inline struct Duration ___operator_assign__F9sDuration_9sDuration9sDuration_autogen___1(struct Duration *___dst__9sDuration_1, struct Duration ___src__9sDuration_1){
-    struct Duration ___ret__9sDuration_1;
-    ((void)((*___dst__9sDuration_1).__tv__l_1=___src__9sDuration_1.__tv__l_1));
-    ((void)___constructor__F_9sDuration9sDuration_autogen___1((&___ret__9sDuration_1), (*___dst__9sDuration_1)));
-    return ___ret__9sDuration_1;
-}
-static inline void ___constructor__F_9sDurationl_autogen___1(struct Duration *___dst__9sDuration_1, signed long int __tv__l_1){
-    ((void)((*___dst__9sDuration_1).__tv__l_1=__tv__l_1) /* ?{} */);
-}
-static inline void ___constructor__F_9sDuration__1(struct Duration *__dur__9sDuration_1){
-    ((void)((*__dur__9sDuration_1).__tv__l_1) /* ?{} */);
-    ((void)((*__dur__9sDuration_1).__tv__l_1=((signed long int )0)));
-}
-static inline void ___constructor__F_9sDurationZ__1(struct Duration *__dur__9sDuration_1, long int __anonymous_object1267){
-    ((void)((*__dur__9sDuration_1).__tv__l_1) /* ?{} */);
-    ((void)((*__dur__9sDuration_1).__tv__l_1=((signed long int )0)));
-}
-struct Time {
-    unsigned long int __tv__Ul_1;
-};
-static inline void ___constructor__F_5sTime_autogen___1(struct Time *___dst__5sTime_1);
-static inline void ___constructor__F_5sTime5sTime_autogen___1(struct Time *___dst__5sTime_1, struct Time ___src__5sTime_1);
-static inline void ___destructor__F_5sTime_autogen___1(struct Time *___dst__5sTime_1);
-static inline struct Time ___operator_assign__F5sTime_5sTime5sTime_autogen___1(struct Time *___dst__5sTime_1, struct Time ___src__5sTime_1);
-static inline void ___constructor__F_5sTimeUl_autogen___1(struct Time *___dst__5sTime_1, unsigned long int __tv__Ul_1);
-static inline void ___constructor__F_5sTime_autogen___1(struct Time *___dst__5sTime_1){
-    ((void)((*___dst__5sTime_1).__tv__Ul_1) /* ?{} */);
-}
-static inline void ___constructor__F_5sTime5sTime_autogen___1(struct Time *___dst__5sTime_1, struct Time ___src__5sTime_1){
-    ((void)((*___dst__5sTime_1).__tv__Ul_1=___src__5sTime_1.__tv__Ul_1) /* ?{} */);
-}
-static inline void ___destructor__F_5sTime_autogen___1(struct Time *___dst__5sTime_1){
-    ((void)((*___dst__5sTime_1).__tv__Ul_1) /* ^?{} */);
-}
-static inline struct Time ___operator_assign__F5sTime_5sTime5sTime_autogen___1(struct Time *___dst__5sTime_1, struct Time ___src__5sTime_1){
-    struct Time ___ret__5sTime_1;
-    ((void)((*___dst__5sTime_1).__tv__Ul_1=___src__5sTime_1.__tv__Ul_1));
-    ((void)___constructor__F_5sTime5sTime_autogen___1((&___ret__5sTime_1), (*___dst__5sTime_1)));
-    return ___ret__5sTime_1;
-}
-static inline void ___constructor__F_5sTimeUl_autogen___1(struct Time *___dst__5sTime_1, unsigned long int __tv__Ul_1){
-    ((void)((*___dst__5sTime_1).__tv__Ul_1=__tv__Ul_1) /* ?{} */);
-}
-static inline void ___constructor__F_5sTime__1(struct Time *__time__5sTime_1){
-    ((void)((*__time__5sTime_1).__tv__Ul_1) /* ?{} */);
-    ((void)((*__time__5sTime_1).__tv__Ul_1=((unsigned long int )0)));
-}
-static inline void ___constructor__F_5sTimeZ__1(struct Time *__time__5sTime_1, long int __anonymous_object1268){
-    ((void)((*__time__5sTime_1).__tv__Ul_1) /* ?{} */);
-    ((void)((*__time__5sTime_1).__tv__Ul_1=((unsigned long int )0)));
-}
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d09sDuration__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object1269), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object1270), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object1271, _Bool __anonymous_object1272), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object1273), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object1274, const char *__anonymous_object1275), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object1276), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object1277, _Bool __anonymous_object1278), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object1279), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object1280), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object1281), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object1282), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object1283), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object1284, const char *__anonymous_object1285), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object1286), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object1287, const char *__anonymous_object1288), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object1289), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object1290), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object1291, const char *__anonymous_object1292, unsigned long int __anonymous_object1293), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object1294, const char *__fmt__PCc_1, ...), void *__os__7tostype_1, struct Duration __dur__9sDuration_1);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d05sTime__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object1295), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object1296), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object1297, _Bool __anonymous_object1298), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object1299), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object1300, const char *__anonymous_object1301), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object1302), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object1303, _Bool __anonymous_object1304), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object1305), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object1306), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object1307), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object1308), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object1309), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object1310, const char *__anonymous_object1311), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object1312), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object1313, const char *__anonymous_object1314), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object1315), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object1316), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object1317, const char *__anonymous_object1318, unsigned long int __anonymous_object1319), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object1320, const char *__fmt__PCc_1, ...), void *__os__7tostype_1, struct Time __time__5sTime_1);
-enum __anonymous0 {
-    __sepSize__C13e__anonymous0_1 = 16,
-};
-struct ofstream {
-    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_9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1);
-static inline void ___constructor__F_9sofstream9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1, struct ofstream ___src__9sofstream_1);
-static inline void ___destructor__F_9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1);
-static inline struct ofstream ___operator_assign__F9sofstream_9sofstream9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1, struct ofstream ___src__9sofstream_1);
-static inline void ___constructor__F_9sofstreamPv_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1);
-static inline void ___constructor__F_9sofstreamPvb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1);
-static inline void ___constructor__F_9sofstreamPvbb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1);
-static inline void ___constructor__F_9sofstreamPvbbb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1);
-static inline void ___constructor__F_9sofstreamPvbbbPCc_autogen___1(struct ofstream *___dst__9sofstream_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_9sofstreamPvbbbPCcA0c_autogen___1(struct ofstream *___dst__9sofstream_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_9sofstreamPvbbbPCcA0cA0c_autogen___1(struct ofstream *___dst__9sofstream_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_9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index0 = 0;
-        for (;(_index0<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index0))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[((signed long int )_index0)]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index1 = 0;
-        for (;(_index1<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index1))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index1)]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstream9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1, struct ofstream ___src__9sofstream_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=___src__9sofstream_1.__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=___src__9sofstream_1.__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=___src__9sofstream_1.__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=___src__9sofstream_1.__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1=___src__9sofstream_1.__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index2 = 0;
-        for (;(_index2<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index2))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[((signed long int )_index2)]=___src__9sofstream_1.__separator__A0c_1[((signed long int )_index2)]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index3 = 0;
-        for (;(_index3<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index3))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index3)]=___src__9sofstream_1.__tupleSeparator__A0c_1[((signed long int )_index3)]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___destructor__F_9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1){
-    {
-        signed int _index4 = (((signed int )__sepSize__C13e__anonymous0_1)-1);
-        for (;(_index4>=0);((void)(--_index4))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index4)]) /* ^?{} */);
-        }
-
-    }
-
-    {
-        signed int _index5 = (((signed int )__sepSize__C13e__anonymous0_1)-1);
-        for (;(_index5>=0);((void)(--_index5))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[((signed long int )_index5)]) /* ^?{} */);
-        }
-
-    }
-
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ^?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1) /* ^?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1) /* ^?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1) /* ^?{} */);
-    ((void)((*___dst__9sofstream_1).__file__Pv_1) /* ^?{} */);
-}
-static inline struct ofstream ___operator_assign__F9sofstream_9sofstream9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1, struct ofstream ___src__9sofstream_1){
-    struct ofstream ___ret__9sofstream_1;
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=___src__9sofstream_1.__file__Pv_1));
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=___src__9sofstream_1.__sepDefault__b_1));
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=___src__9sofstream_1.__sepOnOff__b_1));
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=___src__9sofstream_1.__sawNL__b_1));
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1=___src__9sofstream_1.__sepCur__PCc_1));
-    {
-        signed int _index6 = 0;
-        for (;(_index6<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index6))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[((signed long int )_index6)]=___src__9sofstream_1.__separator__A0c_1[((signed long int )_index6)]));
-        }
-
-    }
-
-    {
-        signed int _index7 = 0;
-        for (;(_index7<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index7))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index7)]=___src__9sofstream_1.__tupleSeparator__A0c_1[((signed long int )_index7)]));
-        }
-
-    }
-
-    ((void)___constructor__F_9sofstream9sofstream_autogen___1((&___ret__9sofstream_1), (*___dst__9sofstream_1)));
-    return ___ret__9sofstream_1;
-}
-static inline void ___constructor__F_9sofstreamPv_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index8 = 0;
-        for (;(_index8<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index8))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[((signed long int )_index8)]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index9 = 0;
-        for (;(_index9<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index9))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index9)]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index10 = 0;
-        for (;(_index10<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index10))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[((signed long int )_index10)]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index11 = 0;
-        for (;(_index11<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index11))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index11)]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvbb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index12 = 0;
-        for (;(_index12<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index12))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[((signed long int )_index12)]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index13 = 0;
-        for (;(_index13<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index13))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index13)]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvbbb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index14 = 0;
-        for (;(_index14<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index14))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[((signed long int )_index14)]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index15 = 0;
-        for (;(_index15<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index15))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index15)]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvbbbPCc_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index16 = 0;
-        for (;(_index16<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index16))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[((signed long int )_index16)]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index17 = 0;
-        for (;(_index17<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index17))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index17)]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvbbbPCcA0c_autogen___1(struct ofstream *___dst__9sofstream_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)]){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index18 = 0;
-        for (;(_index18<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index18))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[((signed long int )_index18)]=__separator__A0c_1[((signed long int )_index18)]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index19 = 0;
-        for (;(_index19<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index19))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index19)]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvbbbPCcA0cA0c_autogen___1(struct ofstream *___dst__9sofstream_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)]){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index20 = 0;
-        for (;(_index20<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index20))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[((signed long int )_index20)]=__separator__A0c_1[((signed long int )_index20)]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index21 = 0;
-        for (;(_index21<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index21))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[((signed long int )_index21)]=__tupleSeparator__A0c_1[((signed long int )_index21)]) /* ?{} */);
-        }
-
-    }
-
-}
-_Bool __sepPrt__Fb_9sofstream__1(struct ofstream *__anonymous_object1321);
-void __sepReset__F_9sofstream__1(struct ofstream *__anonymous_object1322);
-void __sepReset__F_9sofstreamb__1(struct ofstream *__anonymous_object1323, _Bool __anonymous_object1324);
-const char *__sepGetCur__FPCc_9sofstream__1(struct ofstream *__anonymous_object1325);
-void __sepSetCur__F_9sofstreamPCc__1(struct ofstream *__anonymous_object1326, const char *__anonymous_object1327);
-_Bool __getNL__Fb_9sofstream__1(struct ofstream *__anonymous_object1328);
-void __setNL__F_9sofstreamb__1(struct ofstream *__anonymous_object1329, _Bool __anonymous_object1330);
-void __sepOn__F_9sofstream__1(struct ofstream *__anonymous_object1331);
-void __sepOff__F_9sofstream__1(struct ofstream *__anonymous_object1332);
-_Bool __sepDisable__Fb_9sofstream__1(struct ofstream *__anonymous_object1333);
-_Bool __sepEnable__Fb_9sofstream__1(struct ofstream *__anonymous_object1334);
-const char *__sepGet__FPCc_9sofstream__1(struct ofstream *__anonymous_object1335);
-void __sepSet__F_9sofstreamPCc__1(struct ofstream *__anonymous_object1336, const char *__anonymous_object1337);
-const char *__sepGetTuple__FPCc_9sofstream__1(struct ofstream *__anonymous_object1338);
-void __sepSetTuple__F_9sofstreamPCc__1(struct ofstream *__anonymous_object1339, const char *__anonymous_object1340);
-signed int __fail__Fi_9sofstream__1(struct ofstream *__anonymous_object1341);
-signed int __flush__Fi_9sofstream__1(struct ofstream *__anonymous_object1342);
-void __open__F_9sofstreamPCcPCc__1(struct ofstream *__anonymous_object1343, const char *__name__PCc_1, const char *__mode__PCc_1);
-void __open__F_9sofstreamPCc__1(struct ofstream *__anonymous_object1344, const char *__name__PCc_1);
-void __close__F_9sofstream__1(struct ofstream *__anonymous_object1345);
-struct ofstream *__write__F9sofstream_9sofstreamPCcUl__1(struct ofstream *__anonymous_object1346, const char *__data__PCc_1, unsigned long int __size__Ul_1);
-signed int __fmt__Fi_9sofstreamPCc__1(struct ofstream *__anonymous_object1347, const char *__fmt__PCc_1, ...);
-void ___constructor__F_9sofstream__1(struct ofstream *__os__9sofstream_1);
-void ___constructor__F_9sofstreamPCcPCc__1(struct ofstream *__os__9sofstream_1, const char *__name__PCc_1, const char *__mode__PCc_1);
-void ___constructor__F_9sofstreamPCc__1(struct ofstream *__os__9sofstream_1, const char *__name__PCc_1);
-extern struct ofstream *__sout__9sofstream_1;
-extern struct ofstream *__serr__9sofstream_1;
-struct ifstream {
-    void *__file__Pv_1;
-};
-static inline void ___constructor__F_9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1);
-static inline void ___constructor__F_9sifstream9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1, struct ifstream ___src__9sifstream_1);
-static inline void ___destructor__F_9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1);
-static inline struct ifstream ___operator_assign__F9sifstream_9sifstream9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1, struct ifstream ___src__9sifstream_1);
-static inline void ___constructor__F_9sifstreamPv_autogen___1(struct ifstream *___dst__9sifstream_1, void *__file__Pv_1);
-static inline void ___constructor__F_9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1){
-    ((void)((*___dst__9sifstream_1).__file__Pv_1) /* ?{} */);
-}
-static inline void ___constructor__F_9sifstream9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1, struct ifstream ___src__9sifstream_1){
-    ((void)((*___dst__9sifstream_1).__file__Pv_1=___src__9sifstream_1.__file__Pv_1) /* ?{} */);
-}
-static inline void ___destructor__F_9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1){
-    ((void)((*___dst__9sifstream_1).__file__Pv_1) /* ^?{} */);
-}
-static inline struct ifstream ___operator_assign__F9sifstream_9sifstream9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1, struct ifstream ___src__9sifstream_1){
-    struct ifstream ___ret__9sifstream_1;
-    ((void)((*___dst__9sifstream_1).__file__Pv_1=___src__9sifstream_1.__file__Pv_1));
-    ((void)___constructor__F_9sifstream9sifstream_autogen___1((&___ret__9sifstream_1), (*___dst__9sifstream_1)));
-    return ___ret__9sifstream_1;
-}
-static inline void ___constructor__F_9sifstreamPv_autogen___1(struct ifstream *___dst__9sifstream_1, void *__file__Pv_1){
-    ((void)((*___dst__9sifstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-}
-signed int __fail__Fi_9sifstream__1(struct ifstream *__is__9sifstream_1);
-signed int __eof__Fi_9sifstream__1(struct ifstream *__is__9sifstream_1);
-void __open__F_9sifstreamPCcPCc__1(struct ifstream *__is__9sifstream_1, const char *__name__PCc_1, const char *__mode__PCc_1);
-void __open__F_9sifstreamPCc__1(struct ifstream *__is__9sifstream_1, const char *__name__PCc_1);
-void __close__F_9sifstream__1(struct ifstream *__is__9sifstream_1);
-struct ifstream *__read__F9sifstream_9sifstreamPcUl__1(struct ifstream *__is__9sifstream_1, char *__data__Pc_1, unsigned long int __size__Ul_1);
-struct ifstream *__ungetc__F9sifstream_9sifstreamc__1(struct ifstream *__is__9sifstream_1, char __c__c_1);
-signed int __fmt__Fi_9sifstreamPCc__1(struct ifstream *__anonymous_object1348, const char *__fmt__PCc_1, ...);
-void ___constructor__F_9sifstream__1(struct ifstream *__is__9sifstream_1);
-void ___constructor__F_9sifstreamPCcPCc__1(struct ifstream *__is__9sifstream_1, const char *__name__PCc_1, const char *__mode__PCc_1);
-void ___constructor__F_9sifstreamPCc__1(struct ifstream *__is__9sifstream_1, const char *__name__PCc_1);
-extern struct ifstream *__sin__9sifstream_1;
-void __f__F_c__1(char __v__c_1){
-    struct ofstream *_tmp_cp_ret2;
-    struct ofstream *_tmp_cp_ret3;
-    struct ofstream *_tmp_cp_ret4;
-    __attribute__ ((unused)) struct ofstream *_thunk0(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1349))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1350))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1351, _Bool __anonymous_object1352))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1353))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1354, const char *__anonymous_object1355))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1356))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1357, _Bool __anonymous_object1358))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1359))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1360))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1361))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1362))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1363))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1364, const char *__anonymous_object1365))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1366))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1367, const char *__anonymous_object1368))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1369))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1370))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1371, const char *__anonymous_object1372, unsigned long int __anonymous_object1373))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1374, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret4=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1375))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1376))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1377, _Bool __anonymous_object1378))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1379))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1380, const char *__anonymous_object1381))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1382))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1383, _Bool __anonymous_object1384))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1385))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1386))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1387))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1388))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1389))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1390, const char *__anonymous_object1391))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1392))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1393, const char *__anonymous_object1394))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1395))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1396))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1397, const char *__anonymous_object1398, unsigned long int __anonymous_object1399))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1400, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret3=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0c__1(((_Bool (*)(void *__anonymous_object1401))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1402))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1403, _Bool __anonymous_object1404))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1405))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1406, const char *__anonymous_object1407))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1408))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1409, _Bool __anonymous_object1410))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1411))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1412))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1413))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1414))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1415))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1416, const char *__anonymous_object1417))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1418))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1419, const char *__anonymous_object1420))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1421))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1422))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1423, const char *__anonymous_object1424, unsigned long int __anonymous_object1425))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1426, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret2=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1427))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1428))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1429, _Bool __anonymous_object1430))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1431))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1432, const char *__anonymous_object1433))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1434))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1435, _Bool __anonymous_object1436))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1437))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1438))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1439))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1440))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1441))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1442, const char *__anonymous_object1443))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1444))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1445, const char *__anonymous_object1446))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1447))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1448))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1449, const char *__anonymous_object1450, unsigned long int __anonymous_object1451))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1452, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "char "))) , _tmp_cp_ret2)), __v__c_1))) , _tmp_cp_ret3)), ((void *(*)(void *__anonymous_object1453))(&_thunk0))))) , _tmp_cp_ret4));
-}
-void __f__F_Sc__1(signed char __v__Sc_1){
-    struct ofstream *_tmp_cp_ret5;
-    struct ofstream *_tmp_cp_ret6;
-    struct ofstream *_tmp_cp_ret7;
-    __attribute__ ((unused)) struct ofstream *_thunk1(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1454))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1455))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1456, _Bool __anonymous_object1457))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1458))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1459, const char *__anonymous_object1460))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1461))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1462, _Bool __anonymous_object1463))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1464))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1465))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1466))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1467))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1468))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1469, const char *__anonymous_object1470))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1471))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1472, const char *__anonymous_object1473))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1474))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1475))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1476, const char *__anonymous_object1477, unsigned long int __anonymous_object1478))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1479, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret7=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1480))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1481))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1482, _Bool __anonymous_object1483))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1484))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1485, const char *__anonymous_object1486))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1487))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1488, _Bool __anonymous_object1489))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1490))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1491))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1492))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1493))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1494))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1495, const char *__anonymous_object1496))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1497))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1498, const char *__anonymous_object1499))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1500))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1501))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1502, const char *__anonymous_object1503, unsigned long int __anonymous_object1504))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1505, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret6=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Sc__1(((_Bool (*)(void *__anonymous_object1506))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1507))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1508, _Bool __anonymous_object1509))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1510))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1511, const char *__anonymous_object1512))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1513))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1514, _Bool __anonymous_object1515))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1516))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1517))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1518))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1519))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1520))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1521, const char *__anonymous_object1522))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1523))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1524, const char *__anonymous_object1525))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1526))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1527))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1528, const char *__anonymous_object1529, unsigned long int __anonymous_object1530))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1531, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret5=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1532))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1533))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1534, _Bool __anonymous_object1535))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1536))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1537, const char *__anonymous_object1538))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1539))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1540, _Bool __anonymous_object1541))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1542))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1543))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1544))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1545))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1546))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1547, const char *__anonymous_object1548))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1549))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1550, const char *__anonymous_object1551))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1552))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1553))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1554, const char *__anonymous_object1555, unsigned long int __anonymous_object1556))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1557, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "signed char "))) , _tmp_cp_ret5)), __v__Sc_1))) , _tmp_cp_ret6)), ((void *(*)(void *__anonymous_object1558))(&_thunk1))))) , _tmp_cp_ret7));
-}
-void __f__F_Uc__1(unsigned char __v__Uc_1){
-    struct ofstream *_tmp_cp_ret8;
-    struct ofstream *_tmp_cp_ret9;
-    struct ofstream *_tmp_cp_ret10;
-    __attribute__ ((unused)) struct ofstream *_thunk2(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1559))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1560))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1561, _Bool __anonymous_object1562))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1563))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1564, const char *__anonymous_object1565))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1566))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1567, _Bool __anonymous_object1568))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1569))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1570))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1571))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1572))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1573))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1574, const char *__anonymous_object1575))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1576))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1577, const char *__anonymous_object1578))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1579))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1580))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1581, const char *__anonymous_object1582, unsigned long int __anonymous_object1583))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1584, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret10=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1585))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1586))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1587, _Bool __anonymous_object1588))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1589))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1590, const char *__anonymous_object1591))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1592))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1593, _Bool __anonymous_object1594))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1595))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1596))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1597))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1598))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1599))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1600, const char *__anonymous_object1601))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1602))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1603, const char *__anonymous_object1604))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1605))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1606))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1607, const char *__anonymous_object1608, unsigned long int __anonymous_object1609))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1610, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret9=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Uc__1(((_Bool (*)(void *__anonymous_object1611))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1612))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1613, _Bool __anonymous_object1614))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1615))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1616, const char *__anonymous_object1617))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1618))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1619, _Bool __anonymous_object1620))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1621))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1622))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1623))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1624))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1625))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1626, const char *__anonymous_object1627))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1628))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1629, const char *__anonymous_object1630))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1631))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1632))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1633, const char *__anonymous_object1634, unsigned long int __anonymous_object1635))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1636, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret8=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1637))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1638))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1639, _Bool __anonymous_object1640))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1641))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1642, const char *__anonymous_object1643))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1644))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1645, _Bool __anonymous_object1646))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1647))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1648))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1649))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1650))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1651))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1652, const char *__anonymous_object1653))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1654))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1655, const char *__anonymous_object1656))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1657))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1658))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1659, const char *__anonymous_object1660, unsigned long int __anonymous_object1661))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1662, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "unsigned char "))) , _tmp_cp_ret8)), __v__Uc_1))) , _tmp_cp_ret9)), ((void *(*)(void *__anonymous_object1663))(&_thunk2))))) , _tmp_cp_ret10));
-}
-void __f__F_s__1(signed short int __v__s_1){
-    struct ofstream *_tmp_cp_ret11;
-    struct ofstream *_tmp_cp_ret12;
-    struct ofstream *_tmp_cp_ret13;
-    __attribute__ ((unused)) struct ofstream *_thunk3(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1664))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1665))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1666, _Bool __anonymous_object1667))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1668))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1669, const char *__anonymous_object1670))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1671))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1672, _Bool __anonymous_object1673))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1674))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1675))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1676))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1677))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1678))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1679, const char *__anonymous_object1680))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1681))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1682, const char *__anonymous_object1683))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1684))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1685))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1686, const char *__anonymous_object1687, unsigned long int __anonymous_object1688))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1689, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret13=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1690))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1691))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1692, _Bool __anonymous_object1693))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1694))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1695, const char *__anonymous_object1696))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1697))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1698, _Bool __anonymous_object1699))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1700))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1701))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1702))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1703))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1704))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1705, const char *__anonymous_object1706))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1707))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1708, const char *__anonymous_object1709))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1710))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1711))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1712, const char *__anonymous_object1713, unsigned long int __anonymous_object1714))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1715, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret12=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0s__1(((_Bool (*)(void *__anonymous_object1716))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1717))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1718, _Bool __anonymous_object1719))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1720))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1721, const char *__anonymous_object1722))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1723))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1724, _Bool __anonymous_object1725))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1726))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1727))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1728))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1729))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1730))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1731, const char *__anonymous_object1732))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1733))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1734, const char *__anonymous_object1735))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1736))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1737))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1738, const char *__anonymous_object1739, unsigned long int __anonymous_object1740))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1741, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret11=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1742))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1743))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1744, _Bool __anonymous_object1745))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1746))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1747, const char *__anonymous_object1748))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1749))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1750, _Bool __anonymous_object1751))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1752))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1753))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1754))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1755))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1756))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1757, const char *__anonymous_object1758))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1759))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1760, const char *__anonymous_object1761))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1762))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1763))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1764, const char *__anonymous_object1765, unsigned long int __anonymous_object1766))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1767, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "signed short int"))) , _tmp_cp_ret11)), __v__s_1))) , _tmp_cp_ret12)), ((void *(*)(void *__anonymous_object1768))(&_thunk3))))) , _tmp_cp_ret13));
-}
-void __f__F_Us__1(unsigned short int __v__Us_1){
-    struct ofstream *_tmp_cp_ret14;
-    struct ofstream *_tmp_cp_ret15;
-    struct ofstream *_tmp_cp_ret16;
-    __attribute__ ((unused)) struct ofstream *_thunk4(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1769))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1770))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1771, _Bool __anonymous_object1772))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1773))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1774, const char *__anonymous_object1775))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1776))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1777, _Bool __anonymous_object1778))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1779))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1780))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1781))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1782))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1783))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1784, const char *__anonymous_object1785))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1786))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1787, const char *__anonymous_object1788))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1789))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1790))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1791, const char *__anonymous_object1792, unsigned long int __anonymous_object1793))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1794, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret16=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1795))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1796))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1797, _Bool __anonymous_object1798))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1799))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1800, const char *__anonymous_object1801))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1802))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1803, _Bool __anonymous_object1804))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1805))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1806))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1807))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1808))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1809))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1810, const char *__anonymous_object1811))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1812))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1813, const char *__anonymous_object1814))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1815))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1816))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1817, const char *__anonymous_object1818, unsigned long int __anonymous_object1819))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1820, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret15=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Us__1(((_Bool (*)(void *__anonymous_object1821))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1822))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1823, _Bool __anonymous_object1824))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1825))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1826, const char *__anonymous_object1827))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1828))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1829, _Bool __anonymous_object1830))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1831))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1832))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1833))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1834))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1835))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1836, const char *__anonymous_object1837))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1838))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1839, const char *__anonymous_object1840))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1841))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1842))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1843, const char *__anonymous_object1844, unsigned long int __anonymous_object1845))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1846, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret14=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1847))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1848))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1849, _Bool __anonymous_object1850))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1851))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1852, const char *__anonymous_object1853))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1854))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1855, _Bool __anonymous_object1856))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1857))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1858))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1859))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1860))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1861))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1862, const char *__anonymous_object1863))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1864))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1865, const char *__anonymous_object1866))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1867))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1868))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1869, const char *__anonymous_object1870, unsigned long int __anonymous_object1871))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1872, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "unsigned short int"))) , _tmp_cp_ret14)), __v__Us_1))) , _tmp_cp_ret15)), ((void *(*)(void *__anonymous_object1873))(&_thunk4))))) , _tmp_cp_ret16));
-}
-void __f__F_Ul__1(unsigned long int __v__Ul_1){
-    struct ofstream *_tmp_cp_ret17;
-    struct ofstream *_tmp_cp_ret18;
-    struct ofstream *_tmp_cp_ret19;
-    __attribute__ ((unused)) struct ofstream *_thunk5(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1874))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1875))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1876, _Bool __anonymous_object1877))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1878))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1879, const char *__anonymous_object1880))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1881))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1882, _Bool __anonymous_object1883))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1884))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1885))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1886))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1887))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1888))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1889, const char *__anonymous_object1890))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1891))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1892, const char *__anonymous_object1893))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1894))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1895))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1896, const char *__anonymous_object1897, unsigned long int __anonymous_object1898))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1899, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret19=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1900))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1901))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1902, _Bool __anonymous_object1903))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1904))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1905, const char *__anonymous_object1906))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1907))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1908, _Bool __anonymous_object1909))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1910))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1911))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1912))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1913))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1914))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1915, const char *__anonymous_object1916))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1917))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1918, const char *__anonymous_object1919))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1920))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1921))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1922, const char *__anonymous_object1923, unsigned long int __anonymous_object1924))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1925, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret18=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Ul__1(((_Bool (*)(void *__anonymous_object1926))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1927))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1928, _Bool __anonymous_object1929))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1930))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1931, const char *__anonymous_object1932))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1933))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1934, _Bool __anonymous_object1935))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1936))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1937))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1938))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1939))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1940))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1941, const char *__anonymous_object1942))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1943))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1944, const char *__anonymous_object1945))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1946))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1947))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1948, const char *__anonymous_object1949, unsigned long int __anonymous_object1950))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1951, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret17=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1952))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1953))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1954, _Bool __anonymous_object1955))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1956))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1957, const char *__anonymous_object1958))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1959))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1960, _Bool __anonymous_object1961))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1962))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1963))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1964))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1965))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1966))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1967, const char *__anonymous_object1968))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1969))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1970, const char *__anonymous_object1971))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1972))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1973))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1974, const char *__anonymous_object1975, unsigned long int __anonymous_object1976))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1977, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "size_t"))) , _tmp_cp_ret17)), __v__Ul_1))) , _tmp_cp_ret18)), ((void *(*)(void *__anonymous_object1978))(&_thunk5))))) , _tmp_cp_ret19));
-}
-signed int __main__Fi___1(){
-    __attribute__ ((unused)) signed int ___retval_main__i_1;
-    ((void)0b01101011);
-    ((void)0b01101011u);
-    ((void)0b01101011l);
-    ((void)0b01101011ll);
-    ((void)0b01101011ul);
-    ((void)0b01101011lu);
-    ((void)0b01101011ull);
-    ((void)0b01101011llu);
-    ((void)(+0b01101011));
-    ((void)(+0b01101011u));
-    ((void)(+0b01101011l));
-    ((void)(+0b01101011ll));
-    ((void)(+0b01101011ul));
-    ((void)(+0b01101011lu));
-    ((void)(+0b01101011ull));
-    ((void)(+0b01101011llu));
-    ((void)(-0b01101011));
-    ((void)(-0b01101011u));
-    ((void)(-0b01101011l));
-    ((void)(-0b01101011ll));
-    ((void)(-0b01101011ul));
-    ((void)(-0b01101011lu));
-    ((void)(-0b01101011ull));
-    ((void)(-0b01101011llu));
-    ((void)01234567);
-    ((void)01234567u);
-    ((void)01234567l);
-    ((void)01234567ll);
-    ((void)01234567ul);
-    ((void)01234567lu);
-    ((void)01234567ull);
-    ((void)01234567llu);
-    ((void)(+01234567));
-    ((void)(+01234567u));
-    ((void)(+01234567l));
-    ((void)(+01234567ll));
-    ((void)(+01234567ul));
-    ((void)(+01234567lu));
-    ((void)(+01234567ull));
-    ((void)(+01234567llu));
-    ((void)(-01234567));
-    ((void)(-01234567u));
-    ((void)(-01234567l));
-    ((void)(-01234567ll));
-    ((void)(-01234567ul));
-    ((void)(-01234567lu));
-    ((void)(-01234567ull));
-    ((void)(-01234567llu));
-    ((void)1234567890);
-    ((void)1234567890u);
-    ((void)1234567890l);
-    ((void)1234567890ll);
-    ((void)1234567890ul);
-    ((void)1234567890lu);
-    ((void)1234567890ull);
-    ((void)1234567890llu);
-    ((void)(+1234567890));
-    ((void)(+1234567890u));
-    ((void)(+1234567890l));
-    ((void)(+1234567890ll));
-    ((void)(+1234567890ul));
-    ((void)(+1234567890lu));
-    ((void)(+1234567890ull));
-    ((void)(+1234567890llu));
-    ((void)(-1234567890));
-    ((void)(-1234567890u));
-    ((void)(-1234567890l));
-    ((void)(-1234567890ll));
-    ((void)(-1234567890ul));
-    ((void)(-1234567890lu));
-    ((void)(-1234567890ull));
-    ((void)(-1234567890llu));
-    ((void)0x0123456789abcdef);
-    ((void)0x0123456789abcdefu);
-    ((void)0x0123456789abcdefl);
-    ((void)0x0123456789abcdefll);
-    ((void)0x0123456789abcdeful);
-    ((void)0x0123456789abcdeflu);
-    ((void)0x0123456789abcdefull);
-    ((void)0x0123456789abcdefllu);
-    ((void)(+0x0123456789abcdef));
-    ((void)(+0x0123456789abcdefu));
-    ((void)(+0x0123456789abcdefl));
-    ((void)(+0x0123456789abcdefll));
-    ((void)(+0x0123456789abcdeful));
-    ((void)(+0x0123456789abcdeflu));
-    ((void)(+0x0123456789abcdefull));
-    ((void)(+0x0123456789abcdefllu));
-    ((void)(-0x0123456789abcdef));
-    ((void)(-0x0123456789abcdefu));
-    ((void)(-0x0123456789abcdefl));
-    ((void)(-0x0123456789abcdefll));
-    ((void)(-0x0123456789abcdeful));
-    ((void)(-0x0123456789abcdeflu));
-    ((void)(-0x0123456789abcdefull));
-    ((void)(-0x0123456789abcdefllu));
-    ((void)0x0123456789ABCDEF);
-    ((void)0x0123456789ABCDEFu);
-    ((void)0x0123456789ABCDEFl);
-    ((void)0x0123456789ABCDEFll);
-    ((void)0x0123456789ABCDEFul);
-    ((void)0x0123456789ABCDEFlu);
-    ((void)0x0123456789ABCDEFull);
-    ((void)0x0123456789ABCDEFllu);
-    ((void)(+0x0123456789ABCDEF));
-    ((void)(+0x0123456789ABCDEFu));
-    ((void)(+0x0123456789ABCDEFl));
-    ((void)(+0x0123456789ABCDEFll));
-    ((void)(+0x0123456789ABCDEFul));
-    ((void)(+0x0123456789ABCDEFlu));
-    ((void)(+0x0123456789ABCDEFull));
-    ((void)(+0x0123456789ABCDEFllu));
-    ((void)(-0x0123456789ABCDEF));
-    ((void)(-0x0123456789ABCDEFu));
-    ((void)(-0x0123456789ABCDEFl));
-    ((void)(-0x0123456789ABCDEFll));
-    ((void)(-0x0123456789ABCDEFul));
-    ((void)(-0x0123456789ABCDEFlu));
-    ((void)(-0x0123456789ABCDEFull));
-    ((void)(-0x0123456789ABCDEFllu));
-    ((void)0X0123456789abcdef);
-    ((void)0X0123456789abcdefu);
-    ((void)0X0123456789abcdefl);
-    ((void)0X0123456789abcdefll);
-    ((void)0X0123456789abcdeful);
-    ((void)0X0123456789abcdeflu);
-    ((void)0X0123456789abcdefull);
-    ((void)0X0123456789abcdefllu);
-    ((void)(+0X0123456789abcdef));
-    ((void)(+0X0123456789abcdefu));
-    ((void)(+0X0123456789abcdefl));
-    ((void)(+0X0123456789abcdefll));
-    ((void)(+0X0123456789abcdeful));
-    ((void)(+0X0123456789abcdeflu));
-    ((void)(+0X0123456789abcdefull));
-    ((void)(+0X0123456789abcdefllu));
-    ((void)(-0X0123456789abcdef));
-    ((void)(-0X0123456789abcdefu));
-    ((void)(-0X0123456789abcdefl));
-    ((void)(-0X0123456789abcdefll));
-    ((void)(-0X0123456789abcdeful));
-    ((void)(-0X0123456789abcdeflu));
-    ((void)(-0X0123456789abcdefull));
-    ((void)(-0X0123456789abcdefllu));
-    ((void)0X0123456789ABCDEF);
-    ((void)0X0123456789ABCDEFu);
-    ((void)0X0123456789ABCDEFl);
-    ((void)0X0123456789ABCDEFll);
-    ((void)0X0123456789ABCDEFul);
-    ((void)0X0123456789ABCDEFlu);
-    ((void)0X0123456789ABCDEFull);
-    ((void)0X0123456789ABCDEFllu);
-    ((void)(+0X0123456789ABCDEF));
-    ((void)(+0X0123456789ABCDEFu));
-    ((void)(+0X0123456789ABCDEFl));
-    ((void)(+0X0123456789ABCDEFll));
-    ((void)(+0X0123456789ABCDEFul));
-    ((void)(+0X0123456789ABCDEFlu));
-    ((void)(+0X0123456789ABCDEFull));
-    ((void)(+0X0123456789ABCDEFllu));
-    ((void)(-0X0123456789ABCDEF));
-    ((void)(-0X0123456789ABCDEFu));
-    ((void)(-0X0123456789ABCDEFl));
-    ((void)(-0X0123456789ABCDEFll));
-    ((void)(-0X0123456789ABCDEFul));
-    ((void)(-0X0123456789ABCDEFlu));
-    ((void)(-0X0123456789ABCDEFull));
-    ((void)(-0X0123456789ABCDEFllu));
-    ((void)0123456789.);
-    ((void)0123456789.f);
-    ((void)0123456789.l);
-    ((void)0123456789.F);
-    ((void)0123456789.L);
-    ((void)0123456789.DL);
-    ((void)(+0123456789.));
-    ((void)(+0123456789.f));
-    ((void)(+0123456789.l));
-    ((void)(+0123456789.F));
-    ((void)(+0123456789.L));
-    ((void)(+0123456789.DL));
-    ((void)(-0123456789.));
-    ((void)(-0123456789.f));
-    ((void)(-0123456789.l));
-    ((void)(-0123456789.F));
-    ((void)(-0123456789.L));
-    ((void)(-0123456789.DL));
-    ((void)0123456789.e09);
-    ((void)0123456789.e09f);
-    ((void)0123456789.e09l);
-    ((void)0123456789.e09F);
-    ((void)0123456789.e09L);
-    ((void)0123456789.e09DL);
-    ((void)(+0123456789.e09));
-    ((void)(+0123456789.e09f));
-    ((void)(+0123456789.e09l));
-    ((void)(+0123456789.e09F));
-    ((void)(+0123456789.e09L));
-    ((void)(+0123456789.e09DL));
-    ((void)(-0123456789.e09));
-    ((void)(-0123456789.e09f));
-    ((void)(-0123456789.e09l));
-    ((void)(-0123456789.e09F));
-    ((void)(-0123456789.e09L));
-    ((void)(-0123456789.e09DL));
-    ((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));
-    ((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));
-    ((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);
-    ((void).0123456789f);
-    ((void).0123456789l);
-    ((void).0123456789F);
-    ((void).0123456789L);
-    ((void).0123456789DL);
-    ((void)(+.0123456789));
-    ((void)(+.0123456789f));
-    ((void)(+.0123456789l));
-    ((void)(+.0123456789F));
-    ((void)(+.0123456789L));
-    ((void)(+.0123456789DL));
-    ((void)(-.0123456789));
-    ((void)(-.0123456789f));
-    ((void)(-.0123456789l));
-    ((void)(-.0123456789F));
-    ((void)(-.0123456789L));
-    ((void)(-.0123456789DL));
-    ((void).0123456789e09);
-    ((void).0123456789e09f);
-    ((void).0123456789e09l);
-    ((void).0123456789e09F);
-    ((void).0123456789e09L);
-    ((void).0123456789e09DL);
-    ((void)(+.0123456789e09));
-    ((void)(+.0123456789e09f));
-    ((void)(+.0123456789e09l));
-    ((void)(+.0123456789e09F));
-    ((void)(+.0123456789e09L));
-    ((void)(+.0123456789e09DL));
-    ((void)(-.0123456789e09));
-    ((void)(-.0123456789e09f));
-    ((void)(-.0123456789e09l));
-    ((void)(-.0123456789e09F));
-    ((void)(-.0123456789e09L));
-    ((void)(-.0123456789e09DL));
-    ((void).0123456789E+09);
-    ((void).0123456789E+09f);
-    ((void).0123456789E+09l);
-    ((void).0123456789E+09F);
-    ((void).0123456789E+09L);
-    ((void).0123456789E+09DL);
-    ((void)(+.0123456789E+09));
-    ((void)(+.0123456789E+09f));
-    ((void)(+.0123456789E+09l));
-    ((void)(+.0123456789E+09F));
-    ((void)(+.0123456789E+09L));
-    ((void)(+.0123456789E+09DL));
-    ((void)(-.0123456789E+09));
-    ((void)(-.0123456789E+09f));
-    ((void)(-.0123456789E+09l));
-    ((void)(-.0123456789E+09F));
-    ((void)(-.0123456789E+09L));
-    ((void)(-.0123456789E+09DL));
-    ((void).0123456789E-09);
-    ((void).0123456789E-09f);
-    ((void).0123456789E-09l);
-    ((void).0123456789E-09F);
-    ((void).0123456789E-09L);
-    ((void).0123456789E-09DL);
-    ((void)(-.0123456789E-09));
-    ((void)(-.0123456789E-09f));
-    ((void)(-.0123456789E-09l));
-    ((void)(-.0123456789E-09F));
-    ((void)(-.0123456789E-09L));
-    ((void)(-.0123456789E-09DL));
-    ((void)(-.0123456789E-09));
-    ((void)(-.0123456789E-09f));
-    ((void)(-.0123456789E-09l));
-    ((void)(-.0123456789E-09F));
-    ((void)(-.0123456789E-09L));
-    ((void)(-.0123456789E-09DL));
-    ((void)0123456789.0123456789);
-    ((void)0123456789.0123456789f);
-    ((void)0123456789.0123456789l);
-    ((void)0123456789.0123456789F);
-    ((void)0123456789.0123456789L);
-    ((void)0123456789.0123456789DL);
-    ((void)(+0123456789.0123456789));
-    ((void)(+0123456789.0123456789f));
-    ((void)(+0123456789.0123456789l));
-    ((void)(+0123456789.0123456789F));
-    ((void)(+0123456789.0123456789L));
-    ((void)(+0123456789.0123456789DL));
-    ((void)(-0123456789.0123456789));
-    ((void)(-0123456789.0123456789f));
-    ((void)(-0123456789.0123456789l));
-    ((void)(-0123456789.0123456789F));
-    ((void)(-0123456789.0123456789L));
-    ((void)(-0123456789.0123456789DL));
-    ((void)0123456789.0123456789E09);
-    ((void)0123456789.0123456789E09f);
-    ((void)0123456789.0123456789E09l);
-    ((void)0123456789.0123456789E09F);
-    ((void)0123456789.0123456789E09L);
-    ((void)0123456789.0123456789E09DL);
-    ((void)(+0123456789.0123456789E09));
-    ((void)(+0123456789.0123456789E09f));
-    ((void)(+0123456789.0123456789E09l));
-    ((void)(+0123456789.0123456789E09F));
-    ((void)(+0123456789.0123456789E09L));
-    ((void)(+0123456789.0123456789E09DL));
-    ((void)(-0123456789.0123456789E09));
-    ((void)(-0123456789.0123456789E09f));
-    ((void)(-0123456789.0123456789E09l));
-    ((void)(-0123456789.0123456789E09F));
-    ((void)(-0123456789.0123456789E09L));
-    ((void)(-0123456789.0123456789E09DL));
-    ((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));
-    ((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));
-    ((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)0x0123456789.p09);
-    ((void)0x0123456789.p09f);
-    ((void)0x0123456789.p09l);
-    ((void)0x0123456789.p09F);
-    ((void)0x0123456789.p09L);
-    ((void)(+0x0123456789.p09));
-    ((void)(+0x0123456789.p09f));
-    ((void)(+0x0123456789.p09l));
-    ((void)(+0x0123456789.p09F));
-    ((void)(+0x0123456789.p09L));
-    ((void)(-0x0123456789.p09));
-    ((void)(-0x0123456789.p09f));
-    ((void)(-0x0123456789.p09l));
-    ((void)(-0x0123456789.p09F));
-    ((void)(-0x0123456789.p09L));
-    ((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));
-    ((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));
-    ((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)0x.0123456789p09);
-    ((void)0x.0123456789p09f);
-    ((void)0x.0123456789p09l);
-    ((void)0x.0123456789p09F);
-    ((void)0x.0123456789p09L);
-    ((void)(+0x.0123456789p09));
-    ((void)(+0x.0123456789p09f));
-    ((void)(+0x.0123456789p09l));
-    ((void)(+0x.0123456789p09F));
-    ((void)(+0x.0123456789p09L));
-    ((void)(-0x.0123456789p09));
-    ((void)(-0x.0123456789p09f));
-    ((void)(-0x.0123456789p09l));
-    ((void)(-0x.0123456789p09F));
-    ((void)(-0x.0123456789p09L));
-    ((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));
-    ((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));
-    ((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)0X0123456789.0123456789P09);
-    ((void)0X0123456789.0123456789P09f);
-    ((void)0X0123456789.0123456789P09l);
-    ((void)0X0123456789.0123456789P09F);
-    ((void)0X0123456789.0123456789P09L);
-    ((void)(+0X0123456789.0123456789P09));
-    ((void)(+0X0123456789.0123456789P09f));
-    ((void)(+0X0123456789.0123456789P09l));
-    ((void)(+0X0123456789.0123456789P09F));
-    ((void)(+0X0123456789.0123456789P09L));
-    ((void)(-0X0123456789.0123456789P09));
-    ((void)(-0X0123456789.0123456789P09f));
-    ((void)(-0X0123456789.0123456789P09l));
-    ((void)(-0X0123456789.0123456789P09F));
-    ((void)(-0X0123456789.0123456789P09L));
-    ((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));
-    ((void)(+0X0123456789.0123456789P+09l));
-    ((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);
-    ((void)0X0123456789.0123456789P-09l);
-    ((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));
-    ((void)(-0X0123456789.0123456789P-09l));
-    ((void)(-0X0123456789.0123456789P-09F));
-    ((void)(-0X0123456789.0123456789P-09L));
-    ((void)((signed char )0b01101011));
-    ((void)((signed short int )0b01101011));
-    ((void)((signed int )0b01101011));
-    ((void)((signed long int )0b01101011));
-    ((void)((__int128 )0b01101011));
-    ((void)((unsigned char )0b01101011u));
-    ((void)((signed short int )0b01101011u));
-    ((void)((unsigned int )0b01101011u));
-    ((void)((signed long int )0b01101011u));
-    ((void)((__int128 )0b01101011u));
-    ((void)(+((signed int )((signed char )0b01101011))));
-    ((void)(+((signed int )((signed short int )0b01101011))));
-    ((void)(+((signed int )0b01101011)));
-    ((void)(+((signed long int )0b01101011)));
-    ((void)(+((float )((__int128 )0b01101011))));
-    ((void)(+((signed int )((unsigned char )0b01101011u))));
-    ((void)(+((signed int )((signed short int )0b01101011u))));
-    ((void)(+((unsigned int )0b01101011u)));
-    ((void)(+((signed long int )0b01101011u)));
-    ((void)(+((float )((__int128 )0b01101011u))));
-    ((void)(-((signed int )((signed char )0b01101011))));
-    ((void)(-((signed int )((signed short int )0b01101011))));
-    ((void)(-((signed int )0b01101011)));
-    ((void)(-((signed long int )0b01101011)));
-    ((void)(-((float )((__int128 )0b01101011))));
-    ((void)(-((signed int )((unsigned char )0b01101011u))));
-    ((void)(-((signed int )((signed short int )0b01101011u))));
-    ((void)(-((unsigned int )0b01101011u)));
-    ((void)(-((signed long int )0b01101011u)));
-    ((void)(-((float )((__int128 )0b01101011u))));
-    ((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));
-    ((void)__f__F_Uc__1(((unsigned char )21u)));
-    ((void)__f__F_s__1(22));
-    ((void)__f__F_Us__1(((unsigned short int )23u)));
-    ((void)__f__F_Ul__1(((unsigned long int )24)));
-    ((void)' ');
-    ((void)'a');
-    ((void)'"');
-    ((void)'_');
-    ((void)'\'');
-    ((void)'\"');
-    ((void)'\?');
-    ((void)'\\');
-    ((void)'\a');
-    ((void)'\b');
-    ((void)'\e');
-    ((void)'\f');
-    ((void)'\n');
-    ((void)'\r');
-    ((void)'\t');
-    ((void)'\v');
-    ((void)'\0');
-    ((void)'\377');
-    ((void)'\xf');
-    ((void)'\xff');
-    ((void)u' ');
-    ((void)u'a');
-    ((void)u'"');
-    ((void)u'_');
-    ((void)U' ');
-    ((void)U'a');
-    ((void)U'"');
-    ((void)U'_');
-    ((void)L' ');
-    ((void)L'a');
-    ((void)L'"');
-    ((void)L'_');
-    ((void)" ");
-    ((void)"a");
-    ((void)"'");
-    ((void)'_');
-    ((void)"abcdefghijklmnopqrstuvwxyz");
-    ((void)"");
-    ((void)"aa");
-    ((void)"a\na");
-    ((void)"a\0a");
-    ((void)"_\377_");
-    ((void)"_\xff_");
-    ((void)"\xff");
-    ((void)"\'");
-    ((void)"\"");
-    ((void)"\?");
-    ((void)"\\");
-    ((void)"\a");
-    ((void)"\b");
-    ((void)"\e");
-    ((void)"\f");
-    ((void)"\n");
-    ((void)"\r");
-    ((void)"\t");
-    ((void)"\v");
-    ((void)"\0");
-    ((void)"\377");
-    ((void)"\xf");
-    ((void)"\xff");
-    ((void)u8" ");
-    ((void)u8"a");
-    ((void)u8"'");
-    ((void)u'_');
-    ((void)u8"abcdefghijklmnopqrstuvwxyz");
-    ((void)u" ");
-    ((void)u"a");
-    ((void)u"'");
-    ((void)u'_');
-    ((void)u"abcdefghijklmnopqrstuvwxyz");
-    ((void)U" ");
-    ((void)U"a");
-    ((void)U"'");
-    ((void)U'_');
-    ((void)U"abcdefghijklmnopqrstuvwxyz");
-    ((void)L" ");
-    ((void)L"a");
-    ((void)L"'");
-    ((void)L'_');
-    ((void)L"abcdefghijklmnopqrstuvwxyz");
-    ((void)"\xFF");
-    ((void)u"\xFFFF");
-    ((void)U"\xFFFFFFFF");
-    ((void)L"\xFFFFFFFF");
-    ((void)"\x12" "3");
-    ((void)u8"a" "b" "c");
-    ((void)u8"a" "b" "c");
-    ((void)u8"a" "b" "c");
-    ((void)u8"a" "b" "c");
-    ((void)u8"a" "b" "c");
-    ((void)u"a" "b" "c");
-    ((void)u"a" "b" "c");
-    ((void)u"a" "b" "c");
-    ((void)u"a" "b" "c");
-    ((void)u"a" "b" "c");
-    ((void)U"a" "b" "c");
-    ((void)U"a" "b" "c");
-    ((void)U"a" "b" "c");
-    ((void)U"a" "b" "c");
-    ((void)U"a" "b" "c");
-    ((void)L"a" "b" "c");
-    ((void)L"a" "b" "c");
-    ((void)L"a" "b" "c");
-    ((void)L"a" "b" "c");
-    ((void)L"a" "b" "c");
-    ((void)(___retval_main__i_1=0) /* ?{} */);
-    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(); }
-static inline signed int invoke_main(signed int argc, char **argv, char **envp);
-signed int main(signed int __argc__i_1, char **__argv__PPc_1, char **__envp__PPc_1){
-    __attribute__ ((unused)) signed int ___retval_main__i_1;
-    signed int _tmp_cp_ret2;
-    ((void)(___retval_main__i_1=(((void)(_tmp_cp_ret2=invoke_main(__argc__i_1, __argv__PPc_1, __envp__PPc_1))) , _tmp_cp_ret2)) /* ?{} */);
-    ((void)(_tmp_cp_ret2) /* ^?{} */);
-    return ___retval_main__i_1;
-}
Index: c/tests/.expect/literals.x86.txt
===================================================================
--- src/tests/.expect/literals.x86.txt	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ 	(revision )
@@ -1,1494 +1,0 @@
-void __for_each__A0_2_0_0____operator_assign__Fd0_d0d0____constructor__F_d0____constructor__F_d0d0____destructor__F_d0____operator_assign__Fd1_d1d1____constructor__F_d1____constructor__F_d1d1____destructor__F_d1____operator_preincr__Fd0_d0____operator_predecr__Fd0_d0____operator_equal__Fi_d0d0____operator_notequal__Fi_d0d0____operator_deref__Fd1_d0__F_d0d0F_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__F14titerator_type_14titerator_type14titerator_type__1)(void *__anonymous_object21, void *__anonymous_object22), __attribute__ ((unused)) void (*___constructor__F_14titerator_type__1)(void *__anonymous_object23), __attribute__ ((unused)) void (*___constructor__F_14titerator_type14titerator_type__1)(void *__anonymous_object24, void *__anonymous_object25), __attribute__ ((unused)) void (*___destructor__F_14titerator_type__1)(void *__anonymous_object26), __attribute__ ((unused)) void *(*___operator_assign__F9telt_type_9telt_type9telt_type__1)(void *__anonymous_object27, void *__anonymous_object28), __attribute__ ((unused)) void (*___constructor__F_9telt_type__1)(void *__anonymous_object29), __attribute__ ((unused)) void (*___constructor__F_9telt_type9telt_type__1)(void *__anonymous_object30, void *__anonymous_object31), __attribute__ ((unused)) void (*___destructor__F_9telt_type__1)(void *__anonymous_object32), __attribute__ ((unused)) void *(*___operator_preincr__F14titerator_type_14titerator_type__1)(void *__anonymous_object33), __attribute__ ((unused)) void *(*___operator_predecr__F14titerator_type_14titerator_type__1)(void *__anonymous_object34), __attribute__ ((unused)) signed int (*___operator_equal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object35, void *__anonymous_object36), __attribute__ ((unused)) signed int (*___operator_notequal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object37, void *__anonymous_object38), __attribute__ ((unused)) void *(*___operator_deref__F9telt_type_14titerator_type__1)(void *__anonymous_object39), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__F_9telt_type__1)(void *__anonymous_object40));
-void __for_each_reverse__A0_2_0_0____operator_assign__Fd0_d0d0____constructor__F_d0____constructor__F_d0d0____destructor__F_d0____operator_assign__Fd1_d1d1____constructor__F_d1____constructor__F_d1d1____destructor__F_d1____operator_preincr__Fd0_d0____operator_predecr__Fd0_d0____operator_equal__Fi_d0d0____operator_notequal__Fi_d0d0____operator_deref__Fd1_d0__F_d0d0F_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__F14titerator_type_14titerator_type14titerator_type__1)(void *__anonymous_object62, void *__anonymous_object63), __attribute__ ((unused)) void (*___constructor__F_14titerator_type__1)(void *__anonymous_object64), __attribute__ ((unused)) void (*___constructor__F_14titerator_type14titerator_type__1)(void *__anonymous_object65, void *__anonymous_object66), __attribute__ ((unused)) void (*___destructor__F_14titerator_type__1)(void *__anonymous_object67), __attribute__ ((unused)) void *(*___operator_assign__F9telt_type_9telt_type9telt_type__1)(void *__anonymous_object68, void *__anonymous_object69), __attribute__ ((unused)) void (*___constructor__F_9telt_type__1)(void *__anonymous_object70), __attribute__ ((unused)) void (*___constructor__F_9telt_type9telt_type__1)(void *__anonymous_object71, void *__anonymous_object72), __attribute__ ((unused)) void (*___destructor__F_9telt_type__1)(void *__anonymous_object73), __attribute__ ((unused)) void *(*___operator_preincr__F14titerator_type_14titerator_type__1)(void *__anonymous_object74), __attribute__ ((unused)) void *(*___operator_predecr__F14titerator_type_14titerator_type__1)(void *__anonymous_object75), __attribute__ ((unused)) signed int (*___operator_equal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object76, void *__anonymous_object77), __attribute__ ((unused)) signed int (*___operator_notequal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object78, void *__anonymous_object79), __attribute__ ((unused)) void *(*___operator_deref__F9telt_type_14titerator_type__1)(void *__anonymous_object80), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__F_9telt_type__1)(void *__anonymous_object81));
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0b__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object82), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object83), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object84, _Bool __anonymous_object85), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object86), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object87, const char *__anonymous_object88), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object89), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object90, _Bool __anonymous_object91), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object92), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object93), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object94), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object95), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object96), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object97, const char *__anonymous_object98), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object99), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object100, const char *__anonymous_object101), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object102), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object103), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object104, const char *__anonymous_object105, unsigned long int __anonymous_object106), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object107, const char *__fmt__PCc_1, ...), void *__anonymous_object108, _Bool __anonymous_object109);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0c__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object110), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object111), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object112, _Bool __anonymous_object113), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object114), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object115, const char *__anonymous_object116), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object117), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object118, _Bool __anonymous_object119), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object120), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object121), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object122), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object123), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object124), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object125, const char *__anonymous_object126), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object127), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object128, const char *__anonymous_object129), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object130), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object131), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object132, const char *__anonymous_object133, unsigned long int __anonymous_object134), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object135, const char *__fmt__PCc_1, ...), void *__anonymous_object136, char __anonymous_object137);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Sc__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object138), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object139), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object140, _Bool __anonymous_object141), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object142), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object143, const char *__anonymous_object144), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object145), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object146, _Bool __anonymous_object147), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object148), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object149), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object150), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object151), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object152), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object153, const char *__anonymous_object154), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object155), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object156, const char *__anonymous_object157), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object158), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object159), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object160, const char *__anonymous_object161, unsigned long int __anonymous_object162), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object163, const char *__fmt__PCc_1, ...), void *__anonymous_object164, signed char __anonymous_object165);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Uc__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object166), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object167), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object168, _Bool __anonymous_object169), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object170), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object171, const char *__anonymous_object172), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object173), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object174, _Bool __anonymous_object175), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object176), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object177), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object178), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object179), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object180), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object181, const char *__anonymous_object182), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object183), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object184, const char *__anonymous_object185), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object186), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object187), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object188, const char *__anonymous_object189, unsigned long int __anonymous_object190), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object191, const char *__fmt__PCc_1, ...), void *__anonymous_object192, unsigned char __anonymous_object193);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0s__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object194), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object195), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object196, _Bool __anonymous_object197), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object198), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object199, const char *__anonymous_object200), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object201), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object202, _Bool __anonymous_object203), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object204), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object205), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object206), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object207), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object208), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object209, const char *__anonymous_object210), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object211), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object212, const char *__anonymous_object213), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object214), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object215), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object216, const char *__anonymous_object217, unsigned long int __anonymous_object218), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object219, const char *__fmt__PCc_1, ...), void *__anonymous_object220, signed short int __anonymous_object221);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Us__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object222), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object223), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object224, _Bool __anonymous_object225), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object226), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object227, const char *__anonymous_object228), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object229), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object230, _Bool __anonymous_object231), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object232), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object233), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object234), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object235), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object236), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object237, const char *__anonymous_object238), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object239), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object240, const char *__anonymous_object241), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object242), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object243), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object244, const char *__anonymous_object245, unsigned long int __anonymous_object246), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object247, const char *__fmt__PCc_1, ...), void *__anonymous_object248, unsigned short int __anonymous_object249);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0i__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object250), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object251), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object252, _Bool __anonymous_object253), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object254), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object255, const char *__anonymous_object256), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object257), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object258, _Bool __anonymous_object259), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object260), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object261), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object262), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object263), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object264), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object265, const char *__anonymous_object266), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object267), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object268, const char *__anonymous_object269), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object270), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object271), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object272, const char *__anonymous_object273, unsigned long int __anonymous_object274), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object275, const char *__fmt__PCc_1, ...), void *__anonymous_object276, signed int __anonymous_object277);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Ui__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object278), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object279), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object280, _Bool __anonymous_object281), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object282), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object283, const char *__anonymous_object284), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object285), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object286, _Bool __anonymous_object287), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object288), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object289), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object290), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object291), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object292), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object293, const char *__anonymous_object294), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object295), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object296, const char *__anonymous_object297), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object298), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object299), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object300, const char *__anonymous_object301, unsigned long int __anonymous_object302), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object303, const char *__fmt__PCc_1, ...), void *__anonymous_object304, unsigned int __anonymous_object305);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0l__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object306), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object307), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object308, _Bool __anonymous_object309), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object310), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object311, const char *__anonymous_object312), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object313), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object314, _Bool __anonymous_object315), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object316), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object317), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object318), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object319), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object320), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object321, const char *__anonymous_object322), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object323), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object324, const char *__anonymous_object325), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object326), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object327), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object328, const char *__anonymous_object329, unsigned long int __anonymous_object330), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object331, const char *__fmt__PCc_1, ...), void *__anonymous_object332, signed long int __anonymous_object333);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0q__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object334), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object335), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object336, _Bool __anonymous_object337), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object338), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object339, const char *__anonymous_object340), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object341), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object342, _Bool __anonymous_object343), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object344), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object345), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object346), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object347), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object348), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object349, const char *__anonymous_object350), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object351), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object352, const char *__anonymous_object353), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object354), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object355), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object356, const char *__anonymous_object357, unsigned long int __anonymous_object358), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object359, const char *__fmt__PCc_1, ...), void *__anonymous_object360, signed long long int __anonymous_object361);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Ul__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object362), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object363), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object364, _Bool __anonymous_object365), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object366), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object367, const char *__anonymous_object368), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object369), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object370, _Bool __anonymous_object371), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object372), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object373), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object374), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object375), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object376), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object377, const char *__anonymous_object378), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object379), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object380, const char *__anonymous_object381), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object382), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object383), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object384, const char *__anonymous_object385, unsigned long int __anonymous_object386), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object387, const char *__fmt__PCc_1, ...), void *__anonymous_object388, unsigned long int __anonymous_object389);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Uq__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object390), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object391), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object392, _Bool __anonymous_object393), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object394), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object395, const char *__anonymous_object396), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object397), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object398, _Bool __anonymous_object399), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object400), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object401), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object402), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object403), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object404), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object405, const char *__anonymous_object406), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object407), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object408, const char *__anonymous_object409), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object410), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object411), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object412, const char *__anonymous_object413, unsigned long int __anonymous_object414), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object415, const char *__fmt__PCc_1, ...), void *__anonymous_object416, unsigned long long int __anonymous_object417);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0f__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object418), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object419), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object420, _Bool __anonymous_object421), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object422), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object423, const char *__anonymous_object424), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object425), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object426, _Bool __anonymous_object427), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object428), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object429), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object430), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object431), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object432), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object433, const char *__anonymous_object434), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object435), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object436, const char *__anonymous_object437), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object438), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object439), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object440, const char *__anonymous_object441, unsigned long int __anonymous_object442), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object443, const char *__fmt__PCc_1, ...), void *__anonymous_object444, float __anonymous_object445);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0d__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object446), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object447), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object448, _Bool __anonymous_object449), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object450), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object451, const char *__anonymous_object452), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object453), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object454, _Bool __anonymous_object455), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object456), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object457), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object458), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object459), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object460), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object461, const char *__anonymous_object462), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object463), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object464, const char *__anonymous_object465), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object466), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object467), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object468, const char *__anonymous_object469, unsigned long int __anonymous_object470), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object471, const char *__fmt__PCc_1, ...), void *__anonymous_object472, double __anonymous_object473);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0r__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object474), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object475), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object476, _Bool __anonymous_object477), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object478), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object479, const char *__anonymous_object480), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object481), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object482, _Bool __anonymous_object483), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object484), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object485), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object486), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object487), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object488), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object489, const char *__anonymous_object490), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object491), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object492, const char *__anonymous_object493), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object494), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object495), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object496, const char *__anonymous_object497, unsigned long int __anonymous_object498), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object499, const char *__fmt__PCc_1, ...), void *__anonymous_object500, long double __anonymous_object501);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Xf__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object502), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object503), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object504, _Bool __anonymous_object505), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object506), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object507, const char *__anonymous_object508), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object509), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object510, _Bool __anonymous_object511), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object512), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object513), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object514), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object515), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object516), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object517, const char *__anonymous_object518), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object519), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object520, const char *__anonymous_object521), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object522), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object523), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object524, const char *__anonymous_object525, unsigned long int __anonymous_object526), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object527, const char *__fmt__PCc_1, ...), void *__anonymous_object528, float _Complex __anonymous_object529);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Xd__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object530), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object531), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object532, _Bool __anonymous_object533), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object534), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object535, const char *__anonymous_object536), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object537), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object538, _Bool __anonymous_object539), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object540), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object541), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object542), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object543), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object544), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object545, const char *__anonymous_object546), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object547), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object548, const char *__anonymous_object549), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object550), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object551), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object552, const char *__anonymous_object553, unsigned long int __anonymous_object554), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object555, const char *__fmt__PCc_1, ...), void *__anonymous_object556, double _Complex __anonymous_object557);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Xr__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object558), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object559), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object560, _Bool __anonymous_object561), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object562), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object563, const char *__anonymous_object564), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object565), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object566, _Bool __anonymous_object567), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object568), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object569), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object570), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object571), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object572), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object573, const char *__anonymous_object574), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object575), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object576, const char *__anonymous_object577), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object578), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object579), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object580, const char *__anonymous_object581, unsigned long int __anonymous_object582), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object583, const char *__fmt__PCc_1, ...), void *__anonymous_object584, long double _Complex __anonymous_object585);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object586), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object587), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object588, _Bool __anonymous_object589), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object590), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object591, const char *__anonymous_object592), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object593), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object594, _Bool __anonymous_object595), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object596), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object597), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object598), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object599), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object600), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object601, const char *__anonymous_object602), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object603), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object604, const char *__anonymous_object605), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object606), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object607), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object608, const char *__anonymous_object609, unsigned long int __anonymous_object610), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object611, const char *__fmt__PCc_1, ...), void *__anonymous_object612, const char *__anonymous_object613);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCv__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object614), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object615), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object616, _Bool __anonymous_object617), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object618), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object619, const char *__anonymous_object620), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object621), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object622, _Bool __anonymous_object623), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object624), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object625), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object626), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object627), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object628), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object629, const char *__anonymous_object630), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object631), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object632, const char *__anonymous_object633), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object634), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object635), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object636, const char *__anonymous_object637, unsigned long int __anonymous_object638), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object639, const char *__fmt__PCc_1, ...), void *__anonymous_object640, const void *__anonymous_object641);
-void *___operator_bitor__A0_2_0_1____operator_assign__Fd1_d1d1____constructor__F_d1____constructor__F_d1d1____destructor__F_d1____operator_bitor__Fd0_d0d1___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc____operator_bitor__Fd0_d0tVARGS2__Fd0_d0d1tVARGS2__1(__attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype7tParams_M_MP)(void (*__anonymous_object642)(), void *__anonymous_object643, void *__anonymous_object644), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype2tT_M_MP)(void (*__anonymous_object645)(), void *__anonymous_object646, void *__anonymous_object647), __attribute__ ((unused)) void (*_adapterF_P2tT2tT__MP)(void (*__anonymous_object648)(), void *__anonymous_object649, void *__anonymous_object650), __attribute__ ((unused)) void (*_adapterF2tT_P2tT2tT_P_MP)(void (*__anonymous_object651)(), __attribute__ ((unused)) void *___retval__operator_assign__2tT_1, void *__anonymous_object652, void *__anonymous_object653), __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__F2tT_2tT2tT__1)(void *__anonymous_object654, void *__anonymous_object655), __attribute__ ((unused)) void (*___constructor__F_2tT__1)(void *__anonymous_object656), __attribute__ ((unused)) void (*___constructor__F_2tT2tT__1)(void *__anonymous_object657, void *__anonymous_object658), __attribute__ ((unused)) void (*___destructor__F_2tT__1)(void *__anonymous_object659), __attribute__ ((unused)) void *(*___operator_bitor__F7tostype_7tostype2tT__1)(void *__anonymous_object660, void *__anonymous_object661), __attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object662), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object663), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object664, _Bool __anonymous_object665), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object666), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object667, const char *__anonymous_object668), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object669), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object670, _Bool __anonymous_object671), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object672), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object673), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object674), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object675), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object676), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object677, const char *__anonymous_object678), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object679), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object680, const char *__anonymous_object681), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object682), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object683), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object684, const char *__anonymous_object685, unsigned long int __anonymous_object686), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object687, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_bitor__F7tostype_7tostype7tParams__1)(void *__anonymous_object688, void *__anonymous_object689), void *__os__7tostype_1, void *__arg__2tT_1, void *__rest__7tParams_1);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object690), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object691), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object692, _Bool __anonymous_object693), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object694), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object695, const char *__anonymous_object696), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object697), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object698, _Bool __anonymous_object699), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object700), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object701), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object702), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object703), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object704), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object705, const char *__anonymous_object706), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object707), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object708, const char *__anonymous_object709), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object710), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object711), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object712, const char *__anonymous_object713, unsigned long int __anonymous_object714), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object715, const char *__fmt__PCc_1, ...), void *__anonymous_object716, void *(*__anonymous_object717)(void *__anonymous_object718));
-void *__endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object719), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object720), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object721, _Bool __anonymous_object722), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object723), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object724, const char *__anonymous_object725), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object726), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object727, _Bool __anonymous_object728), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object729), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object730), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object731), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object732), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object733), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object734, const char *__anonymous_object735), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object736), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object737, const char *__anonymous_object738), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object739), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object740), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object741, const char *__anonymous_object742, unsigned long int __anonymous_object743), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object744, const char *__fmt__PCc_1, ...), void *__anonymous_object745);
-void *__sep__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object746), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object747), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object748, _Bool __anonymous_object749), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object750), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object751, const char *__anonymous_object752), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object753), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object754, _Bool __anonymous_object755), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object756), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object757), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object758), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object759), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object760), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object761, const char *__anonymous_object762), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object763), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object764, const char *__anonymous_object765), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object766), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object767), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object768, const char *__anonymous_object769, unsigned long int __anonymous_object770), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object771, const char *__fmt__PCc_1, ...), void *__anonymous_object772);
-void *__sepTuple__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object773), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object774), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object775, _Bool __anonymous_object776), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object777), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object778, const char *__anonymous_object779), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object780), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object781, _Bool __anonymous_object782), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object783), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object784), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object785), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object786), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object787), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object788, const char *__anonymous_object789), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object790), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object791, const char *__anonymous_object792), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object793), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object794), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object795, const char *__anonymous_object796, unsigned long int __anonymous_object797), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object798, const char *__fmt__PCc_1, ...), void *__anonymous_object799);
-void *__sepOn__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object800), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object801), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object802, _Bool __anonymous_object803), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object804), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object805, const char *__anonymous_object806), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object807), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object808, _Bool __anonymous_object809), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object810), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object811), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object812), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object813), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object814), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object815, const char *__anonymous_object816), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object817), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object818, const char *__anonymous_object819), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object820), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object821), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object822, const char *__anonymous_object823, unsigned long int __anonymous_object824), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object825, const char *__fmt__PCc_1, ...), void *__anonymous_object826);
-void *__sepOff__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object827), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object828), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object829, _Bool __anonymous_object830), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object831), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object832, const char *__anonymous_object833), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object834), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object835, _Bool __anonymous_object836), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object837), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object838), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object839), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object840), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object841), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object842, const char *__anonymous_object843), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object844), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object845, const char *__anonymous_object846), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object847), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object848), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object849, const char *__anonymous_object850, unsigned long int __anonymous_object851), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object852, const char *__fmt__PCc_1, ...), void *__anonymous_object853);
-void *__sepDisable__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object854), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object855), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object856, _Bool __anonymous_object857), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object858), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object859, const char *__anonymous_object860), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object861), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object862, _Bool __anonymous_object863), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object864), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object865), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object866), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object867), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object868), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object869, const char *__anonymous_object870), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object871), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object872, const char *__anonymous_object873), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object874), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object875), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object876, const char *__anonymous_object877, unsigned long int __anonymous_object878), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object879, const char *__fmt__PCc_1, ...), void *__anonymous_object880);
-void *__sepEnable__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object881), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object882), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object883, _Bool __anonymous_object884), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object885), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object886, const char *__anonymous_object887), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object888), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object889, _Bool __anonymous_object890), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object891), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object892), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object893), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object894), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object895), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object896, const char *__anonymous_object897), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object898), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object899, const char *__anonymous_object900), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object901), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object902), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object903, const char *__anonymous_object904, unsigned long int __anonymous_object905), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object906, const char *__fmt__PCc_1, ...), void *__anonymous_object907);
-void __write__A0_3_0_0____operator_assign__Fd1_d1d1____constructor__F_d1____constructor__F_d1d1____destructor__F_d1____operator_bitor__Fd0_d0d1___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc____operator_assign__Fd2_d2d2____constructor__F_d2____constructor__F_d2d2____destructor__F_d2____operator_preincr__Fd2_d2____operator_predecr__Fd2_d2____operator_equal__Fi_d2d2____operator_notequal__Fi_d2d2____operator_deref__Fd1_d2__F_d2d2d0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object908)(), void *__anonymous_object909), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object910)(), void *__anonymous_object911, void *__anonymous_object912), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object913)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object914), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object915)(), void *__anonymous_object916, void *__anonymous_object917), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object918)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object919, void *__anonymous_object920), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object921)(), void *__anonymous_object922, void *__anonymous_object923), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object924)(), void *__anonymous_object925, void *__anonymous_object926), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object927)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object928, void *__anonymous_object929), __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__F9telt_type_9telt_type9telt_type__1)(void *__anonymous_object930, void *__anonymous_object931), __attribute__ ((unused)) void (*___constructor__F_9telt_type__1)(void *__anonymous_object932), __attribute__ ((unused)) void (*___constructor__F_9telt_type9telt_type__1)(void *__anonymous_object933, void *__anonymous_object934), __attribute__ ((unused)) void (*___destructor__F_9telt_type__1)(void *__anonymous_object935), __attribute__ ((unused)) void *(*___operator_bitor__F7tostype_7tostype9telt_type__1)(void *__anonymous_object936, void *__anonymous_object937), __attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object938), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object939), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object940, _Bool __anonymous_object941), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object942), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object943, const char *__anonymous_object944), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object945), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object946, _Bool __anonymous_object947), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object948), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object949), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object950), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object951), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object952), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object953, const char *__anonymous_object954), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object955), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object956, const char *__anonymous_object957), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object958), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object959), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object960, const char *__anonymous_object961, unsigned long int __anonymous_object962), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object963, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__F14titerator_type_14titerator_type14titerator_type__1)(void *__anonymous_object964, void *__anonymous_object965), __attribute__ ((unused)) void (*___constructor__F_14titerator_type__1)(void *__anonymous_object966), __attribute__ ((unused)) void (*___constructor__F_14titerator_type14titerator_type__1)(void *__anonymous_object967, void *__anonymous_object968), __attribute__ ((unused)) void (*___destructor__F_14titerator_type__1)(void *__anonymous_object969), __attribute__ ((unused)) void *(*___operator_preincr__F14titerator_type_14titerator_type__1)(void *__anonymous_object970), __attribute__ ((unused)) void *(*___operator_predecr__F14titerator_type_14titerator_type__1)(void *__anonymous_object971), __attribute__ ((unused)) signed int (*___operator_equal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object972, void *__anonymous_object973), __attribute__ ((unused)) signed int (*___operator_notequal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object974, void *__anonymous_object975), __attribute__ ((unused)) void *(*___operator_deref__F9telt_type_14titerator_type__1)(void *__anonymous_object976), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__7tostype_1);
-void __write_reverse__A0_3_0_0____operator_assign__Fd1_d1d1____constructor__F_d1____constructor__F_d1d1____destructor__F_d1____operator_bitor__Fd0_d0d1___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc____operator_assign__Fd2_d2d2____constructor__F_d2____constructor__F_d2d2____destructor__F_d2____operator_preincr__Fd2_d2____operator_predecr__Fd2_d2____operator_equal__Fi_d2d2____operator_notequal__Fi_d2d2____operator_deref__Fd1_d2__F_d2d2d0__1(__attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object977)(), void *__anonymous_object978), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object979)(), void *__anonymous_object980, void *__anonymous_object981), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object982)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object983), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object984)(), void *__anonymous_object985, void *__anonymous_object986), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object987)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object988, void *__anonymous_object989), __attribute__ ((unused)) void *(*_adapterFP7tostype_P7tostype9telt_type_M_MP)(void (*__anonymous_object990)(), void *__anonymous_object991, void *__anonymous_object992), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object993)(), void *__anonymous_object994, void *__anonymous_object995), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object996)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object997, void *__anonymous_object998), __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__F9telt_type_9telt_type9telt_type__1)(void *__anonymous_object999, void *__anonymous_object1000), __attribute__ ((unused)) void (*___constructor__F_9telt_type__1)(void *__anonymous_object1001), __attribute__ ((unused)) void (*___constructor__F_9telt_type9telt_type__1)(void *__anonymous_object1002, void *__anonymous_object1003), __attribute__ ((unused)) void (*___destructor__F_9telt_type__1)(void *__anonymous_object1004), __attribute__ ((unused)) void *(*___operator_bitor__F7tostype_7tostype9telt_type__1)(void *__anonymous_object1005, void *__anonymous_object1006), __attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object1007), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object1008), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object1009, _Bool __anonymous_object1010), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object1011), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object1012, const char *__anonymous_object1013), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object1014), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object1015, _Bool __anonymous_object1016), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object1017), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object1018), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object1019), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object1020), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object1021), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object1022, const char *__anonymous_object1023), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object1024), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object1025, const char *__anonymous_object1026), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object1027), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object1028), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object1029, const char *__anonymous_object1030, unsigned long int __anonymous_object1031), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object1032, const char *__fmt__PCc_1, ...), __attribute__ ((unused)) void *(*___operator_assign__F14titerator_type_14titerator_type14titerator_type__1)(void *__anonymous_object1033, void *__anonymous_object1034), __attribute__ ((unused)) void (*___constructor__F_14titerator_type__1)(void *__anonymous_object1035), __attribute__ ((unused)) void (*___constructor__F_14titerator_type14titerator_type__1)(void *__anonymous_object1036, void *__anonymous_object1037), __attribute__ ((unused)) void (*___destructor__F_14titerator_type__1)(void *__anonymous_object1038), __attribute__ ((unused)) void *(*___operator_preincr__F14titerator_type_14titerator_type__1)(void *__anonymous_object1039), __attribute__ ((unused)) void *(*___operator_predecr__F14titerator_type_14titerator_type__1)(void *__anonymous_object1040), __attribute__ ((unused)) signed int (*___operator_equal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object1041, void *__anonymous_object1042), __attribute__ ((unused)) signed int (*___operator_notequal__Fi_14titerator_type14titerator_type__1)(void *__anonymous_object1043, void *__anonymous_object1044), __attribute__ ((unused)) void *(*___operator_deref__F9telt_type_14titerator_type__1)(void *__anonymous_object1045), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void *__os__7tostype_1);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0b__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1046), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1047), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1048, char *__anonymous_object1049, unsigned long int __anonymous_object1050), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1051, char __anonymous_object1052), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1053, const char *__fmt__PCc_1, ...), void *__anonymous_object1054, _Bool *__anonymous_object1055);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0c__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1056), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1057), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1058, char *__anonymous_object1059, unsigned long int __anonymous_object1060), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1061, char __anonymous_object1062), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1063, const char *__fmt__PCc_1, ...), void *__anonymous_object1064, char *__anonymous_object1065);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Sc__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1066), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1067), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1068, char *__anonymous_object1069, unsigned long int __anonymous_object1070), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1071, char __anonymous_object1072), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1073, const char *__fmt__PCc_1, ...), void *__anonymous_object1074, signed char *__anonymous_object1075);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Uc__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1076), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1077), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1078, char *__anonymous_object1079, unsigned long int __anonymous_object1080), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1081, char __anonymous_object1082), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1083, const char *__fmt__PCc_1, ...), void *__anonymous_object1084, unsigned char *__anonymous_object1085);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0s__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1086), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1087), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1088, char *__anonymous_object1089, unsigned long int __anonymous_object1090), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1091, char __anonymous_object1092), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1093, const char *__fmt__PCc_1, ...), void *__anonymous_object1094, signed short int *__anonymous_object1095);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Us__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1096), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1097), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1098, char *__anonymous_object1099, unsigned long int __anonymous_object1100), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1101, char __anonymous_object1102), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1103, const char *__fmt__PCc_1, ...), void *__anonymous_object1104, unsigned short int *__anonymous_object1105);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0i__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1106), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1107), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1108, char *__anonymous_object1109, unsigned long int __anonymous_object1110), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1111, char __anonymous_object1112), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1113, const char *__fmt__PCc_1, ...), void *__anonymous_object1114, signed int *__anonymous_object1115);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Ui__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1116), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1117), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1118, char *__anonymous_object1119, unsigned long int __anonymous_object1120), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1121, char __anonymous_object1122), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1123, const char *__fmt__PCc_1, ...), void *__anonymous_object1124, unsigned int *__anonymous_object1125);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0l__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1126), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1127), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1128, char *__anonymous_object1129, unsigned long int __anonymous_object1130), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1131, char __anonymous_object1132), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1133, const char *__fmt__PCc_1, ...), void *__anonymous_object1134, signed long int *__anonymous_object1135);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0q__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1136), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1137), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1138, char *__anonymous_object1139, unsigned long int __anonymous_object1140), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1141, char __anonymous_object1142), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1143, const char *__fmt__PCc_1, ...), void *__anonymous_object1144, signed long long int *__anonymous_object1145);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Ul__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1146), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1147), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1148, char *__anonymous_object1149, unsigned long int __anonymous_object1150), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1151, char __anonymous_object1152), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1153, const char *__fmt__PCc_1, ...), void *__anonymous_object1154, unsigned long int *__anonymous_object1155);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Uq__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1156), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1157), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1158, char *__anonymous_object1159, unsigned long int __anonymous_object1160), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1161, char __anonymous_object1162), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1163, const char *__fmt__PCc_1, ...), void *__anonymous_object1164, unsigned long long int *__anonymous_object1165);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0f__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1166), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1167), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1168, char *__anonymous_object1169, unsigned long int __anonymous_object1170), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1171, char __anonymous_object1172), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1173, const char *__fmt__PCc_1, ...), void *__anonymous_object1174, float *__anonymous_object1175);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0d__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1176), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1177), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1178, char *__anonymous_object1179, unsigned long int __anonymous_object1180), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1181, char __anonymous_object1182), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1183, const char *__fmt__PCc_1, ...), void *__anonymous_object1184, double *__anonymous_object1185);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0r__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1186), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1187), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1188, char *__anonymous_object1189, unsigned long int __anonymous_object1190), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1191, char __anonymous_object1192), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1193, const char *__fmt__PCc_1, ...), void *__anonymous_object1194, long double *__anonymous_object1195);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Xf__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1196), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1197), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1198, char *__anonymous_object1199, unsigned long int __anonymous_object1200), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1201, char __anonymous_object1202), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1203, const char *__fmt__PCc_1, ...), void *__anonymous_object1204, float _Complex *__anonymous_object1205);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Xd__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1206), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1207), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1208, char *__anonymous_object1209, unsigned long int __anonymous_object1210), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1211, char __anonymous_object1212), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1213, const char *__fmt__PCc_1, ...), void *__anonymous_object1214, double _Complex *__anonymous_object1215);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Xr__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1216), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1217), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1218, char *__anonymous_object1219, unsigned long int __anonymous_object1220), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1221, char __anonymous_object1222), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1223, const char *__fmt__PCc_1, ...), void *__anonymous_object1224, long double _Complex *__anonymous_object1225);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1226), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1227), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1228, char *__anonymous_object1229, unsigned long int __anonymous_object1230), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1231, char __anonymous_object1232), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1233, const char *__fmt__PCc_1, ...), void *__anonymous_object1234, void *(*__anonymous_object1235)(void *__anonymous_object1236));
-void *__endl__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d0__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1237), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1238), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1239, char *__anonymous_object1240, unsigned long int __anonymous_object1241), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1242, char __anonymous_object1243), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1244, const char *__fmt__PCc_1, ...), void *__is__7tistype_1);
-struct _Istream_cstrUC {
-    char *__s__Pc_1;
-};
-static inline void ___constructor__F_16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1);
-static inline void ___constructor__F_16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, struct _Istream_cstrUC ___src__16s_Istream_cstrUC_1);
-static inline void ___destructor__F_16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1);
-static inline struct _Istream_cstrUC ___operator_assign__F16s_Istream_cstrUC_16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, struct _Istream_cstrUC ___src__16s_Istream_cstrUC_1);
-static inline void ___constructor__F_16s_Istream_cstrUCPc_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, char *__s__Pc_1);
-static inline void ___constructor__F_16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1){
-    ((void)((*___dst__16s_Istream_cstrUC_1).__s__Pc_1) /* ?{} */);
-}
-static inline void ___constructor__F_16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, struct _Istream_cstrUC ___src__16s_Istream_cstrUC_1){
-    ((void)((*___dst__16s_Istream_cstrUC_1).__s__Pc_1=___src__16s_Istream_cstrUC_1.__s__Pc_1) /* ?{} */);
-}
-static inline void ___destructor__F_16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1){
-    ((void)((*___dst__16s_Istream_cstrUC_1).__s__Pc_1) /* ^?{} */);
-}
-static inline struct _Istream_cstrUC ___operator_assign__F16s_Istream_cstrUC_16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, struct _Istream_cstrUC ___src__16s_Istream_cstrUC_1){
-    struct _Istream_cstrUC ___ret__16s_Istream_cstrUC_1;
-    ((void)((*___dst__16s_Istream_cstrUC_1).__s__Pc_1=___src__16s_Istream_cstrUC_1.__s__Pc_1));
-    ((void)___constructor__F_16s_Istream_cstrUC16s_Istream_cstrUC_autogen___1((&___ret__16s_Istream_cstrUC_1), (*___dst__16s_Istream_cstrUC_1)));
-    return ___ret__16s_Istream_cstrUC_1;
-}
-static inline void ___constructor__F_16s_Istream_cstrUCPc_autogen___1(struct _Istream_cstrUC *___dst__16s_Istream_cstrUC_1, char *__s__Pc_1){
-    ((void)((*___dst__16s_Istream_cstrUC_1).__s__Pc_1=__s__Pc_1) /* ?{} */);
-}
-struct _Istream_cstrUC __cstr__F16s_Istream_cstrUC_Pc__1(char *__anonymous_object1245);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d016s_Istream_cstrUC__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1246), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1247), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1248, char *__anonymous_object1249, unsigned long int __anonymous_object1250), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1251, char __anonymous_object1252), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1253, const char *__fmt__PCc_1, ...), void *__anonymous_object1254, struct _Istream_cstrUC __anonymous_object1255);
-struct _Istream_cstrC {
-    char *__s__Pc_1;
-    signed int __size__i_1;
-};
-static inline void ___constructor__F_15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1);
-static inline void ___constructor__F_15s_Istream_cstrC15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, struct _Istream_cstrC ___src__15s_Istream_cstrC_1);
-static inline void ___destructor__F_15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1);
-static inline struct _Istream_cstrC ___operator_assign__F15s_Istream_cstrC_15s_Istream_cstrC15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, struct _Istream_cstrC ___src__15s_Istream_cstrC_1);
-static inline void ___constructor__F_15s_Istream_cstrCPc_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, char *__s__Pc_1);
-static inline void ___constructor__F_15s_Istream_cstrCPci_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, char *__s__Pc_1, signed int __size__i_1);
-static inline void ___constructor__F_15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1){
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1) /* ?{} */);
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1) /* ?{} */);
-}
-static inline void ___constructor__F_15s_Istream_cstrC15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, struct _Istream_cstrC ___src__15s_Istream_cstrC_1){
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1=___src__15s_Istream_cstrC_1.__s__Pc_1) /* ?{} */);
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1=___src__15s_Istream_cstrC_1.__size__i_1) /* ?{} */);
-}
-static inline void ___destructor__F_15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1){
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1) /* ^?{} */);
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1) /* ^?{} */);
-}
-static inline struct _Istream_cstrC ___operator_assign__F15s_Istream_cstrC_15s_Istream_cstrC15s_Istream_cstrC_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, struct _Istream_cstrC ___src__15s_Istream_cstrC_1){
-    struct _Istream_cstrC ___ret__15s_Istream_cstrC_1;
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1=___src__15s_Istream_cstrC_1.__s__Pc_1));
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1=___src__15s_Istream_cstrC_1.__size__i_1));
-    ((void)___constructor__F_15s_Istream_cstrC15s_Istream_cstrC_autogen___1((&___ret__15s_Istream_cstrC_1), (*___dst__15s_Istream_cstrC_1)));
-    return ___ret__15s_Istream_cstrC_1;
-}
-static inline void ___constructor__F_15s_Istream_cstrCPc_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, char *__s__Pc_1){
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1=__s__Pc_1) /* ?{} */);
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1) /* ?{} */);
-}
-static inline void ___constructor__F_15s_Istream_cstrCPci_autogen___1(struct _Istream_cstrC *___dst__15s_Istream_cstrC_1, char *__s__Pc_1, signed int __size__i_1){
-    ((void)((*___dst__15s_Istream_cstrC_1).__s__Pc_1=__s__Pc_1) /* ?{} */);
-    ((void)((*___dst__15s_Istream_cstrC_1).__size__i_1=__size__i_1) /* ?{} */);
-}
-struct _Istream_cstrC __cstr__F15s_Istream_cstrC_Pci__1(char *__anonymous_object1256, signed int __size__i_1);
-void *___operator_bitor__A0_1_0_0___fail__Fi_d0___eof__Fi_d0___open__F_d0PCc___close__F_d0___read__Fd0_d0PcUl___ungetc__Fd0_d0c___fmt__Fi_d0PCc__Fd0_d015s_Istream_cstrC__1(__attribute__ ((unused)) signed int (*__fail__Fi_7tistype__1)(void *__anonymous_object1257), __attribute__ ((unused)) signed int (*__eof__Fi_7tistype__1)(void *__anonymous_object1258), __attribute__ ((unused)) void (*__open__F_7tistypePCc__1)(void *__is__7tistype_1, const char *__name__PCc_1), __attribute__ ((unused)) void (*__close__F_7tistype__1)(void *__is__7tistype_1), __attribute__ ((unused)) void *(*__read__F7tistype_7tistypePcUl__1)(void *__anonymous_object1259, char *__anonymous_object1260, unsigned long int __anonymous_object1261), __attribute__ ((unused)) void *(*__ungetc__F7tistype_7tistypec__1)(void *__anonymous_object1262, char __anonymous_object1263), __attribute__ ((unused)) signed int (*__fmt__Fi_7tistypePCc__1)(void *__anonymous_object1264, const char *__fmt__PCc_1, ...), void *__anonymous_object1265, struct _Istream_cstrC __anonymous_object1266);
-struct Duration {
-    signed long long int __tv__q_1;
-};
-static inline void ___constructor__F_9sDuration_autogen___1(struct Duration *___dst__9sDuration_1);
-static inline void ___constructor__F_9sDuration9sDuration_autogen___1(struct Duration *___dst__9sDuration_1, struct Duration ___src__9sDuration_1);
-static inline void ___destructor__F_9sDuration_autogen___1(struct Duration *___dst__9sDuration_1);
-static inline struct Duration ___operator_assign__F9sDuration_9sDuration9sDuration_autogen___1(struct Duration *___dst__9sDuration_1, struct Duration ___src__9sDuration_1);
-static inline void ___constructor__F_9sDurationq_autogen___1(struct Duration *___dst__9sDuration_1, signed long long int __tv__q_1);
-static inline void ___constructor__F_9sDuration_autogen___1(struct Duration *___dst__9sDuration_1){
-    ((void)((*___dst__9sDuration_1).__tv__q_1) /* ?{} */);
-}
-static inline void ___constructor__F_9sDuration9sDuration_autogen___1(struct Duration *___dst__9sDuration_1, struct Duration ___src__9sDuration_1){
-    ((void)((*___dst__9sDuration_1).__tv__q_1=___src__9sDuration_1.__tv__q_1) /* ?{} */);
-}
-static inline void ___destructor__F_9sDuration_autogen___1(struct Duration *___dst__9sDuration_1){
-    ((void)((*___dst__9sDuration_1).__tv__q_1) /* ^?{} */);
-}
-static inline struct Duration ___operator_assign__F9sDuration_9sDuration9sDuration_autogen___1(struct Duration *___dst__9sDuration_1, struct Duration ___src__9sDuration_1){
-    struct Duration ___ret__9sDuration_1;
-    ((void)((*___dst__9sDuration_1).__tv__q_1=___src__9sDuration_1.__tv__q_1));
-    ((void)___constructor__F_9sDuration9sDuration_autogen___1((&___ret__9sDuration_1), (*___dst__9sDuration_1)));
-    return ___ret__9sDuration_1;
-}
-static inline void ___constructor__F_9sDurationq_autogen___1(struct Duration *___dst__9sDuration_1, signed long long int __tv__q_1){
-    ((void)((*___dst__9sDuration_1).__tv__q_1=__tv__q_1) /* ?{} */);
-}
-static inline void ___constructor__F_9sDuration__1(struct Duration *__dur__9sDuration_1){
-    ((void)((*__dur__9sDuration_1).__tv__q_1) /* ?{} */);
-    ((void)((*__dur__9sDuration_1).__tv__q_1=((signed long long int )0)));
-}
-static inline void ___constructor__F_9sDurationZ__1(struct Duration *__dur__9sDuration_1, long int __anonymous_object1267){
-    ((void)((*__dur__9sDuration_1).__tv__q_1) /* ?{} */);
-    ((void)((*__dur__9sDuration_1).__tv__q_1=((signed long long int )0)));
-}
-struct Time {
-    unsigned long long int __tv__Uq_1;
-};
-static inline void ___constructor__F_5sTime_autogen___1(struct Time *___dst__5sTime_1);
-static inline void ___constructor__F_5sTime5sTime_autogen___1(struct Time *___dst__5sTime_1, struct Time ___src__5sTime_1);
-static inline void ___destructor__F_5sTime_autogen___1(struct Time *___dst__5sTime_1);
-static inline struct Time ___operator_assign__F5sTime_5sTime5sTime_autogen___1(struct Time *___dst__5sTime_1, struct Time ___src__5sTime_1);
-static inline void ___constructor__F_5sTimeUq_autogen___1(struct Time *___dst__5sTime_1, unsigned long long int __tv__Uq_1);
-static inline void ___constructor__F_5sTime_autogen___1(struct Time *___dst__5sTime_1){
-    ((void)((*___dst__5sTime_1).__tv__Uq_1) /* ?{} */);
-}
-static inline void ___constructor__F_5sTime5sTime_autogen___1(struct Time *___dst__5sTime_1, struct Time ___src__5sTime_1){
-    ((void)((*___dst__5sTime_1).__tv__Uq_1=___src__5sTime_1.__tv__Uq_1) /* ?{} */);
-}
-static inline void ___destructor__F_5sTime_autogen___1(struct Time *___dst__5sTime_1){
-    ((void)((*___dst__5sTime_1).__tv__Uq_1) /* ^?{} */);
-}
-static inline struct Time ___operator_assign__F5sTime_5sTime5sTime_autogen___1(struct Time *___dst__5sTime_1, struct Time ___src__5sTime_1){
-    struct Time ___ret__5sTime_1;
-    ((void)((*___dst__5sTime_1).__tv__Uq_1=___src__5sTime_1.__tv__Uq_1));
-    ((void)___constructor__F_5sTime5sTime_autogen___1((&___ret__5sTime_1), (*___dst__5sTime_1)));
-    return ___ret__5sTime_1;
-}
-static inline void ___constructor__F_5sTimeUq_autogen___1(struct Time *___dst__5sTime_1, unsigned long long int __tv__Uq_1){
-    ((void)((*___dst__5sTime_1).__tv__Uq_1=__tv__Uq_1) /* ?{} */);
-}
-static inline void ___constructor__F_5sTime__1(struct Time *__time__5sTime_1){
-    ((void)((*__time__5sTime_1).__tv__Uq_1) /* ?{} */);
-    ((void)((*__time__5sTime_1).__tv__Uq_1=((unsigned long long int )0)));
-}
-static inline void ___constructor__F_5sTimeZ__1(struct Time *__time__5sTime_1, long int __anonymous_object1268){
-    ((void)((*__time__5sTime_1).__tv__Uq_1) /* ?{} */);
-    ((void)((*__time__5sTime_1).__tv__Uq_1=((unsigned long long int )0)));
-}
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d09sDuration__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object1269), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object1270), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object1271, _Bool __anonymous_object1272), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object1273), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object1274, const char *__anonymous_object1275), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object1276), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object1277, _Bool __anonymous_object1278), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object1279), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object1280), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object1281), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object1282), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object1283), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object1284, const char *__anonymous_object1285), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object1286), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object1287, const char *__anonymous_object1288), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object1289), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object1290), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object1291, const char *__anonymous_object1292, unsigned long int __anonymous_object1293), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object1294, const char *__fmt__PCc_1, ...), void *__os__7tostype_1, struct Duration __dur__9sDuration_1);
-void *___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d05sTime__1(__attribute__ ((unused)) _Bool (*__sepPrt__Fb_7tostype__1)(void *__anonymous_object1295), __attribute__ ((unused)) void (*__sepReset__F_7tostype__1)(void *__anonymous_object1296), __attribute__ ((unused)) void (*__sepReset__F_7tostypeb__1)(void *__anonymous_object1297, _Bool __anonymous_object1298), __attribute__ ((unused)) const char *(*__sepGetCur__FPCc_7tostype__1)(void *__anonymous_object1299), __attribute__ ((unused)) void (*__sepSetCur__F_7tostypePCc__1)(void *__anonymous_object1300, const char *__anonymous_object1301), __attribute__ ((unused)) _Bool (*__getNL__Fb_7tostype__1)(void *__anonymous_object1302), __attribute__ ((unused)) void (*__setNL__F_7tostypeb__1)(void *__anonymous_object1303, _Bool __anonymous_object1304), __attribute__ ((unused)) void (*__sepOn__F_7tostype__1)(void *__anonymous_object1305), __attribute__ ((unused)) void (*__sepOff__F_7tostype__1)(void *__anonymous_object1306), __attribute__ ((unused)) _Bool (*__sepDisable__Fb_7tostype__1)(void *__anonymous_object1307), __attribute__ ((unused)) _Bool (*__sepEnable__Fb_7tostype__1)(void *__anonymous_object1308), __attribute__ ((unused)) const char *(*__sepGet__FPCc_7tostype__1)(void *__anonymous_object1309), __attribute__ ((unused)) void (*__sepSet__F_7tostypePCc__1)(void *__anonymous_object1310, const char *__anonymous_object1311), __attribute__ ((unused)) const char *(*__sepGetTuple__FPCc_7tostype__1)(void *__anonymous_object1312), __attribute__ ((unused)) void (*__sepSetTuple__F_7tostypePCc__1)(void *__anonymous_object1313, const char *__anonymous_object1314), __attribute__ ((unused)) signed int (*__fail__Fi_7tostype__1)(void *__anonymous_object1315), __attribute__ ((unused)) signed int (*__flush__Fi_7tostype__1)(void *__anonymous_object1316), __attribute__ ((unused)) void (*__open__F_7tostypePCcPCc__1)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1), __attribute__ ((unused)) void (*__close__F_7tostype__1)(void *__os__7tostype_1), __attribute__ ((unused)) void *(*__write__F7tostype_7tostypePCcUl__1)(void *__anonymous_object1317, const char *__anonymous_object1318, unsigned long int __anonymous_object1319), __attribute__ ((unused)) signed int (*__fmt__Fi_7tostypePCc__1)(void *__anonymous_object1320, const char *__fmt__PCc_1, ...), void *__os__7tostype_1, struct Time __time__5sTime_1);
-enum __anonymous0 {
-    __sepSize__C13e__anonymous0_1 = 16,
-};
-struct ofstream {
-    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_9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1);
-static inline void ___constructor__F_9sofstream9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1, struct ofstream ___src__9sofstream_1);
-static inline void ___destructor__F_9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1);
-static inline struct ofstream ___operator_assign__F9sofstream_9sofstream9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1, struct ofstream ___src__9sofstream_1);
-static inline void ___constructor__F_9sofstreamPv_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1);
-static inline void ___constructor__F_9sofstreamPvb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1);
-static inline void ___constructor__F_9sofstreamPvbb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1);
-static inline void ___constructor__F_9sofstreamPvbbb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1);
-static inline void ___constructor__F_9sofstreamPvbbbPCc_autogen___1(struct ofstream *___dst__9sofstream_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_9sofstreamPvbbbPCcA0c_autogen___1(struct ofstream *___dst__9sofstream_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_9sofstreamPvbbbPCcA0cA0c_autogen___1(struct ofstream *___dst__9sofstream_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_9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index0 = 0;
-        for (;(_index0<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index0))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[_index0]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index1 = 0;
-        for (;(_index1<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index1))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[_index1]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstream9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1, struct ofstream ___src__9sofstream_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=___src__9sofstream_1.__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=___src__9sofstream_1.__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=___src__9sofstream_1.__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=___src__9sofstream_1.__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1=___src__9sofstream_1.__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index2 = 0;
-        for (;(_index2<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index2))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[_index2]=___src__9sofstream_1.__separator__A0c_1[_index2]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index3 = 0;
-        for (;(_index3<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index3))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[_index3]=___src__9sofstream_1.__tupleSeparator__A0c_1[_index3]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___destructor__F_9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1){
-    {
-        signed int _index4 = (((signed int )__sepSize__C13e__anonymous0_1)-1);
-        for (;(_index4>=0);((void)(--_index4))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[_index4]) /* ^?{} */);
-        }
-
-    }
-
-    {
-        signed int _index5 = (((signed int )__sepSize__C13e__anonymous0_1)-1);
-        for (;(_index5>=0);((void)(--_index5))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[_index5]) /* ^?{} */);
-        }
-
-    }
-
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ^?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1) /* ^?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1) /* ^?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1) /* ^?{} */);
-    ((void)((*___dst__9sofstream_1).__file__Pv_1) /* ^?{} */);
-}
-static inline struct ofstream ___operator_assign__F9sofstream_9sofstream9sofstream_autogen___1(struct ofstream *___dst__9sofstream_1, struct ofstream ___src__9sofstream_1){
-    struct ofstream ___ret__9sofstream_1;
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=___src__9sofstream_1.__file__Pv_1));
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=___src__9sofstream_1.__sepDefault__b_1));
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=___src__9sofstream_1.__sepOnOff__b_1));
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=___src__9sofstream_1.__sawNL__b_1));
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1=___src__9sofstream_1.__sepCur__PCc_1));
-    {
-        signed int _index6 = 0;
-        for (;(_index6<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index6))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[_index6]=___src__9sofstream_1.__separator__A0c_1[_index6]));
-        }
-
-    }
-
-    {
-        signed int _index7 = 0;
-        for (;(_index7<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index7))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[_index7]=___src__9sofstream_1.__tupleSeparator__A0c_1[_index7]));
-        }
-
-    }
-
-    ((void)___constructor__F_9sofstream9sofstream_autogen___1((&___ret__9sofstream_1), (*___dst__9sofstream_1)));
-    return ___ret__9sofstream_1;
-}
-static inline void ___constructor__F_9sofstreamPv_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index8 = 0;
-        for (;(_index8<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index8))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[_index8]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index9 = 0;
-        for (;(_index9<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index9))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[_index9]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index10 = 0;
-        for (;(_index10<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index10))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[_index10]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index11 = 0;
-        for (;(_index11<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index11))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[_index11]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvbb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index12 = 0;
-        for (;(_index12<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index12))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[_index12]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index13 = 0;
-        for (;(_index13<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index13))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[_index13]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvbbb_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index14 = 0;
-        for (;(_index14<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index14))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[_index14]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index15 = 0;
-        for (;(_index15<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index15))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[_index15]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvbbbPCc_autogen___1(struct ofstream *___dst__9sofstream_1, void *__file__Pv_1, _Bool __sepDefault__b_1, _Bool __sepOnOff__b_1, _Bool __sawNL__b_1, const char *__sepCur__PCc_1){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index16 = 0;
-        for (;(_index16<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index16))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[_index16]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index17 = 0;
-        for (;(_index17<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index17))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[_index17]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvbbbPCcA0c_autogen___1(struct ofstream *___dst__9sofstream_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)]){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index18 = 0;
-        for (;(_index18<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index18))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[_index18]=__separator__A0c_1[_index18]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index19 = 0;
-        for (;(_index19<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index19))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[_index19]) /* ?{} */);
-        }
-
-    }
-
-}
-static inline void ___constructor__F_9sofstreamPvbbbPCcA0cA0c_autogen___1(struct ofstream *___dst__9sofstream_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)]){
-    ((void)((*___dst__9sofstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepDefault__b_1=__sepDefault__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepOnOff__b_1=__sepOnOff__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sawNL__b_1=__sawNL__b_1) /* ?{} */);
-    ((void)((*___dst__9sofstream_1).__sepCur__PCc_1=__sepCur__PCc_1) /* ?{} */);
-    {
-        signed int _index20 = 0;
-        for (;(_index20<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index20))) {
-            ((void)((*___dst__9sofstream_1).__separator__A0c_1[_index20]=__separator__A0c_1[_index20]) /* ?{} */);
-        }
-
-    }
-
-    {
-        signed int _index21 = 0;
-        for (;(_index21<((signed int )__sepSize__C13e__anonymous0_1));((void)(++_index21))) {
-            ((void)((*___dst__9sofstream_1).__tupleSeparator__A0c_1[_index21]=__tupleSeparator__A0c_1[_index21]) /* ?{} */);
-        }
-
-    }
-
-}
-_Bool __sepPrt__Fb_9sofstream__1(struct ofstream *__anonymous_object1321);
-void __sepReset__F_9sofstream__1(struct ofstream *__anonymous_object1322);
-void __sepReset__F_9sofstreamb__1(struct ofstream *__anonymous_object1323, _Bool __anonymous_object1324);
-const char *__sepGetCur__FPCc_9sofstream__1(struct ofstream *__anonymous_object1325);
-void __sepSetCur__F_9sofstreamPCc__1(struct ofstream *__anonymous_object1326, const char *__anonymous_object1327);
-_Bool __getNL__Fb_9sofstream__1(struct ofstream *__anonymous_object1328);
-void __setNL__F_9sofstreamb__1(struct ofstream *__anonymous_object1329, _Bool __anonymous_object1330);
-void __sepOn__F_9sofstream__1(struct ofstream *__anonymous_object1331);
-void __sepOff__F_9sofstream__1(struct ofstream *__anonymous_object1332);
-_Bool __sepDisable__Fb_9sofstream__1(struct ofstream *__anonymous_object1333);
-_Bool __sepEnable__Fb_9sofstream__1(struct ofstream *__anonymous_object1334);
-const char *__sepGet__FPCc_9sofstream__1(struct ofstream *__anonymous_object1335);
-void __sepSet__F_9sofstreamPCc__1(struct ofstream *__anonymous_object1336, const char *__anonymous_object1337);
-const char *__sepGetTuple__FPCc_9sofstream__1(struct ofstream *__anonymous_object1338);
-void __sepSetTuple__F_9sofstreamPCc__1(struct ofstream *__anonymous_object1339, const char *__anonymous_object1340);
-signed int __fail__Fi_9sofstream__1(struct ofstream *__anonymous_object1341);
-signed int __flush__Fi_9sofstream__1(struct ofstream *__anonymous_object1342);
-void __open__F_9sofstreamPCcPCc__1(struct ofstream *__anonymous_object1343, const char *__name__PCc_1, const char *__mode__PCc_1);
-void __open__F_9sofstreamPCc__1(struct ofstream *__anonymous_object1344, const char *__name__PCc_1);
-void __close__F_9sofstream__1(struct ofstream *__anonymous_object1345);
-struct ofstream *__write__F9sofstream_9sofstreamPCcUl__1(struct ofstream *__anonymous_object1346, const char *__data__PCc_1, unsigned long int __size__Ul_1);
-signed int __fmt__Fi_9sofstreamPCc__1(struct ofstream *__anonymous_object1347, const char *__fmt__PCc_1, ...);
-void ___constructor__F_9sofstream__1(struct ofstream *__os__9sofstream_1);
-void ___constructor__F_9sofstreamPCcPCc__1(struct ofstream *__os__9sofstream_1, const char *__name__PCc_1, const char *__mode__PCc_1);
-void ___constructor__F_9sofstreamPCc__1(struct ofstream *__os__9sofstream_1, const char *__name__PCc_1);
-extern struct ofstream *__sout__9sofstream_1;
-extern struct ofstream *__serr__9sofstream_1;
-struct ifstream {
-    void *__file__Pv_1;
-};
-static inline void ___constructor__F_9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1);
-static inline void ___constructor__F_9sifstream9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1, struct ifstream ___src__9sifstream_1);
-static inline void ___destructor__F_9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1);
-static inline struct ifstream ___operator_assign__F9sifstream_9sifstream9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1, struct ifstream ___src__9sifstream_1);
-static inline void ___constructor__F_9sifstreamPv_autogen___1(struct ifstream *___dst__9sifstream_1, void *__file__Pv_1);
-static inline void ___constructor__F_9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1){
-    ((void)((*___dst__9sifstream_1).__file__Pv_1) /* ?{} */);
-}
-static inline void ___constructor__F_9sifstream9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1, struct ifstream ___src__9sifstream_1){
-    ((void)((*___dst__9sifstream_1).__file__Pv_1=___src__9sifstream_1.__file__Pv_1) /* ?{} */);
-}
-static inline void ___destructor__F_9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1){
-    ((void)((*___dst__9sifstream_1).__file__Pv_1) /* ^?{} */);
-}
-static inline struct ifstream ___operator_assign__F9sifstream_9sifstream9sifstream_autogen___1(struct ifstream *___dst__9sifstream_1, struct ifstream ___src__9sifstream_1){
-    struct ifstream ___ret__9sifstream_1;
-    ((void)((*___dst__9sifstream_1).__file__Pv_1=___src__9sifstream_1.__file__Pv_1));
-    ((void)___constructor__F_9sifstream9sifstream_autogen___1((&___ret__9sifstream_1), (*___dst__9sifstream_1)));
-    return ___ret__9sifstream_1;
-}
-static inline void ___constructor__F_9sifstreamPv_autogen___1(struct ifstream *___dst__9sifstream_1, void *__file__Pv_1){
-    ((void)((*___dst__9sifstream_1).__file__Pv_1=__file__Pv_1) /* ?{} */);
-}
-signed int __fail__Fi_9sifstream__1(struct ifstream *__is__9sifstream_1);
-signed int __eof__Fi_9sifstream__1(struct ifstream *__is__9sifstream_1);
-void __open__F_9sifstreamPCcPCc__1(struct ifstream *__is__9sifstream_1, const char *__name__PCc_1, const char *__mode__PCc_1);
-void __open__F_9sifstreamPCc__1(struct ifstream *__is__9sifstream_1, const char *__name__PCc_1);
-void __close__F_9sifstream__1(struct ifstream *__is__9sifstream_1);
-struct ifstream *__read__F9sifstream_9sifstreamPcUl__1(struct ifstream *__is__9sifstream_1, char *__data__Pc_1, unsigned long int __size__Ul_1);
-struct ifstream *__ungetc__F9sifstream_9sifstreamc__1(struct ifstream *__is__9sifstream_1, char __c__c_1);
-signed int __fmt__Fi_9sifstreamPCc__1(struct ifstream *__anonymous_object1348, const char *__fmt__PCc_1, ...);
-void ___constructor__F_9sifstream__1(struct ifstream *__is__9sifstream_1);
-void ___constructor__F_9sifstreamPCcPCc__1(struct ifstream *__is__9sifstream_1, const char *__name__PCc_1, const char *__mode__PCc_1);
-void ___constructor__F_9sifstreamPCc__1(struct ifstream *__is__9sifstream_1, const char *__name__PCc_1);
-extern struct ifstream *__sin__9sifstream_1;
-void __f__F_c__1(char __v__c_1){
-    struct ofstream *_tmp_cp_ret2;
-    struct ofstream *_tmp_cp_ret3;
-    struct ofstream *_tmp_cp_ret4;
-    __attribute__ ((unused)) struct ofstream *_thunk0(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1349))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1350))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1351, _Bool __anonymous_object1352))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1353))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1354, const char *__anonymous_object1355))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1356))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1357, _Bool __anonymous_object1358))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1359))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1360))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1361))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1362))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1363))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1364, const char *__anonymous_object1365))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1366))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1367, const char *__anonymous_object1368))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1369))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1370))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1371, const char *__anonymous_object1372, unsigned long int __anonymous_object1373))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1374, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret4=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1375))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1376))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1377, _Bool __anonymous_object1378))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1379))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1380, const char *__anonymous_object1381))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1382))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1383, _Bool __anonymous_object1384))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1385))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1386))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1387))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1388))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1389))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1390, const char *__anonymous_object1391))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1392))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1393, const char *__anonymous_object1394))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1395))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1396))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1397, const char *__anonymous_object1398, unsigned long int __anonymous_object1399))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1400, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret3=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0c__1(((_Bool (*)(void *__anonymous_object1401))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1402))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1403, _Bool __anonymous_object1404))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1405))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1406, const char *__anonymous_object1407))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1408))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1409, _Bool __anonymous_object1410))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1411))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1412))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1413))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1414))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1415))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1416, const char *__anonymous_object1417))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1418))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1419, const char *__anonymous_object1420))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1421))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1422))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1423, const char *__anonymous_object1424, unsigned long int __anonymous_object1425))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1426, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret2=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1427))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1428))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1429, _Bool __anonymous_object1430))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1431))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1432, const char *__anonymous_object1433))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1434))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1435, _Bool __anonymous_object1436))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1437))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1438))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1439))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1440))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1441))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1442, const char *__anonymous_object1443))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1444))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1445, const char *__anonymous_object1446))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1447))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1448))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1449, const char *__anonymous_object1450, unsigned long int __anonymous_object1451))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1452, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "char "))) , _tmp_cp_ret2)), __v__c_1))) , _tmp_cp_ret3)), ((void *(*)(void *__anonymous_object1453))(&_thunk0))))) , _tmp_cp_ret4));
-}
-void __f__F_Sc__1(signed char __v__Sc_1){
-    struct ofstream *_tmp_cp_ret5;
-    struct ofstream *_tmp_cp_ret6;
-    struct ofstream *_tmp_cp_ret7;
-    __attribute__ ((unused)) struct ofstream *_thunk1(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1454))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1455))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1456, _Bool __anonymous_object1457))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1458))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1459, const char *__anonymous_object1460))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1461))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1462, _Bool __anonymous_object1463))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1464))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1465))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1466))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1467))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1468))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1469, const char *__anonymous_object1470))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1471))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1472, const char *__anonymous_object1473))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1474))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1475))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1476, const char *__anonymous_object1477, unsigned long int __anonymous_object1478))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1479, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret7=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1480))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1481))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1482, _Bool __anonymous_object1483))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1484))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1485, const char *__anonymous_object1486))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1487))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1488, _Bool __anonymous_object1489))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1490))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1491))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1492))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1493))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1494))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1495, const char *__anonymous_object1496))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1497))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1498, const char *__anonymous_object1499))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1500))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1501))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1502, const char *__anonymous_object1503, unsigned long int __anonymous_object1504))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1505, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret6=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Sc__1(((_Bool (*)(void *__anonymous_object1506))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1507))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1508, _Bool __anonymous_object1509))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1510))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1511, const char *__anonymous_object1512))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1513))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1514, _Bool __anonymous_object1515))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1516))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1517))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1518))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1519))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1520))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1521, const char *__anonymous_object1522))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1523))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1524, const char *__anonymous_object1525))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1526))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1527))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1528, const char *__anonymous_object1529, unsigned long int __anonymous_object1530))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1531, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret5=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1532))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1533))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1534, _Bool __anonymous_object1535))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1536))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1537, const char *__anonymous_object1538))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1539))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1540, _Bool __anonymous_object1541))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1542))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1543))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1544))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1545))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1546))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1547, const char *__anonymous_object1548))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1549))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1550, const char *__anonymous_object1551))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1552))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1553))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1554, const char *__anonymous_object1555, unsigned long int __anonymous_object1556))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1557, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "signed char "))) , _tmp_cp_ret5)), __v__Sc_1))) , _tmp_cp_ret6)), ((void *(*)(void *__anonymous_object1558))(&_thunk1))))) , _tmp_cp_ret7));
-}
-void __f__F_Uc__1(unsigned char __v__Uc_1){
-    struct ofstream *_tmp_cp_ret8;
-    struct ofstream *_tmp_cp_ret9;
-    struct ofstream *_tmp_cp_ret10;
-    __attribute__ ((unused)) struct ofstream *_thunk2(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1559))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1560))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1561, _Bool __anonymous_object1562))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1563))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1564, const char *__anonymous_object1565))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1566))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1567, _Bool __anonymous_object1568))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1569))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1570))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1571))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1572))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1573))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1574, const char *__anonymous_object1575))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1576))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1577, const char *__anonymous_object1578))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1579))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1580))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1581, const char *__anonymous_object1582, unsigned long int __anonymous_object1583))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1584, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret10=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1585))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1586))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1587, _Bool __anonymous_object1588))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1589))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1590, const char *__anonymous_object1591))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1592))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1593, _Bool __anonymous_object1594))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1595))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1596))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1597))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1598))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1599))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1600, const char *__anonymous_object1601))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1602))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1603, const char *__anonymous_object1604))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1605))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1606))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1607, const char *__anonymous_object1608, unsigned long int __anonymous_object1609))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1610, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret9=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Uc__1(((_Bool (*)(void *__anonymous_object1611))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1612))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1613, _Bool __anonymous_object1614))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1615))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1616, const char *__anonymous_object1617))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1618))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1619, _Bool __anonymous_object1620))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1621))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1622))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1623))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1624))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1625))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1626, const char *__anonymous_object1627))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1628))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1629, const char *__anonymous_object1630))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1631))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1632))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1633, const char *__anonymous_object1634, unsigned long int __anonymous_object1635))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1636, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret8=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1637))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1638))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1639, _Bool __anonymous_object1640))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1641))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1642, const char *__anonymous_object1643))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1644))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1645, _Bool __anonymous_object1646))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1647))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1648))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1649))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1650))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1651))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1652, const char *__anonymous_object1653))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1654))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1655, const char *__anonymous_object1656))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1657))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1658))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1659, const char *__anonymous_object1660, unsigned long int __anonymous_object1661))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1662, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "unsigned char "))) , _tmp_cp_ret8)), __v__Uc_1))) , _tmp_cp_ret9)), ((void *(*)(void *__anonymous_object1663))(&_thunk2))))) , _tmp_cp_ret10));
-}
-void __f__F_s__1(signed short int __v__s_1){
-    struct ofstream *_tmp_cp_ret11;
-    struct ofstream *_tmp_cp_ret12;
-    struct ofstream *_tmp_cp_ret13;
-    __attribute__ ((unused)) struct ofstream *_thunk3(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1664))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1665))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1666, _Bool __anonymous_object1667))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1668))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1669, const char *__anonymous_object1670))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1671))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1672, _Bool __anonymous_object1673))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1674))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1675))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1676))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1677))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1678))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1679, const char *__anonymous_object1680))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1681))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1682, const char *__anonymous_object1683))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1684))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1685))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1686, const char *__anonymous_object1687, unsigned long int __anonymous_object1688))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1689, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret13=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1690))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1691))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1692, _Bool __anonymous_object1693))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1694))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1695, const char *__anonymous_object1696))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1697))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1698, _Bool __anonymous_object1699))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1700))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1701))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1702))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1703))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1704))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1705, const char *__anonymous_object1706))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1707))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1708, const char *__anonymous_object1709))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1710))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1711))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1712, const char *__anonymous_object1713, unsigned long int __anonymous_object1714))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1715, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret12=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0s__1(((_Bool (*)(void *__anonymous_object1716))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1717))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1718, _Bool __anonymous_object1719))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1720))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1721, const char *__anonymous_object1722))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1723))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1724, _Bool __anonymous_object1725))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1726))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1727))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1728))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1729))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1730))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1731, const char *__anonymous_object1732))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1733))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1734, const char *__anonymous_object1735))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1736))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1737))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1738, const char *__anonymous_object1739, unsigned long int __anonymous_object1740))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1741, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret11=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1742))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1743))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1744, _Bool __anonymous_object1745))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1746))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1747, const char *__anonymous_object1748))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1749))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1750, _Bool __anonymous_object1751))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1752))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1753))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1754))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1755))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1756))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1757, const char *__anonymous_object1758))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1759))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1760, const char *__anonymous_object1761))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1762))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1763))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1764, const char *__anonymous_object1765, unsigned long int __anonymous_object1766))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1767, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "signed short int"))) , _tmp_cp_ret11)), __v__s_1))) , _tmp_cp_ret12)), ((void *(*)(void *__anonymous_object1768))(&_thunk3))))) , _tmp_cp_ret13));
-}
-void __f__F_Us__1(unsigned short int __v__Us_1){
-    struct ofstream *_tmp_cp_ret14;
-    struct ofstream *_tmp_cp_ret15;
-    struct ofstream *_tmp_cp_ret16;
-    __attribute__ ((unused)) struct ofstream *_thunk4(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1769))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1770))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1771, _Bool __anonymous_object1772))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1773))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1774, const char *__anonymous_object1775))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1776))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1777, _Bool __anonymous_object1778))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1779))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1780))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1781))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1782))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1783))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1784, const char *__anonymous_object1785))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1786))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1787, const char *__anonymous_object1788))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1789))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1790))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1791, const char *__anonymous_object1792, unsigned long int __anonymous_object1793))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1794, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret16=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1795))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1796))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1797, _Bool __anonymous_object1798))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1799))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1800, const char *__anonymous_object1801))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1802))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1803, _Bool __anonymous_object1804))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1805))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1806))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1807))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1808))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1809))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1810, const char *__anonymous_object1811))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1812))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1813, const char *__anonymous_object1814))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1815))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1816))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1817, const char *__anonymous_object1818, unsigned long int __anonymous_object1819))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1820, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret15=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Us__1(((_Bool (*)(void *__anonymous_object1821))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1822))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1823, _Bool __anonymous_object1824))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1825))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1826, const char *__anonymous_object1827))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1828))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1829, _Bool __anonymous_object1830))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1831))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1832))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1833))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1834))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1835))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1836, const char *__anonymous_object1837))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1838))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1839, const char *__anonymous_object1840))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1841))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1842))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1843, const char *__anonymous_object1844, unsigned long int __anonymous_object1845))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1846, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret14=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1847))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1848))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1849, _Bool __anonymous_object1850))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1851))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1852, const char *__anonymous_object1853))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1854))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1855, _Bool __anonymous_object1856))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1857))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1858))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1859))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1860))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1861))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1862, const char *__anonymous_object1863))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1864))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1865, const char *__anonymous_object1866))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1867))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1868))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1869, const char *__anonymous_object1870, unsigned long int __anonymous_object1871))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1872, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "unsigned short int"))) , _tmp_cp_ret14)), __v__Us_1))) , _tmp_cp_ret15)), ((void *(*)(void *__anonymous_object1873))(&_thunk4))))) , _tmp_cp_ret16));
-}
-void __f__F_Ui__1(unsigned int __v__Ui_1){
-    struct ofstream *_tmp_cp_ret17;
-    struct ofstream *_tmp_cp_ret18;
-    struct ofstream *_tmp_cp_ret19;
-    __attribute__ ((unused)) struct ofstream *_thunk5(struct ofstream *_p0){
-        return __endl__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0__1(((_Bool (*)(void *__anonymous_object1874))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1875))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1876, _Bool __anonymous_object1877))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1878))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1879, const char *__anonymous_object1880))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1881))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1882, _Bool __anonymous_object1883))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1884))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1885))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1886))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1887))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1888))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1889, const char *__anonymous_object1890))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1891))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1892, const char *__anonymous_object1893))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1894))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1895))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1896, const char *__anonymous_object1897, unsigned long int __anonymous_object1898))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1899, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)_p0));
-    }
-    ((void)(((void)(_tmp_cp_ret19=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Fd0_d0___1(((_Bool (*)(void *__anonymous_object1900))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1901))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1902, _Bool __anonymous_object1903))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1904))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1905, const char *__anonymous_object1906))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1907))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1908, _Bool __anonymous_object1909))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1910))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1911))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1912))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1913))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1914))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1915, const char *__anonymous_object1916))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1917))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1918, const char *__anonymous_object1919))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1920))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1921))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1922, const char *__anonymous_object1923, unsigned long int __anonymous_object1924))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1925, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret18=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0Ui__1(((_Bool (*)(void *__anonymous_object1926))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1927))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1928, _Bool __anonymous_object1929))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1930))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1931, const char *__anonymous_object1932))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1933))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1934, _Bool __anonymous_object1935))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1936))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1937))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1938))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1939))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1940))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1941, const char *__anonymous_object1942))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1943))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1944, const char *__anonymous_object1945))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1946))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1947))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1948, const char *__anonymous_object1949, unsigned long int __anonymous_object1950))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1951, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)(((void)(_tmp_cp_ret17=___operator_bitor__A0_1_0_0___sepPrt__Fb_d0___sepReset__F_d0___sepReset__F_d0b___sepGetCur__FPCc_d0___sepSetCur__F_d0PCc___getNL__Fb_d0___setNL__F_d0b___sepOn__F_d0___sepOff__F_d0___sepDisable__Fb_d0___sepEnable__Fb_d0___sepGet__FPCc_d0___sepSet__F_d0PCc___sepGetTuple__FPCc_d0___sepSetTuple__F_d0PCc___fail__Fi_d0___flush__Fi_d0___open__F_d0PCcPCc___close__F_d0___write__Fd0_d0PCcUl___fmt__Fi_d0PCc__Fd0_d0PCc__1(((_Bool (*)(void *__anonymous_object1952))__sepPrt__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1953))__sepReset__F_9sofstream__1), ((void (*)(void *__anonymous_object1954, _Bool __anonymous_object1955))__sepReset__F_9sofstreamb__1), ((const char *(*)(void *__anonymous_object1956))__sepGetCur__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1957, const char *__anonymous_object1958))__sepSetCur__F_9sofstreamPCc__1), ((_Bool (*)(void *__anonymous_object1959))__getNL__Fb_9sofstream__1), ((void (*)(void *__anonymous_object1960, _Bool __anonymous_object1961))__setNL__F_9sofstreamb__1), ((void (*)(void *__anonymous_object1962))__sepOn__F_9sofstream__1), ((void (*)(void *__anonymous_object1963))__sepOff__F_9sofstream__1), ((_Bool (*)(void *__anonymous_object1964))__sepDisable__Fb_9sofstream__1), ((_Bool (*)(void *__anonymous_object1965))__sepEnable__Fb_9sofstream__1), ((const char *(*)(void *__anonymous_object1966))__sepGet__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1967, const char *__anonymous_object1968))__sepSet__F_9sofstreamPCc__1), ((const char *(*)(void *__anonymous_object1969))__sepGetTuple__FPCc_9sofstream__1), ((void (*)(void *__anonymous_object1970, const char *__anonymous_object1971))__sepSetTuple__F_9sofstreamPCc__1), ((signed int (*)(void *__anonymous_object1972))__fail__Fi_9sofstream__1), ((signed int (*)(void *__anonymous_object1973))__flush__Fi_9sofstream__1), ((void (*)(void *__os__7tostype_1, const char *__name__PCc_1, const char *__mode__PCc_1))__open__F_9sofstreamPCcPCc__1), ((void (*)(void *__os__7tostype_1))__close__F_9sofstream__1), ((void *(*)(void *__anonymous_object1974, const char *__anonymous_object1975, unsigned long int __anonymous_object1976))__write__F9sofstream_9sofstreamPCcUl__1), ((signed int (*)(void *__anonymous_object1977, const char *__fmt__PCc_1, ...))__fmt__Fi_9sofstreamPCc__1), ((void *)__sout__9sofstream_1), "size_t"))) , _tmp_cp_ret17)), __v__Ui_1))) , _tmp_cp_ret18)), ((void *(*)(void *__anonymous_object1978))(&_thunk5))))) , _tmp_cp_ret19));
-}
-signed int __main__Fi___1(){
-    __attribute__ ((unused)) signed int ___retval_main__i_1;
-    ((void)0b01101011);
-    ((void)0b01101011u);
-    ((void)0b01101011l);
-    ((void)0b01101011ll);
-    ((void)0b01101011ul);
-    ((void)0b01101011lu);
-    ((void)0b01101011ull);
-    ((void)0b01101011llu);
-    ((void)(+0b01101011));
-    ((void)(+0b01101011u));
-    ((void)(+0b01101011l));
-    ((void)(+0b01101011ll));
-    ((void)(+0b01101011ul));
-    ((void)(+0b01101011lu));
-    ((void)(+0b01101011ull));
-    ((void)(+0b01101011llu));
-    ((void)(-0b01101011));
-    ((void)(-0b01101011u));
-    ((void)(-0b01101011l));
-    ((void)(-0b01101011ll));
-    ((void)(-0b01101011ul));
-    ((void)(-0b01101011lu));
-    ((void)(-0b01101011ull));
-    ((void)(-0b01101011llu));
-    ((void)01234567);
-    ((void)01234567u);
-    ((void)01234567l);
-    ((void)01234567ll);
-    ((void)01234567ul);
-    ((void)01234567lu);
-    ((void)01234567ull);
-    ((void)01234567llu);
-    ((void)(+01234567));
-    ((void)(+01234567u));
-    ((void)(+01234567l));
-    ((void)(+01234567ll));
-    ((void)(+01234567ul));
-    ((void)(+01234567lu));
-    ((void)(+01234567ull));
-    ((void)(+01234567llu));
-    ((void)(-01234567));
-    ((void)(-01234567u));
-    ((void)(-01234567l));
-    ((void)(-01234567ll));
-    ((void)(-01234567ul));
-    ((void)(-01234567lu));
-    ((void)(-01234567ull));
-    ((void)(-01234567llu));
-    ((void)1234567890);
-    ((void)1234567890u);
-    ((void)1234567890l);
-    ((void)1234567890ll);
-    ((void)1234567890ul);
-    ((void)1234567890lu);
-    ((void)1234567890ull);
-    ((void)1234567890llu);
-    ((void)(+1234567890));
-    ((void)(+1234567890u));
-    ((void)(+1234567890l));
-    ((void)(+1234567890ll));
-    ((void)(+1234567890ul));
-    ((void)(+1234567890lu));
-    ((void)(+1234567890ull));
-    ((void)(+1234567890llu));
-    ((void)(-1234567890));
-    ((void)(-1234567890u));
-    ((void)(-1234567890l));
-    ((void)(-1234567890ll));
-    ((void)(-1234567890ul));
-    ((void)(-1234567890lu));
-    ((void)(-1234567890ull));
-    ((void)(-1234567890llu));
-    ((void)0x0123456789abcdef);
-    ((void)0x0123456789abcdefu);
-    ((void)0x0123456789abcdefl);
-    ((void)0x0123456789abcdefll);
-    ((void)0x0123456789abcdeful);
-    ((void)0x0123456789abcdeflu);
-    ((void)0x0123456789abcdefull);
-    ((void)0x0123456789abcdefllu);
-    ((void)(+0x0123456789abcdef));
-    ((void)(+0x0123456789abcdefu));
-    ((void)(+0x0123456789abcdefl));
-    ((void)(+0x0123456789abcdefll));
-    ((void)(+0x0123456789abcdeful));
-    ((void)(+0x0123456789abcdeflu));
-    ((void)(+0x0123456789abcdefull));
-    ((void)(+0x0123456789abcdefllu));
-    ((void)(-0x0123456789abcdef));
-    ((void)(-0x0123456789abcdefu));
-    ((void)(-0x0123456789abcdefl));
-    ((void)(-0x0123456789abcdefll));
-    ((void)(-0x0123456789abcdeful));
-    ((void)(-0x0123456789abcdeflu));
-    ((void)(-0x0123456789abcdefull));
-    ((void)(-0x0123456789abcdefllu));
-    ((void)0x0123456789ABCDEF);
-    ((void)0x0123456789ABCDEFu);
-    ((void)0x0123456789ABCDEFl);
-    ((void)0x0123456789ABCDEFll);
-    ((void)0x0123456789ABCDEFul);
-    ((void)0x0123456789ABCDEFlu);
-    ((void)0x0123456789ABCDEFull);
-    ((void)0x0123456789ABCDEFllu);
-    ((void)(+0x0123456789ABCDEF));
-    ((void)(+0x0123456789ABCDEFu));
-    ((void)(+0x0123456789ABCDEFl));
-    ((void)(+0x0123456789ABCDEFll));
-    ((void)(+0x0123456789ABCDEFul));
-    ((void)(+0x0123456789ABCDEFlu));
-    ((void)(+0x0123456789ABCDEFull));
-    ((void)(+0x0123456789ABCDEFllu));
-    ((void)(-0x0123456789ABCDEF));
-    ((void)(-0x0123456789ABCDEFu));
-    ((void)(-0x0123456789ABCDEFl));
-    ((void)(-0x0123456789ABCDEFll));
-    ((void)(-0x0123456789ABCDEFul));
-    ((void)(-0x0123456789ABCDEFlu));
-    ((void)(-0x0123456789ABCDEFull));
-    ((void)(-0x0123456789ABCDEFllu));
-    ((void)0X0123456789abcdef);
-    ((void)0X0123456789abcdefu);
-    ((void)0X0123456789abcdefl);
-    ((void)0X0123456789abcdefll);
-    ((void)0X0123456789abcdeful);
-    ((void)0X0123456789abcdeflu);
-    ((void)0X0123456789abcdefull);
-    ((void)0X0123456789abcdefllu);
-    ((void)(+0X0123456789abcdef));
-    ((void)(+0X0123456789abcdefu));
-    ((void)(+0X0123456789abcdefl));
-    ((void)(+0X0123456789abcdefll));
-    ((void)(+0X0123456789abcdeful));
-    ((void)(+0X0123456789abcdeflu));
-    ((void)(+0X0123456789abcdefull));
-    ((void)(+0X0123456789abcdefllu));
-    ((void)(-0X0123456789abcdef));
-    ((void)(-0X0123456789abcdefu));
-    ((void)(-0X0123456789abcdefl));
-    ((void)(-0X0123456789abcdefll));
-    ((void)(-0X0123456789abcdeful));
-    ((void)(-0X0123456789abcdeflu));
-    ((void)(-0X0123456789abcdefull));
-    ((void)(-0X0123456789abcdefllu));
-    ((void)0X0123456789ABCDEF);
-    ((void)0X0123456789ABCDEFu);
-    ((void)0X0123456789ABCDEFl);
-    ((void)0X0123456789ABCDEFll);
-    ((void)0X0123456789ABCDEFul);
-    ((void)0X0123456789ABCDEFlu);
-    ((void)0X0123456789ABCDEFull);
-    ((void)0X0123456789ABCDEFllu);
-    ((void)(+0X0123456789ABCDEF));
-    ((void)(+0X0123456789ABCDEFu));
-    ((void)(+0X0123456789ABCDEFl));
-    ((void)(+0X0123456789ABCDEFll));
-    ((void)(+0X0123456789ABCDEFul));
-    ((void)(+0X0123456789ABCDEFlu));
-    ((void)(+0X0123456789ABCDEFull));
-    ((void)(+0X0123456789ABCDEFllu));
-    ((void)(-0X0123456789ABCDEF));
-    ((void)(-0X0123456789ABCDEFu));
-    ((void)(-0X0123456789ABCDEFl));
-    ((void)(-0X0123456789ABCDEFll));
-    ((void)(-0X0123456789ABCDEFul));
-    ((void)(-0X0123456789ABCDEFlu));
-    ((void)(-0X0123456789ABCDEFull));
-    ((void)(-0X0123456789ABCDEFllu));
-    ((void)0123456789.);
-    ((void)0123456789.f);
-    ((void)0123456789.l);
-    ((void)0123456789.F);
-    ((void)0123456789.L);
-    ((void)0123456789.DL);
-    ((void)(+0123456789.));
-    ((void)(+0123456789.f));
-    ((void)(+0123456789.l));
-    ((void)(+0123456789.F));
-    ((void)(+0123456789.L));
-    ((void)(+0123456789.DL));
-    ((void)(-0123456789.));
-    ((void)(-0123456789.f));
-    ((void)(-0123456789.l));
-    ((void)(-0123456789.F));
-    ((void)(-0123456789.L));
-    ((void)(-0123456789.DL));
-    ((void)0123456789.e09);
-    ((void)0123456789.e09f);
-    ((void)0123456789.e09l);
-    ((void)0123456789.e09F);
-    ((void)0123456789.e09L);
-    ((void)0123456789.e09DL);
-    ((void)(+0123456789.e09));
-    ((void)(+0123456789.e09f));
-    ((void)(+0123456789.e09l));
-    ((void)(+0123456789.e09F));
-    ((void)(+0123456789.e09L));
-    ((void)(+0123456789.e09DL));
-    ((void)(-0123456789.e09));
-    ((void)(-0123456789.e09f));
-    ((void)(-0123456789.e09l));
-    ((void)(-0123456789.e09F));
-    ((void)(-0123456789.e09L));
-    ((void)(-0123456789.e09DL));
-    ((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));
-    ((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));
-    ((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);
-    ((void).0123456789f);
-    ((void).0123456789l);
-    ((void).0123456789F);
-    ((void).0123456789L);
-    ((void).0123456789DL);
-    ((void)(+.0123456789));
-    ((void)(+.0123456789f));
-    ((void)(+.0123456789l));
-    ((void)(+.0123456789F));
-    ((void)(+.0123456789L));
-    ((void)(+.0123456789DL));
-    ((void)(-.0123456789));
-    ((void)(-.0123456789f));
-    ((void)(-.0123456789l));
-    ((void)(-.0123456789F));
-    ((void)(-.0123456789L));
-    ((void)(-.0123456789DL));
-    ((void).0123456789e09);
-    ((void).0123456789e09f);
-    ((void).0123456789e09l);
-    ((void).0123456789e09F);
-    ((void).0123456789e09L);
-    ((void).0123456789e09DL);
-    ((void)(+.0123456789e09));
-    ((void)(+.0123456789e09f));
-    ((void)(+.0123456789e09l));
-    ((void)(+.0123456789e09F));
-    ((void)(+.0123456789e09L));
-    ((void)(+.0123456789e09DL));
-    ((void)(-.0123456789e09));
-    ((void)(-.0123456789e09f));
-    ((void)(-.0123456789e09l));
-    ((void)(-.0123456789e09F));
-    ((void)(-.0123456789e09L));
-    ((void)(-.0123456789e09DL));
-    ((void).0123456789E+09);
-    ((void).0123456789E+09f);
-    ((void).0123456789E+09l);
-    ((void).0123456789E+09F);
-    ((void).0123456789E+09L);
-    ((void).0123456789E+09DL);
-    ((void)(+.0123456789E+09));
-    ((void)(+.0123456789E+09f));
-    ((void)(+.0123456789E+09l));
-    ((void)(+.0123456789E+09F));
-    ((void)(+.0123456789E+09L));
-    ((void)(+.0123456789E+09DL));
-    ((void)(-.0123456789E+09));
-    ((void)(-.0123456789E+09f));
-    ((void)(-.0123456789E+09l));
-    ((void)(-.0123456789E+09F));
-    ((void)(-.0123456789E+09L));
-    ((void)(-.0123456789E+09DL));
-    ((void).0123456789E-09);
-    ((void).0123456789E-09f);
-    ((void).0123456789E-09l);
-    ((void).0123456789E-09F);
-    ((void).0123456789E-09L);
-    ((void).0123456789E-09DL);
-    ((void)(-.0123456789E-09));
-    ((void)(-.0123456789E-09f));
-    ((void)(-.0123456789E-09l));
-    ((void)(-.0123456789E-09F));
-    ((void)(-.0123456789E-09L));
-    ((void)(-.0123456789E-09DL));
-    ((void)(-.0123456789E-09));
-    ((void)(-.0123456789E-09f));
-    ((void)(-.0123456789E-09l));
-    ((void)(-.0123456789E-09F));
-    ((void)(-.0123456789E-09L));
-    ((void)(-.0123456789E-09DL));
-    ((void)0123456789.0123456789);
-    ((void)0123456789.0123456789f);
-    ((void)0123456789.0123456789l);
-    ((void)0123456789.0123456789F);
-    ((void)0123456789.0123456789L);
-    ((void)0123456789.0123456789DL);
-    ((void)(+0123456789.0123456789));
-    ((void)(+0123456789.0123456789f));
-    ((void)(+0123456789.0123456789l));
-    ((void)(+0123456789.0123456789F));
-    ((void)(+0123456789.0123456789L));
-    ((void)(+0123456789.0123456789DL));
-    ((void)(-0123456789.0123456789));
-    ((void)(-0123456789.0123456789f));
-    ((void)(-0123456789.0123456789l));
-    ((void)(-0123456789.0123456789F));
-    ((void)(-0123456789.0123456789L));
-    ((void)(-0123456789.0123456789DL));
-    ((void)0123456789.0123456789E09);
-    ((void)0123456789.0123456789E09f);
-    ((void)0123456789.0123456789E09l);
-    ((void)0123456789.0123456789E09F);
-    ((void)0123456789.0123456789E09L);
-    ((void)0123456789.0123456789E09DL);
-    ((void)(+0123456789.0123456789E09));
-    ((void)(+0123456789.0123456789E09f));
-    ((void)(+0123456789.0123456789E09l));
-    ((void)(+0123456789.0123456789E09F));
-    ((void)(+0123456789.0123456789E09L));
-    ((void)(+0123456789.0123456789E09DL));
-    ((void)(-0123456789.0123456789E09));
-    ((void)(-0123456789.0123456789E09f));
-    ((void)(-0123456789.0123456789E09l));
-    ((void)(-0123456789.0123456789E09F));
-    ((void)(-0123456789.0123456789E09L));
-    ((void)(-0123456789.0123456789E09DL));
-    ((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));
-    ((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));
-    ((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)0x0123456789.p09);
-    ((void)0x0123456789.p09f);
-    ((void)0x0123456789.p09l);
-    ((void)0x0123456789.p09F);
-    ((void)0x0123456789.p09L);
-    ((void)(+0x0123456789.p09));
-    ((void)(+0x0123456789.p09f));
-    ((void)(+0x0123456789.p09l));
-    ((void)(+0x0123456789.p09F));
-    ((void)(+0x0123456789.p09L));
-    ((void)(-0x0123456789.p09));
-    ((void)(-0x0123456789.p09f));
-    ((void)(-0x0123456789.p09l));
-    ((void)(-0x0123456789.p09F));
-    ((void)(-0x0123456789.p09L));
-    ((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));
-    ((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));
-    ((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)0x.0123456789p09);
-    ((void)0x.0123456789p09f);
-    ((void)0x.0123456789p09l);
-    ((void)0x.0123456789p09F);
-    ((void)0x.0123456789p09L);
-    ((void)(+0x.0123456789p09));
-    ((void)(+0x.0123456789p09f));
-    ((void)(+0x.0123456789p09l));
-    ((void)(+0x.0123456789p09F));
-    ((void)(+0x.0123456789p09L));
-    ((void)(-0x.0123456789p09));
-    ((void)(-0x.0123456789p09f));
-    ((void)(-0x.0123456789p09l));
-    ((void)(-0x.0123456789p09F));
-    ((void)(-0x.0123456789p09L));
-    ((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));
-    ((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));
-    ((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)0X0123456789.0123456789P09);
-    ((void)0X0123456789.0123456789P09f);
-    ((void)0X0123456789.0123456789P09l);
-    ((void)0X0123456789.0123456789P09F);
-    ((void)0X0123456789.0123456789P09L);
-    ((void)(+0X0123456789.0123456789P09));
-    ((void)(+0X0123456789.0123456789P09f));
-    ((void)(+0X0123456789.0123456789P09l));
-    ((void)(+0X0123456789.0123456789P09F));
-    ((void)(+0X0123456789.0123456789P09L));
-    ((void)(-0X0123456789.0123456789P09));
-    ((void)(-0X0123456789.0123456789P09f));
-    ((void)(-0X0123456789.0123456789P09l));
-    ((void)(-0X0123456789.0123456789P09F));
-    ((void)(-0X0123456789.0123456789P09L));
-    ((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));
-    ((void)(+0X0123456789.0123456789P+09l));
-    ((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);
-    ((void)0X0123456789.0123456789P-09l);
-    ((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));
-    ((void)(-0X0123456789.0123456789P-09l));
-    ((void)(-0X0123456789.0123456789P-09F));
-    ((void)(-0X0123456789.0123456789P-09L));
-    ((void)((signed char )0b01101011));
-    ((void)((signed short int )0b01101011));
-    ((void)((signed int )0b01101011));
-    ((void)((signed long long int )0b01101011));
-    ((void)((__int128 )0b01101011));
-    ((void)((unsigned char )0b01101011u));
-    ((void)((signed short int )0b01101011u));
-    ((void)((unsigned int )0b01101011u));
-    ((void)((signed long long int )0b01101011u));
-    ((void)((__int128 )0b01101011u));
-    ((void)(+((signed int )((signed char )0b01101011))));
-    ((void)(+((signed int )((signed short int )0b01101011))));
-    ((void)(+((signed int )0b01101011)));
-    ((void)(+((signed long long int )0b01101011)));
-    ((void)(+((float )((__int128 )0b01101011))));
-    ((void)(+((signed int )((unsigned char )0b01101011u))));
-    ((void)(+((signed int )((signed short int )0b01101011u))));
-    ((void)(+((unsigned int )0b01101011u)));
-    ((void)(+((signed long long int )0b01101011u)));
-    ((void)(+((float )((__int128 )0b01101011u))));
-    ((void)(-((signed int )((signed char )0b01101011))));
-    ((void)(-((signed int )((signed short int )0b01101011))));
-    ((void)(-((signed int )0b01101011)));
-    ((void)(-((signed long long int )0b01101011)));
-    ((void)(-((float )((__int128 )0b01101011))));
-    ((void)(-((signed int )((unsigned char )0b01101011u))));
-    ((void)(-((signed int )((signed short int )0b01101011u))));
-    ((void)(-((unsigned int )0b01101011u)));
-    ((void)(-((signed long long int )0b01101011u)));
-    ((void)(-((float )((__int128 )0b01101011u))));
-    ((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));
-    ((void)__f__F_Uc__1(((unsigned char )21u)));
-    ((void)__f__F_s__1(22));
-    ((void)__f__F_Us__1(((unsigned short int )23u)));
-    ((void)__f__F_Ui__1(((unsigned int )24)));
-    ((void)' ');
-    ((void)'a');
-    ((void)'"');
-    ((void)'_');
-    ((void)'\'');
-    ((void)'\"');
-    ((void)'\?');
-    ((void)'\\');
-    ((void)'\a');
-    ((void)'\b');
-    ((void)'\e');
-    ((void)'\f');
-    ((void)'\n');
-    ((void)'\r');
-    ((void)'\t');
-    ((void)'\v');
-    ((void)'\0');
-    ((void)'\377');
-    ((void)'\xf');
-    ((void)'\xff');
-    ((void)u' ');
-    ((void)u'a');
-    ((void)u'"');
-    ((void)u'_');
-    ((void)U' ');
-    ((void)U'a');
-    ((void)U'"');
-    ((void)U'_');
-    ((void)L' ');
-    ((void)L'a');
-    ((void)L'"');
-    ((void)L'_');
-    ((void)" ");
-    ((void)"a");
-    ((void)"'");
-    ((void)'_');
-    ((void)"abcdefghijklmnopqrstuvwxyz");
-    ((void)"");
-    ((void)"aa");
-    ((void)"a\na");
-    ((void)"a\0a");
-    ((void)"_\377_");
-    ((void)"_\xff_");
-    ((void)"\xff");
-    ((void)"\'");
-    ((void)"\"");
-    ((void)"\?");
-    ((void)"\\");
-    ((void)"\a");
-    ((void)"\b");
-    ((void)"\e");
-    ((void)"\f");
-    ((void)"\n");
-    ((void)"\r");
-    ((void)"\t");
-    ((void)"\v");
-    ((void)"\0");
-    ((void)"\377");
-    ((void)"\xf");
-    ((void)"\xff");
-    ((void)u8" ");
-    ((void)u8"a");
-    ((void)u8"'");
-    ((void)u'_');
-    ((void)u8"abcdefghijklmnopqrstuvwxyz");
-    ((void)u" ");
-    ((void)u"a");
-    ((void)u"'");
-    ((void)u'_');
-    ((void)u"abcdefghijklmnopqrstuvwxyz");
-    ((void)U" ");
-    ((void)U"a");
-    ((void)U"'");
-    ((void)U'_');
-    ((void)U"abcdefghijklmnopqrstuvwxyz");
-    ((void)L" ");
-    ((void)L"a");
-    ((void)L"'");
-    ((void)L'_');
-    ((void)L"abcdefghijklmnopqrstuvwxyz");
-    ((void)"\xFF");
-    ((void)u"\xFFFF");
-    ((void)U"\xFFFFFFFF");
-    ((void)L"\xFFFFFFFF");
-    ((void)"\x12" "3");
-    ((void)u8"a" "b" "c");
-    ((void)u8"a" "b" "c");
-    ((void)u8"a" "b" "c");
-    ((void)u8"a" "b" "c");
-    ((void)u8"a" "b" "c");
-    ((void)u"a" "b" "c");
-    ((void)u"a" "b" "c");
-    ((void)u"a" "b" "c");
-    ((void)u"a" "b" "c");
-    ((void)u"a" "b" "c");
-    ((void)U"a" "b" "c");
-    ((void)U"a" "b" "c");
-    ((void)U"a" "b" "c");
-    ((void)U"a" "b" "c");
-    ((void)U"a" "b" "c");
-    ((void)L"a" "b" "c");
-    ((void)L"a" "b" "c");
-    ((void)L"a" "b" "c");
-    ((void)L"a" "b" "c");
-    ((void)L"a" "b" "c");
-    ((void)(___retval_main__i_1=0) /* ?{} */);
-    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(); }
-static inline signed int invoke_main(signed int argc, char **argv, char **envp);
-signed int main(signed int __argc__i_1, char **__argv__PPc_1, char **__envp__PPc_1){
-    __attribute__ ((unused)) signed int ___retval_main__i_1;
-    signed int _tmp_cp_ret2;
-    ((void)(___retval_main__i_1=(((void)(_tmp_cp_ret2=invoke_main(__argc__i_1, __argv__PPc_1, __envp__PPc_1))) , _tmp_cp_ret2)) /* ?{} */);
-    ((void)(_tmp_cp_ret2) /* ^?{} */);
-    return ___retval_main__i_1;
-}
Index: src/tests/.gitignore
===================================================================
--- src/tests/.gitignore	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/.gitignore	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -1,2 +1,3 @@
 .out/
 .err/
+.type
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/Makefile.am	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 09:08:15 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Mon Nov 27 21:34:33 2017
-## Update Count     : 48
+## Last Modified On : Wed Jun  6 16:42:20 2018
+## Update Count     : 49
 ###############################################################################
 
@@ -28,5 +28,5 @@
 DEBUG_FLAGS =
 
-BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@
+BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -I.
 if !BUILD_DEBUG
 BUILD_FLAGS += -nodebug
@@ -92,7 +92,4 @@
 	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
-literals : literals.c @CFA_BINDIR@/@CFA_NAME@
-	${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 ${@}
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/Makefile.in	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -309,5 +309,5 @@
 # applies to both programs
 DEBUG_FLAGS = 
-BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ \
+BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -I. \
 	$(am__append_1) $(am__append_2) $(am__append_3)
 TEST_FLAGS = $(if $(test), 2> $(test), )
@@ -769,7 +769,4 @@
 	${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
-literals : literals.c @CFA_BINDIR@/@CFA_NAME@
-	${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 ${@}
Index: src/tests/builtins/sync.c
===================================================================
--- src/tests/builtins/sync.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/builtins/sync.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -8,5 +8,7 @@
 	volatile int * vp4 = 0; int * rp4 = 0; int v4 = 0;
 	volatile long long int * vp8 = 0; long long int * rp8 = 0; long long int v8 = 0;
+	#if defined(__SIZEOF_INT128__)
 	volatile __int128 * vp16 = 0; __int128 * rp16 = 0; __int128 v16 = 0;
+	#endif
 
 	{ char ret; ret = __sync_fetch_and_add(vp1, v1); }
@@ -18,6 +20,8 @@
 	{ long long int ret; ret = __sync_fetch_and_add(vp8, v8); }
 	{ long long int ret; ret = __sync_fetch_and_add_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_fetch_and_add(vp16, v16); }
 	{ __int128 ret; ret = __sync_fetch_and_add_16(vp16, v16); }
+	#endif
 
 	{ char ret; ret = __sync_fetch_and_sub(vp1, v1); }
@@ -29,6 +33,8 @@
 	{ long long int ret; ret = __sync_fetch_and_sub(vp8, v8); }
 	{ long long int ret; ret = __sync_fetch_and_sub_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_fetch_and_sub(vp16, v16); }
 	{ __int128 ret; ret = __sync_fetch_and_sub_16(vp16, v16); }
+	#endif
 
 	{ char ret; ret = __sync_fetch_and_or(vp1, v1); }
@@ -40,6 +46,8 @@
 	{ long long int ret; ret = __sync_fetch_and_or(vp8, v8); }
 	{ long long int ret; ret = __sync_fetch_and_or_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_fetch_and_or(vp16, v16); }
 	{ __int128 ret; ret = __sync_fetch_and_or_16(vp16, v16); }
+	#endif
 
 	{ char ret; ret = __sync_fetch_and_and(vp1, v1); }
@@ -51,6 +59,8 @@
 	{ long long int ret; ret = __sync_fetch_and_and(vp8, v8); }
 	{ long long int ret; ret = __sync_fetch_and_and_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_fetch_and_and(vp16, v16); }
 	{ __int128 ret; ret = __sync_fetch_and_and_16(vp16, v16); }
+	#endif
 
 	{ char ret; ret = __sync_fetch_and_xor(vp1, v1); }
@@ -62,6 +72,8 @@
 	{ long long int ret; ret = __sync_fetch_and_xor(vp8, v8); }
 	{ long long int ret; ret = __sync_fetch_and_xor_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_fetch_and_xor(vp16, v16); }
 	{ __int128 ret; ret = __sync_fetch_and_xor_16(vp16, v16); }
+	#endif
 
 	{ char ret; ret = __sync_fetch_and_nand(vp1, v1); }
@@ -73,6 +85,8 @@
 	{ long long int ret; ret = __sync_fetch_and_nand(vp8, v8); }
 	{ long long int ret; ret = __sync_fetch_and_nand_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_fetch_and_nand(vp16, v16); }
 	{ __int128 ret; ret = __sync_fetch_and_nand_16(vp16, v16); }
+	#endif
 
 	{ char ret; ret = __sync_add_and_fetch(vp1, v1); }
@@ -84,6 +98,8 @@
 	{ long long int ret; ret = __sync_add_and_fetch(vp8, v8); }
 	{ long long int ret; ret = __sync_add_and_fetch_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_add_and_fetch(vp16, v16); }
 	{ __int128 ret; ret = __sync_add_and_fetch_16(vp16, v16); }
+	#endif
 
 	{ char ret; ret = __sync_sub_and_fetch(vp1, v1); }
@@ -95,6 +111,8 @@
 	{ long long int ret; ret = __sync_sub_and_fetch(vp8, v8); }
 	{ long long int ret; ret = __sync_sub_and_fetch_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_sub_and_fetch(vp16, v16); }
 	{ __int128 ret; ret = __sync_sub_and_fetch_16(vp16, v16); }
+	#endif
 
 	{ char ret; ret = __sync_or_and_fetch(vp1, v1); }
@@ -106,6 +124,8 @@
 	{ long long int ret; ret = __sync_or_and_fetch(vp8, v8); }
 	{ long long int ret; ret = __sync_or_and_fetch_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_or_and_fetch(vp16, v16); }
 	{ __int128 ret; ret = __sync_or_and_fetch_16(vp16, v16); }
+	#endif
 
 	{ char ret; ret = __sync_and_and_fetch(vp1, v1); }
@@ -117,6 +137,8 @@
 	{ long long int ret; ret = __sync_and_and_fetch(vp8, v8); }
 	{ long long int ret; ret = __sync_and_and_fetch_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_and_and_fetch(vp16, v16); }
 	{ __int128 ret; ret = __sync_and_and_fetch_16(vp16, v16); }
+	#endif
 
 	{ char ret; ret = __sync_xor_and_fetch(vp1, v1); }
@@ -128,6 +150,8 @@
 	{ long long int ret; ret = __sync_xor_and_fetch(vp8, v8); }
 	{ long long int ret; ret = __sync_xor_and_fetch_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_xor_and_fetch(vp16, v16); }
 	{ __int128 ret; ret = __sync_xor_and_fetch_16(vp16, v16); }
+	#endif
 
 	{ char ret; ret = __sync_nand_and_fetch(vp1, v1); }
@@ -139,6 +163,8 @@
 	{ long long int ret; ret = __sync_nand_and_fetch(vp8, v8); }
 	{ long long int ret; ret = __sync_nand_and_fetch_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_nand_and_fetch(vp16, v16); }
 	{ __int128 ret; ret = __sync_nand_and_fetch_16(vp16, v16); }
+	#endif
 
 	{ _Bool ret; ret = __sync_bool_compare_and_swap(vp1, v1, v1); }
@@ -150,6 +176,8 @@
 	{ _Bool ret; ret = __sync_bool_compare_and_swap(vp8, v8, v8); }
 	{ _Bool ret; ret = __sync_bool_compare_and_swap_8(vp8, v8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ _Bool ret; ret = __sync_bool_compare_and_swap(vp16, v16, v16); }
 	{ _Bool ret; ret = __sync_bool_compare_and_swap_16(vp16, v16,v16); }
+	#endif
 
 	{ char ret; ret = __sync_val_compare_and_swap(vp1, v1, v1); }
@@ -161,6 +189,8 @@
 	{ long long int ret; ret = __sync_val_compare_and_swap(vp8, v8, v8); }
 	{ long long int ret; ret = __sync_val_compare_and_swap_8(vp8, v8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_val_compare_and_swap(vp16, v16, v16); }
 	{ __int128 ret; ret = __sync_val_compare_and_swap_16(vp16, v16,v16); }
+	#endif
 
 	{ char ret; ret = __sync_lock_test_and_set(vp1, v1); }
@@ -172,6 +202,8 @@
 	{ long long int ret; ret = __sync_lock_test_and_set(vp8, v8); }
 	{ long long int ret; ret = __sync_lock_test_and_set_8(vp8, v8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __sync_lock_test_and_set(vp16, v16); }
 	{ __int128 ret; ret = __sync_lock_test_and_set_16(vp16, v16); }
+	#endif
 
 	{ __sync_lock_release(vp1); }
@@ -183,6 +215,8 @@
 	{ __sync_lock_release(vp8); }
 	{ __sync_lock_release_8(vp8); }
+	#if defined(__SIZEOF_INT128__)
 	{ __sync_lock_release(vp16); }
 	{ __sync_lock_release_16(vp16); }
+	#endif
 
 	{ __sync_synchronize(); }
@@ -208,7 +242,9 @@
 	{ long long int ret; ret = __atomic_exchange_8(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; __atomic_exchange(vp8, &v8, &ret, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_exchange_n(vp16, &v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_exchange_16(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; __atomic_exchange(vp16, &v16, &ret, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_load_n(vp1, __ATOMIC_SEQ_CST); }
@@ -224,7 +260,9 @@
 	{ long long int ret; ret = __atomic_load_8(vp8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; __atomic_load(vp8, &ret, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_load_n(vp16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_load_16(vp16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; __atomic_load(vp16, &ret, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ _Bool ret; ret = __atomic_compare_exchange_n(vp1, rp1, v1, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
@@ -240,7 +278,9 @@
 	{ _Bool ret; ret = __atomic_compare_exchange_8(vp8, rp8, v8, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
 	{ _Bool ret; ret = __atomic_compare_exchange(vp8, rp8, &v8, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ _Bool ret; ret = __atomic_compare_exchange_n(vp16, rp16, v16, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
 	{ _Bool ret; ret = __atomic_compare_exchange_16(vp16, rp16, v16, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
 	{ _Bool ret; ret = __atomic_compare_exchange(vp16, rp16, &v16, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ __atomic_store_n(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -256,7 +296,9 @@
 	{ __atomic_store_8(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ __atomic_store(vp8, &v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __atomic_store_n(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __atomic_store_16(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __atomic_store(vp16, &v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_add_fetch(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -268,6 +310,8 @@
 	{ long long int ret; ret = __atomic_add_fetch(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_add_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_add_fetch(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_add_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_sub_fetch(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -279,6 +323,8 @@
 	{ long long int ret; ret = __atomic_sub_fetch(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_sub_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_sub_fetch(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_sub_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_and_fetch(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -290,6 +336,8 @@
 	{ long long int ret; ret = __atomic_and_fetch(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_and_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_and_fetch(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_and_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_nand_fetch(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -301,6 +349,8 @@
 	{ long long int ret; ret = __atomic_nand_fetch(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_nand_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_nand_fetch(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_nand_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_xor_fetch(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -312,6 +362,8 @@
 	{ long long int ret; ret = __atomic_xor_fetch(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_xor_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_xor_fetch(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_xor_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_or_fetch(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -323,6 +375,8 @@
 	{ long long int ret; ret = __atomic_or_fetch(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_or_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_or_fetch(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_or_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_fetch_add(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -334,6 +388,8 @@
 	{ long long int ret; ret = __atomic_fetch_add(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_fetch_add_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_fetch_add(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_fetch_add_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_fetch_sub(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -345,6 +401,8 @@
 	{ long long int ret; ret = __atomic_fetch_sub(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_fetch_sub_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_fetch_sub(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_fetch_sub_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_fetch_and(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -356,6 +414,8 @@
 	{ long long int ret; ret = __atomic_fetch_and(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_fetch_and_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_fetch_and(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_fetch_and_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_fetch_nand(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -367,6 +427,8 @@
 	{ long long int ret; ret = __atomic_fetch_nand(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_fetch_nand_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_fetch_nand(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_fetch_nand_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_fetch_xor(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -378,6 +440,8 @@
 	{ long long int ret; ret = __atomic_fetch_xor(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_fetch_xor_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_fetch_xor(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_fetch_xor_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ char ret; ret = __atomic_fetch_or(vp1, v1, __ATOMIC_SEQ_CST); }
@@ -389,6 +453,8 @@
 	{ long long int ret; ret = __atomic_fetch_or(vp8, v8, __ATOMIC_SEQ_CST); }
 	{ long long int ret; ret = __atomic_fetch_or_8(vp8, v8, __ATOMIC_SEQ_CST); }
+	#if defined(__SIZEOF_INT128__)
 	{ __int128 ret; ret = __atomic_fetch_or(vp16, v16, __ATOMIC_SEQ_CST); }
 	{ __int128 ret; ret = __atomic_fetch_or_16(vp16, v16, __ATOMIC_SEQ_CST); }
+	#endif
 
 	{ _Bool ret; ret = __atomic_always_lock_free(sizeof(int), vp4); }
Index: src/tests/concurrent/coroutineYield.c
===================================================================
--- src/tests/concurrent/coroutineYield.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/concurrent/coroutineYield.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -4,4 +4,7 @@
 #include <thread>
 #include <time>
+
+#define __kick_rate 150000ul
+#include "long_tests.h"
 
 #ifndef PREEMPTION_RATE
@@ -13,5 +16,5 @@
 }
 
-#ifdef LONG_TEST
+#ifdef TEST_LONG
 static const unsigned long N = 600_000ul;
 #else
@@ -23,7 +26,11 @@
 void main(Coroutine& this) {
 	while(true) {
-		sout | "Coroutine 1" | endl;
+		#if !defined(TEST_FOREVER)
+			sout | "Coroutine 1" | endl;
+		#endif
 		yield();
-		sout | "Coroutine 2" | endl;
+		#if !defined(TEST_FOREVER)
+			sout | "Coroutine 2" | endl;
+		#endif
 		suspend();
 	}
@@ -33,9 +40,14 @@
 int main(int argc, char* argv[]) {
 	Coroutine c;
-	for(int i = 0; i < N; i++) {
-		sout | "Thread 1" | endl;
+	for(int i = 0; TEST(i < N); i++) {
+		#if !defined(TEST_FOREVER)
+			sout | "Thread 1" | endl;
+		#endif
 		resume(c);
-		sout | "Thread 2" | endl;
+		#if !defined(TEST_FOREVER)
+			sout | "Thread 2" | endl;
+		#endif
 		yield();
+		KICK_WATCHDOG;
 	}
 }
Index: src/tests/concurrent/examples/datingService.c
===================================================================
--- src/tests/concurrent/examples/datingService.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/concurrent/examples/datingService.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -8,6 +8,6 @@
 // Created On       : Mon Oct 30 12:56:20 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar 14 22:48:40 2018
-// Update Count     : 23
+// Last Modified On : Sun May 27 09:05:18 2018
+// Update Count     : 26
 //
 
@@ -18,8 +18,8 @@
 #include <unistd.h>										// getpid
 
-enum { NoOfPairs = 20 };
+enum { CompCodes = 20 };								// number of compatibility codes
 
 monitor DatingService {
-	condition Girls[NoOfPairs], Boys[NoOfPairs];
+	condition Girls[CompCodes], Boys[CompCodes];
 	unsigned int GirlPhoneNo, BoyPhoneNo;
 }; // DatingService
@@ -47,6 +47,6 @@
 } // DatingService boy
 
-unsigned int girlck[NoOfPairs];
-unsigned int boyck[NoOfPairs];
+unsigned int girlck[CompCodes];
+unsigned int boyck[CompCodes];
 
 thread Girl {
@@ -88,20 +88,20 @@
 int main() {
 	DatingService TheExchange;
-	Girl * girls[NoOfPairs];
-	Boy  * boys[NoOfPairs];
+	Girl * girls[CompCodes];
+	Boy  * boys[CompCodes];
 
 	srandom( /*getpid()*/ 103 );
 
-	for ( unsigned int i = 0; i < NoOfPairs; i += 1 ) {
+	for ( unsigned int i = 0; i < CompCodes; i += 1 ) {
 		girls[i] = new( &TheExchange, i, i );
-		boys[i]  = new( &TheExchange, i, NoOfPairs - ( i + 1 ) );
+		boys[i]  = new( &TheExchange, i, CompCodes - ( i + 1 ) );
 	} // for
 
-	for ( unsigned int i = 0; i < NoOfPairs; i += 1 ) {
+	for ( unsigned int i = 0; i < CompCodes; i += 1 ) {
 		delete( boys[i] );
 		delete( girls[i] );
 	} // for
 
-	for ( unsigned int i = 0; i < NoOfPairs; i += 1 ) {
+	for ( unsigned int i = 0; i < CompCodes; i += 1 ) {
 		if ( girlck[ boyck[i] ] != boyck[ girlck[i] ] ) abort();
 	} // for
Index: src/tests/concurrent/preempt.c
===================================================================
--- src/tests/concurrent/preempt.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/concurrent/preempt.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -2,4 +2,6 @@
 #include <thread>
 #include <time>
+
+#include "long_tests.h"
 
 #ifndef PREEMPTION_RATE
@@ -11,5 +13,5 @@
 }
 
-#ifdef LONG_TEST
+#ifdef TEST_LONG
 static const unsigned long N = 30_000ul;
 #else
@@ -30,5 +32,5 @@
 
 void main(worker_t & this) {
-	while(counter < N) {
+	while(TEST(counter < N)) {
 		__cfaabi_check_preemption();
 		if( (counter % 7) == this.value ) {
@@ -40,4 +42,5 @@
 		}
 		__cfaabi_check_preemption();
+		KICK_WATCHDOG;
 	}
 }
Index: c/tests/concurrent/signal/barge.c
===================================================================
--- src/tests/concurrent/signal/barge.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ 	(revision )
@@ -1,117 +1,0 @@
-//----------------------------------------------------------------------------------------
-//----------------------------------------------------------------------------------------
-//
-//		DEPRECATED TEST
-//
-//----------------------------------------------------------------------------------------
-//----------------------------------------------------------------------------------------
-
-#include <fstream>
-#include <kernel>
-#include <monitor>
-#include <stdlib>
-#include <thread>
-
-static const unsigned long N = 50_000ul;
-
-#ifndef PREEMPTION_RATE
-#define PREEMPTION_RATE 10`ms
-#endif
-
-Duration default_preemption() {
-	return 0;
-}
-enum state_t { WAIT, SIGNAL, BARGE };
-
-monitor global_t {};
-
-monitor global_data_t {
-	volatile bool done;
-	int counter;
-	state_t state;
-
-	unsigned short do_signal;
-	unsigned short do_wait2;
-	unsigned short do_wait1;
-};
-
-void ?{} ( global_data_t & this ) {
-	this.done = false;
-	this.counter = 0;
-	this.state = BARGE;
-
-	this.do_signal = 6;
-	this.do_wait1  = 1;
-	this.do_wait2  = 3;
-}
-
-void ^?{} ( global_data_t & this ) {}
-
-global_t globalA;
-global_t globalB;
-global_data_t globalC;
-
-condition cond;
-
-thread Threads {};
-
-bool logicC( global_t & mutex a, global_t & mutex b, global_data_t & mutex c ) {
-	c.counter++;
-
-	if( (c.counter % 1000) == 0 ) sout | c.counter | endl;
-
-	int action = c.counter % 10;
-
-	if( action == 0 ) {
-		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;
-	}
-
-	if( action == c.do_wait1 || action == c.do_wait2 ) {
-		c.state = WAIT;
-		wait( cond );
-
-		if(c.state != SIGNAL) {
-			sout | "ERROR Barging detected" | c.counter | endl;
-			abort();
-		}
-	}
-	else if( action == c.do_signal ) {
-		c.state = SIGNAL;
-
-		signal( cond );
-		signal( cond );
-	}
-	else {
-		c.state = BARGE;
-	}
-
-	if( c.counter >= N ) c.done = true;
-	return !c.done;
-}
-
-bool logicB( global_t & mutex a, global_t & mutex b ) {
-	return logicC(a, b, globalC);
-}
-
-bool logicA( global_t & mutex a ) {
-	return logicB(a, globalB);
-}
-
-void main( Threads & this ) {
-	while( logicA(globalA) ) { yield(); };
-}
-
-static thread_desc * volatile the_threads;
-
-int main(int argc, char* argv[]) {
-	srandom(0);
-	processor p;
-	{
-		Threads t[17];
-		the_threads = (thread_desc*)t;
-	}
-}
Index: src/tests/concurrent/signal/block.c
===================================================================
--- src/tests/concurrent/signal/block.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/concurrent/signal/block.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -14,4 +14,6 @@
 #include <time>
 
+#include "long_tests.h"
+
 #ifndef PREEMPTION_RATE
 #define PREEMPTION_RATE 10`ms
@@ -22,5 +24,5 @@
 }
 
-#ifdef LONG_TEST
+#ifdef TEST_LONG
 static const unsigned long N = 150_000ul;
 #else
@@ -40,5 +42,5 @@
 }
 
-void ^?{} ( global_data_t & this ) {}
+void ^?{} ( global_data_t & mutex this ) {}
 
 global_data_t globalA, globalB;
@@ -66,6 +68,7 @@
 thread Waiter {};
 void main( Waiter & this ) {
-	for( int i = 0; i < N; i++ ) {
+	for( int i = 0; TEST(i < N); i++ ) {
 		wait_op( globalA, globalB, i );
+		KICK_WATCHDOG;
 	}
 }
Index: src/tests/concurrent/signal/disjoint.c
===================================================================
--- src/tests/concurrent/signal/disjoint.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/concurrent/signal/disjoint.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -4,4 +4,6 @@
 #include <thread>
 #include <time>
+
+#include "long_tests.h"
 
 #ifndef PREEMPTION_RATE
@@ -13,5 +15,5 @@
 }
 
-#ifdef LONG_TEST
+#ifdef TEST_LONG
 static const unsigned long N = 300_000ul;
 #else
@@ -26,5 +28,5 @@
 monitor global_data_t;
 void ?{}( global_data_t & this );
-void ^?{} ( global_data_t & this );
+void ^?{} ( global_data_t & mutex this );
 
 monitor global_data_t {
@@ -42,5 +44,5 @@
 }
 
-void ^?{} ( global_data_t & this ) {}
+void ^?{} ( global_data_t & mutex this ) {}
 
 //------------------------------------------------------------------------------
@@ -67,9 +69,10 @@
 	}
 
-	d.counter++;
+	#if !defined(TEST_FOREVER)
+		d.counter++;
+		if( (d.counter % 1000) == 0 ) sout | d.counter | endl;
+	#endif
 
-	if( (d.counter % 1000) == 0 ) sout | d.counter | endl;
-
-	return d.counter < N;
+	return TEST(d.counter < N);
 }
 
@@ -77,5 +80,5 @@
 
 void main( Waiter & this ) {
-	while( wait( mut, data ) ) { yield(); }
+	while( wait( mut, data ) ) { KICK_WATCHDOG; yield(); }
 }
 
@@ -94,5 +97,5 @@
 
 	//This is technically a mutual exclusion violation but the mutex monitor protects us
-	bool running = data.counter < N && data.counter > 0;
+	bool running = TEST(data.counter < N) && data.counter > 0;
 	if( data.state != SIGNAL && running ) {
 		sout | "ERROR Eager signal" | data.state | endl;
Index: src/tests/concurrent/signal/wait.c
===================================================================
--- src/tests/concurrent/signal/wait.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/concurrent/signal/wait.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -12,4 +12,7 @@
 #include <time>
 
+#define __kick_rate 12000ul
+#include "long_tests.h"
+
 #ifndef PREEMPTION_RATE
 #define PREEMPTION_RATE 10`ms
@@ -20,5 +23,5 @@
 }
 
-#ifdef LONG_TEST
+#ifdef TEST_LONG
 static const unsigned long N = 375_000ul;
 #else
@@ -90,6 +93,7 @@
 // Waiter ABC
 void main( WaiterABC & this ) {
-	for( int i = 0; i < N; i++ ) {
+	for( int i = 0; TEST(i < N); i++ ) {
 		wait( condABC, globalA, globalB, globalC );
+		KICK_WATCHDOG;
 	}
 
@@ -100,6 +104,7 @@
 // Waiter AB
 void main( WaiterAB & this ) {
-	for( int i = 0; i < N; i++ ) {
+	for( int i = 0; TEST(i < N); i++ ) {
 		wait( condAB , globalA, globalB );
+		KICK_WATCHDOG;
 	}
 
@@ -110,6 +115,7 @@
 // Waiter AC
 void main( WaiterAC & this ) {
-	for( int i = 0; i < N; i++ ) {
+	for( int i = 0; TEST(i < N); i++ ) {
 		wait( condAC , globalA, globalC );
+		KICK_WATCHDOG;
 	}
 
@@ -120,6 +126,7 @@
 // Waiter BC
 void main( WaiterBC & this ) {
-	for( int i = 0; i < N; i++ ) {
+	for( int i = 0; TEST(i < N); i++ ) {
 		wait( condBC , globalB, globalC );
+		KICK_WATCHDOG;
 	}
 
Index: c/tests/ifcond.c
===================================================================
--- src/tests/ifcond.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ 	(revision )
@@ -1,47 +1,0 @@
-//
-// 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.
-//
-// ifcond.c --
-//
-// Author           : Peter A. Buhr
-// Created On       : Sat Aug 26 10:13:11 2017
-// Last Modified By : Rob Schluntz
-// Last Modified On : Fri Sep 01 15:22:19 2017
-// Update Count     : 14
-//
-
-#include <fstream>
-
-int f( int r ) { return r; }
-
-int main( void ) {
-	int x = 4, y = 3;
-
-	if ( int x = 1 ) {
-		sout | "x != 0 correct" | endl;
-	} else {
-		sout | "x == 0 incorrect" | endl;
-	} // if
-
-	if ( int x = 4, y = 0 ) {
-		sout | "x != 0 && y != 0 incorrect" | endl;
-	} else if ( int x = 4, y = 1 ) {
-		sout | "x != 0 && y != 0 correct" | endl;
-	} else {
-		sout | "x == 0 || y == 0 incorrect" | endl;
-	} // if
-
-	if ( int x = 5, y = f( x ); x == y ) {
-		sout | "x == y correct" | endl;
-	} else {
-		sout | "x != y incorrect" | endl;
-	} // if
-} // main
-
-// Local Variables: //
-// tab-width: 4 //
-// compile-command: "cfa ifcond.c" //
-// End: //
Index: src/tests/ifwhileCtl.c
===================================================================
--- src/tests/ifwhileCtl.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/tests/ifwhileCtl.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,75 @@
+//
+// 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.
+//
+// ifwhileCtl.c --
+//
+// Author           : Peter A. Buhr
+// Created On       : Sat Aug 26 10:13:11 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Jun  6 17:15:09 2018
+// Update Count     : 21
+//
+
+#include <fstream>
+
+int f( int r ) { return r; }
+
+int main( void ) {
+	int x = 4, y = 3;
+
+	if ( int x = 1 ) {
+		sout | "x != 0 correct" | endl;
+	} else {
+		sout | "x == 0 incorrect" | endl;
+	} // if
+
+	if ( int x = 4, y = 0 ) {
+		sout | "x != 0 && y != 0 incorrect" | endl;
+	} else if ( int x = 4, y = 1 ) {
+		sout | "x != 0 && y != 0 correct" | endl;
+	} else {
+		sout | "x == 0 || y == 0 incorrect" | endl;
+	} // if
+
+	if ( int x = 5, y = f( x ); x == y ) {
+		sout | "x == y correct" | endl;
+	} else {
+		sout | "x != y incorrect" | endl;
+	} // if
+
+	if ( struct S { int i; } s = { 3 }; s.i < 4 ) {
+		S s1;
+		sout | "s.i < 4 correct" | endl;
+	} else {
+		S s1;
+		sout | "s.i >= 4 incorrect" | endl;
+	} // if
+
+	while ( int x = 1 ) {
+		sout | "x != 0 correct" | endl;
+		break;
+	} // while
+
+	while ( int x = 4, y = 0 ) {
+		sout | "x != 0 && y != 0 incorrect" | endl;
+	} // while
+
+	while ( int x = 5, y = f( x ); x == y ) {
+		sout | "x == y correct" | endl;
+		break;
+	} // while
+
+	while ( struct S { int i; } s = { 3 }; s.i < 4 ) {
+		S s1;
+		sout | "s.i < 4 correct" | endl;
+		break;
+	} // while
+} // main
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa ifwhileCtl.c" //
+// End: //
Index: src/tests/long_tests.h
===================================================================
--- src/tests/long_tests.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/tests/long_tests.h	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,21 @@
+#pragma once
+
+#include <unistd.h>
+
+#if   defined(TEST_FOREVER)
+
+static unsigned long long __kick_count = 0;
+#if !defined(__kick_rate)
+#define __kick_rate 5000ul
+#endif
+
+#define TEST(x) 1
+#define KICK_WATCHDOG do { __kick_count++; if(__kick_count > __kick_rate) { write(STDOUT_FILENO, ".", 1); __kick_count = 0; } } while(0)
+
+
+#else
+
+#define TEST(x) x
+#define KICK_WATCHDOG
+
+#endif
Index: src/tests/preempt_longrun/Makefile.am
===================================================================
--- src/tests/preempt_longrun/Makefile.am	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/preempt_longrun/Makefile.am	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -19,9 +19,16 @@
 preempt=10ul\`ms
 debug=-debug
+type=LONG
 
 REPEAT = ${abs_top_srcdir}/tools/repeat
+WATCHDOG = ${abs_top_srcdir}/tools/watchdog
 TIME = /usr/bin/time -f "%E"
 
-BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -O2 -DPREEMPTION_RATE=${preempt} -DLONG_TEST
+# $(shell ./update-type $(type))
+# ./update-type $(type)
+
+UPDATED_TYPE = $(shell ./update-type $(type))
+
+BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -O2 -DPREEMPTION_RATE=${preempt} -I.. -I. -DTEST_$(shell cat .type | tr a-z A-Z)
 CFLAGS = ${BUILD_FLAGS}
 CC = @CFA_BINDIR@/@CFA_NAME@
@@ -29,16 +36,30 @@
 TESTS = block coroutine create disjoint enter enter3 processor stack wait yield
 
-.INTERMEDIATE: ${TESTS}
+# .INTERMEDIATE: ${TESTS}
 
 all-local: ${TESTS:=.run}
 
+runall : ${TESTS:=.run}
+	@ echo "All programs terminated normally"
+
+watchall : ${TESTS:=.watch}
+	@ echo "All programs terminated normally"
+
+compileall : ${TESTS}
+	@ echo "Compiled"
+
 clean-local:
-	rm -f ${TESTS}
+	rm -f ${TESTS} core* out.log .type
 
-% : %.c ${CC}
+% : %.c ${CC} ${UPDATED_TYPE}
 	${AM_V_GEN}${CC} ${CFLAGS} ${<} $(debug) -o ${@}
 
 %.run : % ${REPEAT}
 	@ time ${REPEAT} -r out.log -i -s $(repeats) timeout ${max_time} ./${<}
+	@ rm ${<}
+	@ echo -e "${<}: SUCCESS\n"
+
+%.watch : % ${WATCHDOG}
+	@ time ${WATCHDOG} ./${<}
 	@ rm ${<}
 	@ echo -e "${<}: SUCCESS\n"
@@ -49,4 +70,7 @@
 	@ echo -e "${<}: SUCCESS\n"
 
-${REPEAT}:
+${REPEAT}: ${abs_top_srcdir}/tools/Makefile
 	@+make -C ${abs_top_srcdir}/tools/
+
+${WATCHDOG}: ${abs_top_srcdir}/tools/Makefile
+	@+make -C ${abs_top_srcdir}/tools/
Index: src/tests/preempt_longrun/Makefile.in
===================================================================
--- src/tests/preempt_longrun/Makefile.in	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/preempt_longrun/Makefile.in	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -452,7 +452,13 @@
 preempt = 10ul\`ms
 debug = -debug
+type = LONG
 REPEAT = ${abs_top_srcdir}/tools/repeat
+WATCHDOG = ${abs_top_srcdir}/tools/watchdog
 TIME = /usr/bin/time -f "%E"
-BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -O2 -DPREEMPTION_RATE=${preempt} -DLONG_TEST
+
+# $(shell ./update-type $(type))
+# ./update-type $(type)
+UPDATED_TYPE = $(shell ./update-type $(type))
+BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -O2 -DPREEMPTION_RATE=${preempt} -I.. -I. -DTEST_$(shell cat .type | tr a-z A-Z)
 TESTS = block coroutine create disjoint enter enter3 processor stack wait yield
 all: all-am
@@ -873,12 +879,21 @@
 
 
-.INTERMEDIATE: ${TESTS}
+# .INTERMEDIATE: ${TESTS}
 
 all-local: ${TESTS:=.run}
 
+runall : ${TESTS:=.run}
+	@ echo "All programs terminated normally"
+
+watchall : ${TESTS:=.watch}
+	@ echo "All programs terminated normally"
+
+compileall : ${TESTS}
+	@ echo "Compiled"
+
 clean-local:
-	rm -f ${TESTS}
-
-% : %.c ${CC}
+	rm -f ${TESTS} core* out.log .type
+
+% : %.c ${CC} ${UPDATED_TYPE}
 	${AM_V_GEN}${CC} ${CFLAGS} ${<} $(debug) -o ${@}
 
@@ -888,4 +903,9 @@
 	@ echo -e "${<}: SUCCESS\n"
 
+%.watch : % ${WATCHDOG}
+	@ time ${WATCHDOG} ./${<}
+	@ rm ${<}
+	@ echo -e "${<}: SUCCESS\n"
+
 %.time : % ${REPEAT}
 	@ ${REPEAT} -i -s -- $(repeats) $(TIME) -a -o times.log ./${<}
@@ -893,5 +913,8 @@
 	@ echo -e "${<}: SUCCESS\n"
 
-${REPEAT}:
+${REPEAT}: ${abs_top_srcdir}/tools/Makefile
+	@+make -C ${abs_top_srcdir}/tools/
+
+${WATCHDOG}: ${abs_top_srcdir}/tools/Makefile
 	@+make -C ${abs_top_srcdir}/tools/
 
Index: src/tests/preempt_longrun/create.c
===================================================================
--- src/tests/preempt_longrun/create.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/preempt_longrun/create.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -2,4 +2,6 @@
 #include <thread>
 #include <time>
+
+#include "long_tests.h"
 
 #ifndef PREEMPTION_RATE
@@ -19,6 +21,7 @@
 int main(int argc, char* argv[]) {
 	processor p;
-	for(int i = 0; i < N; i++) {
+	for(int i = 0; TEST(i < N); i++) {
 		worker_t w[7];
+		KICK_WATCHDOG;
 	}
 }
Index: src/tests/preempt_longrun/enter.c
===================================================================
--- src/tests/preempt_longrun/enter.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/preempt_longrun/enter.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -3,4 +3,7 @@
 #include <thread>
 #include <time>
+
+#define __kick_rate 75000ul
+#include "long_tests.h"
 
 #ifndef PREEMPTION_RATE
@@ -15,19 +18,14 @@
 
 monitor mon_t {};
+void foo( mon_t & mutex this ) {
+	KICK_WATCHDOG;
+}
 
 mon_t mon;
-
-void foo( mon_t & mutex this ) {}
-
 thread worker_t {};
-
 void main( worker_t & this ) {
-	for( unsigned long i = 0; i < N; i++ ) {
+	for( unsigned long i = 0; TEST(i < N); i++ ) {
 		foo( mon );
 	}
-}
-
-extern "C" {
-static worker_t * workers;
 }
 
@@ -36,5 +34,4 @@
 	{
 		worker_t w[7];
-		workers = w;
 	}
 }
Index: src/tests/preempt_longrun/enter3.c
===================================================================
--- src/tests/preempt_longrun/enter3.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/preempt_longrun/enter3.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -3,4 +3,7 @@
 #include <thread>
 #include <time>
+
+#define __kick_rate 75000ul
+#include "long_tests.h"
 
 #ifndef PREEMPTION_RATE
@@ -18,10 +21,12 @@
 mon_t mon1, mon2, mon3;
 
-void foo( mon_t & mutex a, mon_t & mutex b, mon_t & mutex c ) {}
+void foo( mon_t & mutex a, mon_t & mutex b, mon_t & mutex c ) {
+	KICK_WATCHDOG;
+}
 
 thread worker_t {};
 
 void main( worker_t & this ) {
-	for( unsigned long i = 0; i < N; i++ ) {
+	for( unsigned long i = 0; TEST(i < N); i++ ) {
 		foo( mon1, mon2, mon3 );
 	}
Index: src/tests/preempt_longrun/processor.c
===================================================================
--- src/tests/preempt_longrun/processor.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/preempt_longrun/processor.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -2,4 +2,8 @@
 #include <thread>
 #include <time>
+
+#include <unistd.h>
+
+#include "long_tests.h"
 
 #ifndef PREEMPTION_RATE
@@ -11,5 +15,5 @@
 }
 
-static const unsigned long N = 5_000ul;
+static const unsigned long N = 50_000ul;
 
 int main(int argc, char* argv[]) {
@@ -18,8 +22,12 @@
 		p[pi] = new();
 	}
-	for ( int i = 0; i < N; i++) {
+	for ( int i = 0; TEST(i < N); i++) {
 		int pi = i % 15;
 		delete( p[pi] );
 		p[pi] = new();
+		KICK_WATCHDOG;
+	}
+	for ( int pi = 0; pi < 15; pi++ ) {
+		delete( p[pi] );
 	}
 }
Index: src/tests/preempt_longrun/stack.c
===================================================================
--- src/tests/preempt_longrun/stack.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/preempt_longrun/stack.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -3,4 +3,7 @@
 #include <thread>
 #include <time>
+
+#define __kick_rate 5000000ul
+#include "long_tests.h"
 
 #ifndef PREEMPTION_RATE
@@ -15,14 +18,17 @@
 
 void main(worker_t & this) {
-	volatile long long p = 5_021_609ul;
-	volatile long long a = 326_417ul;
-	volatile long long n = 1l;
-	for (volatile long long i = 0; i < p; i++) {
-		n *= a;
-		n %= p;
-	}
+	while(TEST(0)) {
+		volatile long long p = 5_021_609ul;
+		volatile long long a = 326_417ul;
+		volatile long long n = 1l;
+		for (volatile long long i = 0; i < p; i++) {
+			n *= a;
+			n %= p;
+			KICK_WATCHDOG;
+		}
 
-	if( n != a ) {
-		abort();
+		if( !TEST(n == a) ) {
+			abort();
+		}
 	}
 }
Index: src/tests/preempt_longrun/update-type
===================================================================
--- src/tests/preempt_longrun/update-type	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ src/tests/preempt_longrun/update-type	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+if [ "$#" -ne 1 ]
+then
+	echo "illegal number of parameters, must be 1 was $#"
+	exit
+fi
+
+NEW="$(echo $1 | tr a-z A-Z)"
+TYPE_FILE=".type"
+if [ -f "$TYPE_FILE" ]
+then
+	OLD="$(cat $TYPE_FILE | tr a-z A-Z)"
+	if [ $OLD == $NEW ]
+	then
+		echo > /dev/null
+		# echo "$TYPE_FILE stayed unchanged"
+	else
+		echo "$NEW" > "$TYPE_FILE"
+		# echo "$TYPE_FILE changed from '$OLD' to '$NEW'"
+	fi
+else
+	echo "$NEW" > "$TYPE_FILE"
+fi
+echo "$TYPE_FILE"
Index: src/tests/preempt_longrun/yield.c
===================================================================
--- src/tests/preempt_longrun/yield.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/preempt_longrun/yield.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -2,4 +2,7 @@
 #include <thread>
 #include <time>
+
+#define __kick_rate 550000ul
+#include "long_tests.h"
 
 #ifndef PREEMPTION_RATE
@@ -11,5 +14,5 @@
 }
 
-#ifdef LONG_TEST
+#ifdef TEST_LONG
 static const unsigned long N = 9_750_000ul;
 #else
@@ -20,6 +23,7 @@
 
 void main(worker_t & this) {
-	for(int i = 0; i < N; i++) {
+	for(int i = 0; TEST(i < N); i++) {
 		yield();
+		KICK_WATCHDOG;
 	}
 }
Index: src/tests/pybin/tools.py
===================================================================
--- src/tests/pybin/tools.py	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/pybin/tools.py	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -83,4 +83,20 @@
 	return sh(cmd)
 
+def which(program):
+    import os
+    def is_exe(fpath):
+        return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
+
+    fpath, fname = os.path.split(program)
+    if fpath:
+        if is_exe(program):
+            return program
+    else:
+        for path in os.environ["PATH"].split(os.pathsep):
+            exe_file = os.path.join(path, program)
+            if is_exe(exe_file):
+                return exe_file
+
+    return None
 ################################################################################
 #               file handling
@@ -219,4 +235,13 @@
 	return False
 
+def fancy_print(text):
+	column = which('column')
+	if column:
+		cmd = "%s 2> /dev/null" % column
+		print(cmd)
+		proc = Popen(cmd, stdin=PIPE, stderr=None, shell=True)
+		proc.communicate(input=text)
+	else:
+		print(text)
 
 settings.set_machine_default( getMachineType )
Index: src/tests/raii/.expect/ctor-autogen-ERR1.txt
===================================================================
--- src/tests/raii/.expect/ctor-autogen-ERR1.txt	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/raii/.expect/ctor-autogen-ERR1.txt	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -1,9 +1,56 @@
-raii/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)
+raii/ctor-autogen.c:102:1 error: Unique best alternative includes deleted identifier in Cast of:
+  Application of
+    Deleted Expression
+      Variable Expression: ?{}: static inline function
+      ... with parameters
+        _dst: reference to instance of struct Managed with body 1 
+        x: signed int
+      ... returning nothing 
 
+      ... deleted by: ?{}: function
+      ... with parameters
+        m: reference to instance of struct Managed with body 1 
+      ... returning nothing 
+      ... with body 
+        CompoundStmt
+          Expression Statement:
+            Application of
+              Variable Expression: ?=?: function
+              ... with parameters
+                intrinsic reference to signed int
+                intrinsic signed int
+              ... returning 
+                _retval__operator_assign: signed int
+                ... with attributes: 
+                  Attribute with name: unused
+
+
+            ... to arguments
+              Cast of:
+                Member Expression, with field: 
+                  x: signed int
+                ... from aggregate: 
+                  Cast of:
+                    Variable Expression: m: reference to instance of struct Managed with body 1 
+                  ... to:
+                    instance of struct Managed with body 1 
+              ... to:
+                reference to signed int
+              Cast of:
+                constant expression (0 0: zero_t)
+              ... to:
+                signed int
+
+            ... with environment:
+              Types:
+              Non-types:
+
+
+  ... to arguments
+    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)
+
+... to: nothing
Index: src/tests/sum.c
===================================================================
--- src/tests/sum.c	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/sum.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -11,6 +11,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Feb 17 11:49:17 2018
-// Update Count     : 273
+// Last Modified On : Sun Jun  3 19:23:41 2018
+// Update Count     : 278
 //
 
@@ -18,8 +18,8 @@
 #include <stdlib>
 
-void ?{}( int & c, zero_t ) { c = 0; }
+void ?{}( int & c, zero_t ) { c = 0; }					// not in prelude
 
 trait sumable( otype T ) {
-	void ?{}( T &, zero_t );							// constructor from 0 literal
+	void ?{}( T &, zero_t );							// 0 literal constructor
 	T ?+?( T, T );										// assortment of additions
 	T ?+=?( T &, T );
@@ -29,7 +29,7 @@
 
 forall( otype T | sumable( T ) )						// use trait
-T sum( unsigned int size, T a[] ) {
-	T total = 0;										// instantiate T from 0 by calling constructor
-	for ( unsigned int i = 0; i < size; i += 1 )
+T sum( size_t size, T a[] ) {
+	T total = 0;										// initialize by 0 constructor
+	for ( size_t i = 0; i < size; i += 1 )
 		total += a[i];									// select appropriate +
 	return total;
@@ -111,8 +111,8 @@
 	for ( int i = 0; i < size; i += 1, v += 1 ) {
 		s += (int)v;
-		gs.x[i] = (int)v;								// set filed array in generic type
+		gs.x[i] = (int)v;								// set field array in generic type
 	} // for
 	sout | "sum from" | low | "to" | High | "is"
-		 | sum( size, gs.x ) | ", check" | (int)s | endl; // add filed array in generic type
+		 | sum( size, gs.x ) | ", check" | (int)s | endl; // add field array in generic type
 } // main
 
Index: src/tests/test.py
===================================================================
--- src/tests/test.py	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ src/tests/test.py	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -277,5 +277,5 @@
 	elif options.list :
 		print("Listing for %s:%s"% (settings.arch.string, settings.debug.string))
-		print("\n".join(map(lambda t: "%s" % (t.toString()), tests)))
+		fancy_print("\n".join(map(lambda t: "%s" % (t.toString()), tests)))
 
 	else :
Index: tools/Makefile.am
===================================================================
--- tools/Makefile.am	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ tools/Makefile.am	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -18,5 +18,5 @@
 CFLAGS = -Wall -Wextra -O2 -g
 
-noinst_PROGRAMS = busy catchsig repeat
+noinst_PROGRAMS = busy catchsig repeat watchdog
 
 busy_SOURCES     = busy.c
@@ -24,2 +24,3 @@
 catchsig_SOURCES = catchsig.c
 repeat_SOURCES   = repeat.c
+watchdog_SOURCES = watchdog.c
Index: tools/Makefile.in
===================================================================
--- tools/Makefile.in	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ tools/Makefile.in	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -92,5 +92,6 @@
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = busy$(EXEEXT) catchsig$(EXEEXT) repeat$(EXEEXT)
+noinst_PROGRAMS = busy$(EXEEXT) catchsig$(EXEEXT) repeat$(EXEEXT) \
+	watchdog$(EXEEXT)
 subdir = tools
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -115,4 +116,7 @@
 repeat_OBJECTS = $(am_repeat_OBJECTS)
 repeat_LDADD = $(LDADD)
+am_watchdog_OBJECTS = watchdog.$(OBJEXT)
+watchdog_OBJECTS = $(am_watchdog_OBJECTS)
+watchdog_LDADD = $(LDADD)
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -143,6 +147,8 @@
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(busy_SOURCES) $(catchsig_SOURCES) $(repeat_SOURCES)
-DIST_SOURCES = $(busy_SOURCES) $(catchsig_SOURCES) $(repeat_SOURCES)
+SOURCES = $(busy_SOURCES) $(catchsig_SOURCES) $(repeat_SOURCES) \
+	$(watchdog_SOURCES)
+DIST_SOURCES = $(busy_SOURCES) $(catchsig_SOURCES) $(repeat_SOURCES) \
+	$(watchdog_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -295,4 +301,5 @@
 catchsig_SOURCES = catchsig.c
 repeat_SOURCES = repeat.c
+watchdog_SOURCES = watchdog.c
 all: all-am
 
@@ -344,4 +351,8 @@
 	$(AM_V_CCLD)$(LINK) $(repeat_OBJECTS) $(repeat_LDADD) $(LIBS)
 
+watchdog$(EXEEXT): $(watchdog_OBJECTS) $(watchdog_DEPENDENCIES) $(EXTRA_watchdog_DEPENDENCIES) 
+	@rm -f watchdog$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(watchdog_OBJECTS) $(watchdog_LDADD) $(LIBS)
+
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -353,4 +364,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/catchsig.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repeat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/watchdog.Po@am__quote@
 
 .c.o:
Index: tools/error.c
===================================================================
--- tools/error.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ tools/error.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,10 @@
+#include <signal.h>
+#include <unistd.h>
+
+int main() {
+	// while(1);
+	sleep(2);
+	// raise(SIGABRT);
+	raise(SIGSEGV);
+	return 0;
+}
Index: tools/prettyprinter/lex.ll
===================================================================
--- tools/prettyprinter/lex.ll	(revision 97397a26b44bae1c0120193fd3d160297ec1db7a)
+++ tools/prettyprinter/lex.ll	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -10,6 +10,6 @@
  * Created On       : Sat Dec 15 11:45:59 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Sun Apr 15 21:28:33 2018
- * Update Count     : 271
+ * Last Modified On : Thu May 31 08:49:58 2018
+ * Update Count     : 274
  */
 
@@ -77,5 +77,5 @@
 }
 
-<INITIAL,C_CODE>"//"[^\n]*"\n" {						// C++ style comments
+<INITIAL,C_CODE>"//"[^\n]* {							// C++ style comments
 #if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
 	cerr << "\"//\"[^\\n]*\"\n\" : " << yytext << endl;
Index: tools/watchdog.c
===================================================================
--- tools/watchdog.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
+++ tools/watchdog.c	(revision b21c77a0e211d9361763565a2eb5ef4330f2957b)
@@ -0,0 +1,175 @@
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <signal.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/select.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+char * this_cmd = NULL;
+
+void parse_args(int argc, char * argv[]);
+int run();
+void printcmd();
+
+int main(int argc, char * argv[]) {
+	parse_args(argc, argv);
+
+	int retcode = run();
+	if( !WIFEXITED(retcode) ) {
+		printf("Child Error : %d ", retcode); printcmd();
+		return retcode;
+	}
+
+	printf("Child exited normally "); printcmd();
+	return 0;
+}
+
+void usage( FILE * out, int code ) {
+	fprintf(out, "%s [OPTION] [--] N CMD\n", this_cmd);
+	fprintf(out, "Run command, killing it if it doesn't print for more than 5 continuous seconds\n\n");
+	fprintf(out, "\t-h,--help\tprint this usage message\n");
+	exit(code);
+}
+
+char ** cmd_to_run = NULL;
+pid_t child_pid = 0;
+int pipe_fds[2];
+
+void arg_error(void) {
+	fprintf(stderr,"\n");
+	usage(stderr, 1);
+}
+
+void parse_args(int argc, char * argv[]) {
+	this_cmd = argv[0];
+
+	enum { Help, };
+	static struct option long_opts[] = {
+		{ "help", no_argument, 0, Help },
+		{ 0, 0, 0, 0 }
+	}; // long_opts
+	int long_index;
+
+	int c;
+	while ( (c = getopt_long( argc, argv, "h", long_opts, &long_index)) != -1 ) {
+		switch ( c ) {
+			case Help:
+			case 'h':
+				usage(stdout, 0);
+				break;
+			default:
+				arg_error();
+				break;
+		} // switch
+	} // while
+
+	if( argc < optind + 1 ) {
+		fprintf(stderr, "Too few arguments\n");
+		arg_error();
+	}
+
+	cmd_to_run = argv + optind;
+}
+
+static void exit_handler (__attribute__((unused)) int a, __attribute__((unused)) void * b) {
+	close(pipe_fds[0]);
+	if(child_pid != 0) kill(child_pid, SIGKILL);
+}
+
+#define checked(call, ...) ({int ret = call(__VA_ARGS__); if (ret == -1) { perror(#call); exit(1); } ret;})
+
+void run_child();
+void make_noblock(int fd);
+void sink(int fd);
+int waitfd(int fd);
+
+int run() {
+	on_exit(exit_handler, NULL);
+	checked(pipe, pipe_fds);
+
+	printf("Watching command: "); printcmd();
+
+	child_pid = checked(fork);
+	if (child_pid == 0) { run_child(); }
+
+	close(pipe_fds[1]);
+	make_noblock(pipe_fds[0]);
+
+	int status;
+	while(waitpid(child_pid, &status, WNOHANG) == 0) {
+		if(waitfd(pipe_fds[0]) == 0) {
+			printf("Child Deadlocked "); printcmd();
+			exit(127);
+		}
+		sink(pipe_fds[0]);
+	}
+
+	child_pid = 0;
+	return status;
+
+	return 0;
+}
+
+void make_noblock(int fd) {
+	int flags = fcntl(fd, F_GETFL);
+	flags |= O_NONBLOCK;
+	fcntl(fd, F_SETFL, flags );
+}
+
+void sink(int fd) {
+	char buff[100];
+	int len = 100;
+	int rv;
+	do {
+		rv = read( fd, buff, len );
+	}
+	while(rv > 0);
+}
+
+int waitfd(int fd) {
+	fd_set set;
+	FD_ZERO(&set);
+	FD_SET(fd, &set);
+
+	struct timeval timeout;
+	timeout.tv_sec = 5;
+	timeout.tv_usec = 0;
+
+	int rv = select(fd + 1, &set, NULL, NULL, &timeout);
+	if(rv == -1) {
+		perror("select\n");
+		exit(1);
+	}
+	return rv;
+}
+
+void run_child() {
+	/* This is the child process. */
+	while ((dup2(pipe_fds[1], STDOUT_FILENO) == -1) && (errno == EINTR));
+
+	close(pipe_fds[1]);
+	close(pipe_fds[0]);
+
+	execvp ( *cmd_to_run, cmd_to_run);
+
+	/* The execvp  function returns only if an error occurs.  */
+	fprintf(stderr, "an error occurred in execvp\n");
+	abort ();
+}
+
+void printcmd() {
+	if(!cmd_to_run) return;
+	char ** cmd = cmd_to_run;
+	while (*cmd) {
+		printf("%s ", *cmd);
+		cmd++;
+	}
+	printf("\n");
+}
