diff --git a/HXQ.cabal b/HXQ.cabal
--- a/HXQ.cabal
+++ b/HXQ.cabal
@@ -1,6 +1,6 @@
 Cabal-Version:       >= 1.2
 Name:                HXQ
-Version:             0.14.0
+Version:             0.15.0
 Synopsis:            A Compiler from XQuery to Haskell
 Description:         
         HXQ is a fast and space-efficient compiler from XQuery (the standard
@@ -65,12 +65,12 @@
 
 Library
   Exposed-Modules:     Text.XML.HXQ.XQuery
-  Other-Modules:       Readline, HXML, DTD, LLParsing, TreeBuild, XMLParse,
-                       ETree, Misc, Tree, XMLScanner, AssocList, PrintXML, XML, Text.XML.HXQ.XTree
+  Other-Modules:       HXML, ETree, Misc, Tree, AssocList, PrintXML, XML, TreeBuild, DTD, XMLScanner, LLParsing, XMLParse,
+                       Readline, Text.XML.HXQ.XTree,
                        Text.XML.HXQ.Functions, Text.XML.HXQ.Compiler, Text.XML.HXQ.Interpreter,
                        Text.XML.HXQ.Optimizer, Text.XML.HXQ.OptionalDB, Text.XML.HXQ.Parser
   hs-source-dirs:      . src src/hxml-0.2
-  Build-Depends:       base, haskell98, array, template-haskell
+  Build-Depends:       base, haskell98, array, regex-base, regex-compat, template-haskell
   ghc-options:         -funfolding-use-threshold=16
   if impl(ghc < 6.10)
      Build-Depends:    readline
@@ -78,12 +78,12 @@
      Build-Depends:    editline
   if flag(mysql)
      Other-Modules:    Text.XML.HXQ.DB, Connect
-     Build-Depends:    HDBC < 1.1.5, HDBC-odbc
+     Build-Depends:    HDBC, HDBC-odbc
      hs-source-dirs:   src/withDB, src/mysql
   else {
   if flag(sqlite)
      Other-Modules:    Text.XML.HXQ.DB, Connect
-     Build-Depends:    HDBC < 1.1.5, HDBC-sqlite3
+     Build-Depends:    HDBC, HDBC-sqlite3
      hs-source-dirs:   src/withDB, src/sqlite
   else
      hs-source-dirs:   src/noDB
@@ -97,11 +97,11 @@
   else
      Build-Depends:    editline
   if flag(mysql)
-     Build-Depends:    HDBC < 1.1.5, HDBC-odbc
+     Build-Depends:    HDBC, HDBC-odbc
      hs-source-dirs:   src/withDB, src/mysql
   else {
   if flag(sqlite)
-     Build-Depends:    HDBC < 1.1.5, HDBC-odbc
+     Build-Depends:    HDBC, HDBC-odbc
      hs-source-dirs:   src/withDB, src/sqlite
   else
      hs-source-dirs:   src/noDB
diff --git a/Main.hs b/Main.hs
--- a/Main.hs
+++ b/Main.hs
@@ -2,7 +2,7 @@
 -
 - The main program of the XQuery interpreter
 - Programmer: Leonidas Fegaras (fegaras@cse.uta.edu)
-- Date: 12/19/2008
+- Date: 01/06/2009
 -
 ---------------------------------------------------------------}
 
@@ -10,12 +10,14 @@
 
 module Main where
 
-import System.Environment
 #if __GLASGOW_HASKELL__ >= 609
 import qualified Control.OldException as C
 #else
 import qualified Control.Exception as C
 #endif
+import List(sort)
+import System.Environment
+import System.CPUTime
 import Text.XML.HXQ.XQuery
 import Text.XML.HXQ.Functions
 import Text.XML.HXQ.Interpreter(evalInput,xqueryE,xfileDB)
@@ -24,7 +26,7 @@
 type E = C.Exception
 
 
-version = "0.14.0"
+version = "0.15.0"
 
 
 parseEnv :: [String] -> [(String,String)]
@@ -34,12 +36,13 @@
 parseEnv ("-o":file:xs) = ("o",file):(parseEnv xs)
 parseEnv ("-db":file:xs) = ("db",file):(parseEnv xs)
 parseEnv ("-v":xs) = ("v",""):(parseEnv xs)
+parseEnv ("-t":xs) = ("t",""):(parseEnv xs)
 parseEnv ("-p":query:file:xs) = ("p","doc('"++file++"')"++query):(parseEnv xs)
 parseEnv (('-':x):_) = error ("Unrecognized option -"++x++". Use -help.")
 parseEnv (file:xs) = ("r",file):(parseEnv xs)
 
 
-noDBerror = error "Missing Database Connection; use -db in xquery"
+noDBerror = error "Missing Database Connection; use the option -db in xquery"
 
 
 main = do senv <- getArgs
@@ -48,20 +51,23 @@
               Just hxq_path = lookup "hxq" env
               Just dbname = lookup "db" env
               verbose = case lookup "v" env of Nothing -> False; _ -> True
+              timing = case lookup "t" env of Nothing -> False; _ -> True
+              putTime t = if timing then putStrLn $ "Evaluation time: "++show (div t (10^9))++" milliseconds" else return ()
           case lookup "help" env of
             Just _ -> do putStrLn ("HXQ: XQuery Interpreter version "++version++".")
                          putStrLn "Command line options and files:"
                          putStrLn "   xquery-file               evaluate the XQuery in xquery-file using the interpreter"
-                         putStrLn "   -db file-path             use the relational database in file-path during querying"
+                         putStrLn "   -db database              use the relational the database during querying"
                          putStrLn "   -c xquery-file            compile the XQuery in xquery-file into Haskell code"
                          putStrLn "   -o haskell-file           set the Haskell file for -c (default is Temp.hs)"
                          putStrLn "   -p XPath-query xml-file   interpret the XPath query against the xml-file"
-                         putStrLn "   -v                        verbose information"
+                         putStrLn "   -v                        print verbose information (AST and optimized plan)"
+                         putStrLn "   -t                        print timing information"
                          putStrLn "Without an xquery-file, it reads and evaluates the input using the HXQ interpreter."
                          putStrLn "   The input may be an XQuery or a 'declare variable' or a 'declare function'."
-                         putStrLn "   To write an XQuery in multiple lines, wrap it in {}"
-                         putStrLn ("Functions:  "++(foldr (\(f,_,_) r -> f++" "++r) "" systemFunctions))
-                         putStrLn ("Path Steps:  "++(foldr (\(f,_) r -> f++" "++r) "" pathFunctions))
+                         putStrLn "   To write an XQuery in multiple lines, wrap it in {}."
+                         putStrLn $ "Functions (name/arity):  " ++ (unwords $ sort $ map (\(f,c,_) -> f++"/"++show c) systemFunctions)
+                         putStrLn $ "Path Steps:  " ++ (unwords $ map fst pathFunctions)
             _ -> case lookup "c" env of
                    Just file -> do query <- readFile file
                                    let qf = map (\c -> if c=='\"' then '\'' else c)
@@ -76,27 +82,42 @@
                    _ -> case lookup "r" env of
                           Just file -> case lookup "db" env of
                                          Just filepath -> do db <- connect filepath
+                                                             t1 <- getCPUTime
                                                              result <- xfileDB file db
-                                                             commit db
                                                              putXSeq result
+                                                             t2 <- getCPUTime
+                                                             putTime (t2-t1)
+                                                             commit db
                                          _ -> do query <- readFile file
+                                                 t1 <- getCPUTime
                                                  (result,_,_) <- xqueryE query [] [] noDBerror verbose
                                                  putXSeq result
+                                                 t2 <- getCPUTime
+                                                 putTime (t2-t1)
                           _ -> case lookup "p" env of
-                                 Just query -> do (result,_,_) <- xqueryE query [] [] noDBerror verbose
+                                 Just query -> do t1 <- getCPUTime
+                                                  (result,_,_) <- xqueryE query [] [] noDBerror verbose
                                                   putXSeq result
+                                                  t2 <- getCPUTime
+                                                  putTime (t2-t1)
                                  _ -> do putStrLn ("HXQ: XQuery Interpreter version "++version++". Use -help for help.")
                                          case lookup "db" env of
                                            Just filepath
                                                -> do db <- connect filepath
-                                                     evalInput (\s vs fs-> C.catch
-                                                                          (do (result,nvs,nfs) <- xqueryE s vs fs db verbose
+                                                     evalInput (\s vs fs -> C.catch
+                                                                          (do t1 <- getCPUTime
+                                                                              (result,nvs,nfs) <- xqueryE s vs fs db verbose
                                                                               putXSeq result
+                                                                              t2 <- getCPUTime
+                                                                              putTime (t2-t1)
                                                                               commit db
                                                                               return (nvs,nfs))
                                                                           (\e -> do putStrLn (show (e::E)); return (vs,fs))) [] []
                                            _ -> evalInput (\s vs fs-> C.catch
-                                                                      (do (result,nvs,nfs) <- xqueryE s vs fs noDBerror verbose
+                                                                      (do t1 <- getCPUTime
+                                                                          (result,nvs,nfs) <- xqueryE s vs fs noDBerror verbose
                                                                           putXSeq result
+                                                                          t2 <- getCPUTime
+                                                                          putTime (t2-t1)
                                                                           return (nvs,nfs))
                                                                       (\e -> do putStrLn (show (e::E)); return (vs,fs))) [] []
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,4 @@
+# the database driver must be mysql, sqlite, or nodb
 driver = mysql
 
 ifeq (${driver},mysql)
@@ -12,7 +13,7 @@
 ghc = ghc -O2 -funfolding-use-threshold=16 ${args}
 src = * src/hxml-0.2/* src/noDB/Text/XML/HXQ/* src/withDB/Text/XML/HXQ/* src/* src/Text/XML/HXQ/* src/mysql/* src/sqlite/*
 
-# xquery interpreter
+# build the xquery interpreter
 all:    $(parser) Main.hs
 	$(ghc) --make Main.hs -o xquery
 
@@ -26,12 +27,12 @@
 
 test2:  $(parser) Test2.hs
 	$(ghc) --make Test2.hs -o a.out
-	time ./a.out +RTS -H2m
+	time ./a.out +RTS -H2m -M3.2m
 
 # uses quasi-quotes (for ghc >= 6.9 only)
 test2a: $(parser) Test2a.hs
 	$(ghc) --make Test2a.hs -o a.out
-	time ./a.out +RTS -H2m
+	time ./a.out +RTS -H2m -M3.2m
 
 test3:  $(parser) TestDB.hs
 	$(ghc) --make TestDB.hs -o a.out
@@ -41,10 +42,12 @@
 	$(ghc) --make TestDB2.hs -o a.out
 	./a.out
 
+# extract the structural summary of dblp.xml
 dblp1:  $(parser) TestDBLP1.hs
 	$(ghc) --make TestDBLP1.hs -o a.out
 	./a.out +RTS -H200m -K100m
 
+# store dblp.xml into a MySQL database
 dblp2:  $(parser) TestDBLP2.hs
 	$(ghc) --make TestDBLP2.hs -o a.out
 	./a.out
@@ -53,6 +56,10 @@
 ghci:   $(parser)
 	ghci -fth ${args} Main.hs
 
+# run multiple tests
+test:   $(parser) data/test.xq
+	./xquery data/test.xq | diff - data/test-results.txt
+
 # heap profiling
 profile: $(parser) Test2.hs
 	ghc -O2 -funfolding-use-threshold=16 -isrc -isrc/hxml-0.2 -isrc/noDB --make Test2.hs -o a.out
@@ -68,7 +75,7 @@
 	runhaskell Setup.lhs sdist
 
 clean:
-	/bin/rm -f xquery hxqc Temp.hs a.out $(addsuffix .hi,$(src)) $(addsuffix .o,$(src)) $(addsuffix .p_o,$(src))
+	/bin/rm -f xquery Temp.hs a.out $(addsuffix .hi,$(src)) $(addsuffix .o,$(src)) $(addsuffix .p_o,$(src))
 
 distclean: clean
 	runhaskell Setup.lhs clean
diff --git a/Test1.hs b/Test1.hs
--- a/Test1.hs
+++ b/Test1.hs
@@ -16,24 +16,24 @@
 
 f(d,s) = $(xq "<student dept='{$d/text()}'>{$s//firstname/text(),$s//lastname/text()}</student>")
 
-main = do a <- $(xq ("  for $s in doc('data/cs.xml')//gradstudent          "
-                ++"     order by $s/gpa descending, $s//lastname           "
-                ++"     return <student>{$s//firstname/text(),             "
-                ++"                      $s//lastname/text(),              "
-                ++"                      $s/gpa/text()}</student>          "))
+main = do a <- $(xq "  for $s in doc('data/cs.xml')//gradstudent           \
+                  \     order by $s/gpa descending, $s//lastname           \
+                  \     return <student>{$s//firstname/text(),             \
+                  \                      $s//lastname/text(),              \
+                  \                      $s/gpa/text()}</student>          ")
           putXSeq a
           let query name = $(xq " doc('data/cs.xml')//gradstudent[.//lastname = $name]//firstname ")
           b <- query $(xe " 'Galanis' ")
           putXSeq b
-          c <- $(xq ("  <good-students>{                                   "
-                  ++"       let $d := doc('data/cs.xml')                   "
-                  ++"       for $s in $d//gradstudent                      "
-                  ++"       where $s/gpa = 4.0                             "
-                  ++"       return f($d//deptname,$s)                      "
-                  ++"   }</good-students>                                  "))
+          c <- $(xq "  <good-students>{                                    \
+                    \       let $d := doc('data/cs.xml')                   \
+                    \       for $s in $d//gradstudent                      \
+                    \       where $s/gpa = 4.0                             \
+                    \       return f($d//deptname,$s)                      \
+                    \   }</good-students>                                  ")
           putXSeq c
-          d <- $(xq ("    let $d := doc('data/cs.xml')//gradstudent  "
-                   ++"    return ($d/../deptname,count($d))          "))
+          d <- $(xq "    let $d := doc('data/cs.xml')//gradstudent         \
+                    \    return ($d/../deptname,count($d))                 ")
           putXSeq d
           putStrLn "Type an XQuery:"
           iquery <- getLine        -- read an XQuery from input
diff --git a/Test2.hs b/Test2.hs
--- a/Test2.hs
+++ b/Test2.hs
@@ -15,11 +15,11 @@
 import Text.XML.HXQ.XQuery
 
 
-main = do a <- $(xq ("<result>{                                                               "
-                 ++"     for $x at $i in doc('data/dblp.xml')//inproceedings                  "
-                 ++"     where $x/author = 'Leonidas Fegaras'                                 "
-                 ++"     return <paper>{ $i, $x/booktitle/text(),                             "
-                 ++"                     ':', $x/title/text()                                 "
-                 ++"            }</paper>                                                     "
-                 ++"  }</result>                                                              "))
+main = do a <- $(xq "<result>{                                                                \
+                 \       for $x at $i in doc('data/dblp.xml')//inproceedings                  \
+                 \       where $x/author = 'Leonidas Fegaras'                                 \
+                 \       return <paper>{ $i, $x/booktitle/text(),                             \
+                 \                       ':', $x/title/text()                                 \
+                 \              }</paper>                                                     \
+                 \    }</result>                                                              ")
           putXSeq a
diff --git a/TestDB.hs b/TestDB.hs
--- a/TestDB.hs
+++ b/TestDB.hs
@@ -16,10 +16,10 @@
 
 
 main = do db <- connect "hxq"
-          e <- $(xqdb ("  for $r in sql('  select e.fname, d.dname          "
-                     ++"                   from employee e, department d    "
-                     ++"                   where e.dno = d.dnumber          "
-                     ++"                     and e.lname = ?           ',   "
-                     ++"                'English')                          "
-                     ++"  return <result>{$r/fname,$r/dname}</result>       ")) db
+          e <- $(xqdb ("  for $r in sql('  select e.fname, d.dname          \
+                     \                     from employee e, department d    \
+                     \                     where e.dno = d.dnumber          \
+                     \                       and e.lname = ?           ',   \
+                     \                  'English')                          \
+                     \    return <result>{$r/fname,$r/dname}</result>       ")) db
           putXSeq e
diff --git a/TestDB2.hs b/TestDB2.hs
--- a/TestDB2.hs
+++ b/TestDB2.hs
@@ -15,7 +15,7 @@
 
 
 main = do db <- connect "hxq"
-          res <- $(xqdb ("    for $s in publish('hxq','c')//gradstudent    "
-                         ++ " where $s//lastname='Galanis'                 "
-                         ++ " return $s//gpa      ")) db
+          res <- $(xqdb ("    for $s in publish('hxq','c')//gradstudent    \
+                         \    where $s//lastname='Galanis'                 \
+                         \    return $s//gpa      ")) db
           putXSeq res
diff --git a/XQueryParser.y b/XQueryParser.y
--- a/XQueryParser.y
+++ b/XQueryParser.y
@@ -4,7 +4,7 @@
 - Programmer: Leonidas Fegaras
 - Email: fegaras@cse.uta.edu
 - Web: http://lambda.uta.edu/
-- Creation: 02/15/08, last update: 11/27/08
+- Creation: 02/15/08, last update: 01/07/09
 - 
 - Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved.
 - This material is provided as is, with absolutely no warranty expressed or implied.
@@ -14,7 +14,7 @@
 --------------------------------------------------------------------------------------}
 
 {
-module Text.XML.HXQ.Parser where
+module Text.XML.HXQ.Parser(Ast(..),scan,parse,call,concatenateAll,ppAst) where
 import Char
 }
 
@@ -96,15 +96,19 @@
 	'into'		{ INTO }
 	'from'		{ FROM}
 	'with'		{ WITH }
+        'instance'      { INSTANCE }
+        'of'            { OF }
+        '?'             { QMARK }
 	'Variable' 	{ Variable $$ }
 	'XMLtext' 	{ XMLtext $$ }
 	'Integer' 	{ TInteger $$ }
 	'Double' 	{ TFloat $$ }
 	'String' 	{ TString $$ }
+	'EOF' 	        { TokenEOF }
 
 
 %nonassoc	'for' 'let' 'satisfies' 'return'
-%nonassoc	'with' 'from' 'into' 'as'
+%nonassoc	'with' 'from' 'into' 'as' 'instance' 'of'
 %nonassoc	'else'
 %left		'intersect' 'union' 'except'
 %right		'or'
@@ -118,6 +122,9 @@
 
 
 %%
+main           :: { [ Ast ] }
+main            :   prog 'EOF'                         { $1 }
+
 prog           :: { [ Ast ] }
 prog            :   def                                { [$1] }
                 |   def 'XMLtext'                      { [$1] }
@@ -146,8 +153,10 @@
 type           ::  { String }
 type            :  qname                                { $1 }
                 |  qname '(' ')'                        { $1 }
+                |  'element' '(' ')'                    { "element" }
                 |  type '+'                             { $1 }
                 |  type '*'                             { $1 }
+                |  type '?'                             { $1 }
 
 var            :: { Ast }
 var		:   'Variable' 				{ Avar $1 }
@@ -191,6 +200,7 @@
 		|   expr 'union' expr			{ call "union" [$1,$3] }
 		|   expr 'intersect' expr		{ call "intersect" [$1,$3] }
 		|   expr 'except' expr			{ call "except" [$1,$3] }
+                |   expr 'instance' 'of' type           { call "instance-of" [$1,Astring $4] }
 		|   '+' expr       %prec UMINUS		{ call "uplus" [$2] }
 		|   '-' expr       %prec UMINUS		{ call "uminus" [$2] }
 		|   'not' expr     %prec UMINUS		{ call "not" [$2] }
@@ -246,18 +256,18 @@
 		|   'attribute' '(' qname ')'		{ call "attribute" [Avar $3] }
 
 element        :: { Ast }
-element		:   stag '>' content '</' qname '>'	{ if head $1 == Astring $5
-						  	     then Ast "element_construction" ($1++[Ast "append" $3])
+element         :   stag '>' content '</' qname '>'     { if head $1 == Astring $5
+                                                             then Ast "element_construction" ($1++[Ast "append" $3])
                                                           else parseError [TError ("Unmatched tags in element construction: "
                                                                                    ++(show (head $1))++" '"++$5++"'")] }
-                |   stag '>' '</' qname '>'		{ if head $1 == Astring $4
-							     then Ast "element_construction" ($1++[Ast "append" []])
+                |   stag '>' '</' qname '>'             { if head $1 == Astring $4
+                                                             then Ast "element_construction" ($1++[Ast "append" []])
                                                           else parseError [TError ("Unmatched tags in element construction: "
                                                                                    ++(show (head $1))++" '"++$4++"'")] }
-                |   stag '/>'     			{ Ast "element_construction" ($1++[Ast "append" []]) }
-                |   'element' '{' expr '}' '{' expl '}'	{ Ast "element_construction" [$3,Ast "attributes" [],concatenateAll $6] }
+                |   stag '/>'                           { Ast "element_construction" ($1++[Ast "append" []]) }
+                |   'element' '{' expr '}' '{' expl '}' { Ast "element_construction" [$3,Ast "attributes" [],concatenateAll $6] }
                 |   'attribute' '{' expr '}''{' expl '}'{ Ast "attribute_construction" [$3,concatenateAll $6] }
-                |   'element' qname '{' expl '}'	{ Ast "element_construction" [Astring $2,Ast "attributes" [],concatenateAll $4] }
+                |   'element' qname '{' expl '}'        { Ast "element_construction" [Astring $2,Ast "attributes" [],concatenateAll $4] }
                 |   'attribute' qname '{' expl '}'      { Ast "attribute_construction" [Astring $2,concatenateAll $4] }
 
 stag           :: { [ Ast ] }
@@ -275,7 +285,8 @@
 		|   content element			{ $1++[$2] }
 
 string         :: { Ast }
-string          : stringc                               { if length $1 == 1 then head $1 else Ast "append" $1 }
+string          : stringc                               { if length $1 == 0 then Astring ""
+                                                          else if length $1 == 1 then head $1 else Ast "append" $1 }
 
 stringc        :: { [Ast] }
 stringc         :   'String'                            { if $1=="" then [] else [Astring $1] }
@@ -300,7 +311,7 @@
 step           :: { Ast -> Ast }
 step            :   '/' simple_step predicates          { \e -> $2 "child" e $3 }
                 |   '/' '@' simple_step predicates      { \e -> $3 "attribute" e $4 }
-                |   '/' '/' simple_step predicates      { \e -> $3 "descendant-or-self" e $4 }
+                |   '/' '/' simple_step predicates      { \e -> $3 "descendant" e $4 }
                 |   '/' '/' '@' simple_step predicates  { \e -> $4 "attribute-descendant" e $5 }
                 |   '/' '..'                            { \e -> Ast "step" [Avar "parent",Astring "*",e] }
 
@@ -405,13 +416,13 @@
 
 data Token
   = RETURN | SOME | EVERY | IF | THEN | ELSE | LB | RB | LP | RP | LSB | RSB
-  | TO | PLUS | MINUS | TIMES | DIV | IDIV | MOD | AS
+  | TO | PLUS | MINUS | TIMES | DIV | IDIV | MOD | AS | QMARK
   | TEQ | TNE | TLT | TLE | TGT | TGE | SEQ | SNE | SLT | SLE | SGT | SGE
   | AND | OR | NOT | UNION | INTERSECT | EXCEPT | FOR | LET | IN | COMMA
   | ASSIGN | WHERE | ORDER | BY | ASCENDING | DESCENDING | ELEMENT
   | ATTRIBUTE | STAG | ETAG | SATISFIES | ATSIGN | SLASH | DECLARE | SEMI | COLON
   | FUNCTION | VARIABLE | AT | DOT | DOTS | TokenEOF | PRE | POST | IS
-  | INSERT | INTO | DELETE | FROM | REPLACE | WITH
+  | INSERT | INTO | DELETE | FROM | REPLACE | WITH | INSTANCE | OF
   | QName String | Variable String | XMLtext String | TInteger Int
   | TFloat Float | TString String | TError String
     deriving Eq
@@ -430,9 +441,21 @@
                      _ -> "Illegal token"
 
 
+printToken (QName s) = s
+printToken (Variable s) = "$"++s
+printToken (XMLtext s) = "'"++s++"'"
+printToken (TInteger n) = show n
+printToken (TFloat n) = show n
+printToken (TString s) = "\""++s++"\""
+printToken (TError s) = "error("++s++")"
+printToken t = case filter (\(n,_) -> n==t) tokenList of
+           (_,b):_ -> b
+           _ -> "Illegal token"
+
+
 tokenList :: [(Token,String)]
-tokenList = [(RETURN,"return"),(SOME,"some"),(EVERY,"every"),(IF,"if"),(THEN,"then"),(ELSE,"else"),
-             (LB,"["),(RB,"]"),(LP,"("),(RP,")"),(LSB,"{"),(RSB,"}"),
+tokenList = [(TokenEOF,"EOF"),(RETURN,"return"),(SOME,"some"),(EVERY,"every"),(IF,"if"),(THEN,"then"),(ELSE,"else"),
+             (LB,"["),(RB,"]"),(LP,"("),(RP,")"),(LSB,"{"),(RSB,"}"),(QMARK,"?"),
              (TO,"to"),(PLUS,"+"),(MINUS,"-"),(TIMES,"*"),(DIV,"div"),(IDIV,"idiv"),(MOD,"mod"),
              (TEQ,"="),(TNE,"!="),(TLT,"<"),(TLE,"<="),(TGT,">"),(TGE,">="),(PRE,"<<"),(POST,">>"),
              (IS,"is"),(SEQ,"eq"),(SNE,"ne"),(SLT,"lt"),(SLE,"le"),(SGT,"gt"),(SGE,"ge"),(AND,"and"),
@@ -442,12 +465,13 @@
              (ATTRIBUTE,"attribute"),(STAG,"</"),(ETAG,"/>"),(SATISFIES,"satisfies"),(ATSIGN,"@"),
              (SLASH,"/"),(DECLARE,"declare"),(FUNCTION,"function"),(VARIABLE,"variable"),
   	     (INSERT,"insert"),(INTO,"into"),(DELETE,"delete"),(FROM,"from"),(REPLACE,"replace"),(WITH,"with"),
-             (AT,"at"),(DOTS,".."),(DOT,"."),(SEMI,";"),(COLON,":")]
+             (AT,"at"),(DOTS,".."),(DOT,"."),(SEMI,";"),(COLON,":"),(INSTANCE,"instance"),(OF,"of")]
 
 
 parseError tk = error (case tk of
                          ((TError s):_) -> "Parse error: "++s
-                         _ -> "Parse error: "++(foldr (\a r -> (show a)++" "++r) "" (take 20 tk)))
+                         (TokenEOF:_) -> "Parse error: Unexpected end of file"
+		         _ -> "Parse error: "++(foldr (\a r -> (printToken a)++" "++r) "" (init (take 11 tk))))
 
 
 scan :: String -> [Token]
@@ -497,7 +521,7 @@
 
 -- the XQuery scanner
 lexer :: String -> String -> [Token]
-lexer [] "" = []
+lexer [] "" = [ TokenEOF ]
 lexer [] _ = [ TError "Unexpected end of input" ]
 lexer (' ':'>':' ':cs) n = TGT : lexer cs n
 lexer (c:cs) n
@@ -543,6 +567,7 @@
                      _ -> TGT : lexer cs m
 lexer (',':cs) n = COMMA : lexer cs n
 lexer ('@':cs) n = ATSIGN : lexer cs n
+lexer ('?':cs) n = QMARK : lexer cs n
 lexer ('/':cs) n = SLASH : lexer cs n
 lexer ('{':cs) n = LSB : lexer cs ('{':n)
 lexer ('|':cs) n = UNION : lexer cs n
@@ -570,7 +595,8 @@
 lexString ('\'':cs) s m = case m of
                             '\'':n -> (TString s) : (lexer cs n)
                             _ -> lexString cs (s++"\'") m
-lexString ('{':cs) s n = (TString s) : LSB : (lexer cs ('{':n))
+-- a string in an attribute value must evaluate between {}
+lexString ('{':cs) s (c:'<':n) = (TString s) : LSB : (lexer cs ('{':c:'<':n))
 lexString ('\\':'n':cs) s n = lexString cs (s++['\n']) n
 lexString ('\\':'r':cs) s n = lexString cs (s++['\r']) n
 lexString (c:cs) s n = lexString cs (s++[c]) n
@@ -638,6 +664,8 @@
 	  "from" -> FROM
 	  "replace" -> REPLACE
 	  "with" -> WITH
+          "instance" -> INSTANCE
+          "of" -> OF
           var -> QName var
        ) : lexer rest n
 }
diff --git a/compile b/compile
--- a/compile
+++ b/compile
@@ -2,4 +2,4 @@
 
 xquery -c $1
 if [$2 == ""]; then file="a.out"; else file=$2; fi
-ghc -O2 -v0 --make Temp.hs -o $file
+ghc -O2 -v0 -funfolding-use-threshold=16 --make Temp.hs -o $file
diff --git a/compile.bat b/compile.bat
--- a/compile.bat
+++ b/compile.bat
@@ -10,4 +10,4 @@
 :Exit
 set FILE="a.exe"
 :End
-ghc -O2 -v0 --make Temp.hs -o %FILE%
+ghc -O2 -v0 -funfolding-use-threshold=16 --make Temp.hs -o %FILE%
diff --git a/data/test-results.txt b/data/test-results.txt
--- a/data/test-results.txt
+++ b/data/test-results.txt
@@ -1,177 +1,170 @@
 Query 1:
-10
+ 10 
  Query 2:
-100
+ 100 
  Query 3:
-1 2 3
+ 1 2 3 
  Query 4:
-1 2 3
+ 1 2 3 
  Query 5:
-4 5 6 7 8 9
+ 4 5 6 7 8 9 
  Query 6:
-<a>12<b>4 4518</b></a>
+<a>12<b>4 4518</b></a> 
  Query 7:
-<a x="12 534"/>
+<a x="12 534"/> 
  Query 8:
-100
+ 100 
  Query 9:
-5050.0
+ 5050.0 
  Query 10:
-50.5
+ 50.5 
  Query 11:
-true
+ true 
  Query 12:
- 
+ false 
  Query 13:
-6
+ 6 
  Query 14:
-<z><a>1</a><a>2</a><a>3</a></z>
+<z><a>1</a><a>2</a><a>3</a></z> 
  Query 15:
-3 4
+ 3 4 
  Query 20:
-5 6 6 7 7 8
+ 5 6 6 7 7 8 
  Query 21:
-<a>1 4</a><a>1 5</a><a>2 4</a><a>2 5</a><a>3 4</a><a>3 5</a>
+<a>1 4</a><a>1 5</a><a>2 4</a><a>2 5</a><a>3 4</a><a>3 5</a> 
  Query 24:
-<b>1</b><b>2</b>
+<b>1</b><b>2</b> 
  Query 24.1:
-<b>1</b>
+<b>1</b> 
  Query 25:
-<a><b>2</b></a>
+<a><b>2</b></a> 
  Query 27:
-<a>11 12 23 24</a>
+<a>11 12 23 24</a> 
  Query 28:
-<a>1 2</a>
+<a>1 2</a> 
  Query 29:
-58
+ 58 
  Query 30:
-29
+ 29 
  Query 31:
-1
+ 1 
  Query 32:
-3628800
+ 3628800 
  Query 33:
-<a>1</a><a>2</a><a>3</a>
+<a>1</a><a>2</a><a>3</a> 
  Query 34:
-aa
+ x="aa" 
  Query 35:
-aa bb cc
+ aa bb cc 
  Query 36:
-aa bb cc aa
+ x y v 
  Query 37:
 <b>
    <d>K6</d> 
    <c>test6</c> 
    <c>test22</c> 
- </b>
+ </b> 
  Query 38:
-<d>4</d><d>5</d>
+<d>4</d><d>5</d> 
  Query 39:
-<n>title</n>
+<n>title</n> 
  Query 40:
-<c>test4</c><c>test5</c>
+<c>test4</c><c>test5</c> 
  Query 40.1:
-<c v="aa">test1</c><c>test2</c><c>test3</c><c>test4</c><c>test5</c>
+<c v="aa">test1</c><c>test2</c><c>test3</c><c>test4</c><c>test5</c> 
  Query 41:
-<d>K3</d>
+<d>K3</d> 
  Query 42:
 <b>
    <d>K3</d> 
    <c>test3</c> 
- </b>
+ </b> 
  Query 43:
 <b>
    <d>K3</d> 
    <c>test3</c> 
- </b>
+ </b> 
  Query 44:
-test1 test12 test13
+ test1 test12 test13 
  Query 45:
-<c>test3</c>
+<c>test3</c> 
  Query 46:
-<c>test3</c>
+<c>test3</c> 
  Query 47:
-<c>test3</c>
+<c>test3</c> 
  Query 48:
-<d>K3</d><c>test3</c>
+<d>K3</d><c>test3</c> 
  Query 49:
-<d>K3</d>
+<d>K3</d> 
  Query 50:
-<c>test3</c>
+<c>test3</c> 
  Query 51:
-<b>
-   <d>K3</d> 
-   <c>test3</c> 
- </b><d>K3</d><c>test3</c>
+<d>K3</d><c>test3</c> 
  Query 52:
-<b>
-   <d>4</d> 
-   <c>test4</c> 
-   <e><x><y>NN</y> AA</x> BB<x>CC</x></e> 
- </b><d>4</d><c>test4</c><e><x><y>NN</y> AA</x> BB<x>CC</x></e><x><y>NN</y> AA</x><y>NN</y><x>CC</x>
+<d>4</d><c>test4</c><e><x><y>NN</y> AA</x> BB<x>CC</x></e><x><y>NN</y> AA</x><y>NN</y><x>CC</x> 
  Query 53:
-<c>test1</c><c>test12</c><c>test13</c><c>test2</c><c>test3</c><c>test4</c><c>test5</c><c>test6</c><c>test22</c>
+<c>test1</c><c>test12</c><c>test13</c><c>test2</c><c>test3</c><c>test4</c><c>test5</c><c>test6</c><c>test22</c> 
  Query 54:
-<c>test1</c><c>test12</c><c>test13</c><d>K1</d><c>test2</c><d>K2</d><c>test3</c><d>K3</d><c>test4</c><d>K4</d><c>test5</c><d>K5</d><c>test6</c><c>test22</c><d>K6</d>
+<c>test1</c><c>test12</c><c>test13</c><d>K1</d><c>test2</c><d>K2</d><c>test3</c><d>K3</d><c>test4</c><d>K4</d><c>test5</c><d>K5</d><c>test6</c><c>test22</c><d>K6</d> 
  Query 55:
-<c v="aa">test1</c><c>test2</c><c>test3</c><c>test4</c><c>test5</c>
+<c>test4</c><c>test5</c> 
  Query 56:
 <b>
    <d>K3</d> 
    <c>test3</c> 
- </b>
+ </b> 
  Query 57:
 <b>
    <d>K6</d> 
    <c>test6</c> 
    <c>test22</c> 
- </b>
+ </b> 
  Query 58:
-<d>K3</d><d>K3</d>
+<d>K3</d><d>K3</d> 
  Query 59:
-<d>K3</d> @
+<d>K3</d> @ 
  Query 60:
-<d>K3</d> @
+<d>K3</d> @ 
  Query 61:
-4
+ 4 
  Query 62:
-4
+ 4 
  Query 63:
-<a><c>test1</c><c>test12</c><c>test13</c><c>test2</c><c>test3</c><c>test4</c><c>test5</c><c>test6</c><c>test22</c> 1 2 3</a>
+<a><c>test1</c><c>test12</c><c>test13</c><c>test2</c><c>test3</c><c>test4</c><c>test5</c><c>test6</c><c>test22</c> 1 2 3</a> 
  Query 64:
-<result><d>K3</d></result>
+<result><d>K3</d></result> 
  Query 65:
-<k><d>K1</d><c>test1</c><d>K1</d></k><k><d>K1</d><c>test12</c><d>K1</d></k><k><d>K1</d><c>test13</c><d>K1</d></k><k><d>K2</d><c>test2</c><d>K2</d></k><k><d>K3</d><c>test3</c><d>K3</d></k><k><d>K4</d><c>test4</c><d>K4</d></k><k><d>K5</d><c>test5</c><d>K5</d></k><k><d>K6</d><c>test6</c><d>K6</d></k><k><d>K6</d><c>test22</c><d>K6</d></k>
+<k><d>K1</d><c>test1</c><d>K1</d></k><k><d>K1</d><c>test12</c><d>K1</d></k><k><d>K1</d><c>test13</c><d>K1</d></k><k><d>K2</d><c>test2</c><d>K2</d></k><k><d>K3</d><c>test3</c><d>K3</d></k><k><d>K4</d><c>test4</c><d>K4</d></k><k><d>K5</d><c>test5</c><d>K5</d></k><k><d>K6</d><c>test6</c><d>K6</d></k><k><d>K6</d><c>test22</c><d>K6</d></k> 
  Query 66:
-<k><c>test1</c><d>K1</d></k><k><c>test12</c><d>K1</d></k><k><c>test13</c><d>K1</d></k><k><c>test2</c><d>K2</d></k><k><c>test3</c><d>K3</d></k><k><c>test4</c><d>K4</d></k><k><c>test5</c><d>K5</d></k><k><c>test6</c><d>K6</d></k><k><c>test22</c><d>K6</d></k>
+<k><c>test1</c><d>K1</d></k><k><c>test12</c><d>K1</d></k><k><c>test13</c><d>K1</d></k><k><c>test2</c><d>K2</d></k><k><c>test3</c><d>K3</d></k><k><c>test4</c><d>K4</d></k><k><c>test5</c><d>K5</d></k><k><c>test6</c><d>K6</d></k><k><c>test22</c><d>K6</d></k> 
  Query 67:
-<result><a><c>test1</c><c>test12</c><c>test13</c><d>K1</d></a><a><c>test2</c><d>K2</d></a><a><c>test3</c><d>K3</d></a><a><c>test4</c><d>K4</d></a><a><c>test5</c><d>K5</d></a><a><c>test6</c><c>test22</c><d>K6</d></a></result>
+<result><a><c>test1</c><c>test12</c><c>test13</c><d>K1</d></a><a><c>test2</c><d>K2</d></a><a><c>test3</c><d>K3</d></a><a><c>test4</c><d>K4</d></a><a><c>test5</c><d>K5</d></a><a><c>test6</c><c>test22</c><d>K6</d></a></result> 
  Query 68:
-<c>test5</c>
+<c>test5</c> 
  Query 69:
-<a><c>test3</c> test3</a>
+<a><c>test3</c> test3</a> 
  Query 70:
-<a>test3 K3</a>
+<a>test3 K3</a> 
  Query 71:
-true
+ false 
  Query 72:
-false
+ false 
  Query 73:
-2 2 3 4 4 4 6 6 7 8
+ 2 2 3 4 4 4 6 6 7 8 
  Query 74:
-test1 test12 test13 test2 test3 test4 test5 test6 test22
+ test1 test12 test13 test2 test3 test4 test5 test6 test22 
  Query 75:
-test6 test22 test5 test4 test3 test2 test1 test12 test13
+ test6 test22 test5 test4 test3 test2 test1 test12 test13 
  Query 76:
-3 1 1 1 1 2
+ 3 1 1 1 1 2 
  Query 77:
-<d>K2</d> 1<d>K3</d> 1<d>K4</d> 1<d>K5</d> 1<d>K6</d> 2<d>K1</d> 3
+<d>K2</d> 1<d>K3</d> 1<d>K4</d> 1<d>K5</d> 1<d>K6</d> 2<d>K1</d> 3 
  Query 78:
-1 1   1 2   1 3   1 4   1 5   2 1   2 2   2 3   2 4   2 5   3 1   3 2   3 3   3 4   3 5   4 1   4 2   4 3   4 4   4 5   5 1   5 2   5 3   5 4   5 5  
+ 1 1   1 2   1 3   1 4   1 5   2 1   2 2   2 3   2 4   2 5   3 1   3 2   3 3   3 4   3 5   4 1   4 2   4 3   4 4   4 5   5 1   5 2   5 3   5 4   5 5   
  Query 80:
-<gpa>3.5</gpa>
+<gpa>3.5</gpa> 
  Query 81:
-Ashraf   Aboulnaga   4.0 
+ Ashraf   Aboulnaga   4.0 
  Anastasia   Ailamaki   4.0 
  Jim   Basney   4.0 
  Neoklis   Polyzotis   4.0 
@@ -193,13 +186,13 @@
  Paul   Finley   3.5 
  David   Finton   3.5 
  James   Gast   3.5 
-
+ 
  Query 82:
-<a>1 2</a>
+<a>1 2</a> 
  Query 83:
-<d>K2</d>
+<d>K2</d> 
  Query 84:
-<c>test3</c>
+<c>test3</c> 
  Query 85:
 <result><b>
    <d>K2</d> 
@@ -207,7 +200,9 @@
  </b><b>
    <d>K2</d> 
    <c>test2</c> 
- </b></result>
+ </b></result> 
  Query 86:
-<gpa>3.5</gpa> 453
+<gpa>3.5</gpa> 453 
+ Query 87:
+ K1 K2 K3 K4 K5 K6 
 
diff --git a/data/test.xq b/data/test.xq
--- a/data/test.xq
+++ b/data/test.xq
@@ -4,7 +4,7 @@
 
 ----------------------------------------------------------------:)
 
-declare function q ($n,$q) { "Query {$n}:\n{$q}\n" }
+declare function q ($n,$q) { (concat("Query ",$n,":\n"), $q, "\n") }
 ;
 q(1,(1 to 100)[10])
 ;
@@ -72,9 +72,9 @@
 ;
 q(34,doc("data/c.xml")/a/@x)
 ;
-q(35,doc("data/c.xml")/a/@*)
+q(35,doc("data/c.xml")/a/@*/string())
 ;
-q(36,doc("data/c.xml")//@*)
+q(36,doc("data/c.xml")//@*/name())
 ;
 q(37,doc("data/a.xml")/a/b[d = "K6"])
 ;
@@ -98,7 +98,7 @@
 ;
 q(46,doc("data/a.xml")/a/b[c="test3" and d="K3"]/c)
 ;
-q(47,doc("data/a.xml")/a/b[c!="test5" and d="K3"]/c)
+q(47,doc("data/a.xml")/a/b[not(c="test5") and d="K3"]/c)
 ;
 q(48,doc("data/a.xml")/a/b[d="K3"][c="test3"]/*)
 ;
@@ -240,3 +240,16 @@
 declare function g ($x) { ($x,for $z in $x/* return g($z)) }
 ;
 q(86,(x:f("Galanis"),count(g($xxx))))
+;
+declare function local:copy($element) {
+   element {name($element)}
+      {$element/@*,
+          for $child in $element/node()
+              return
+               if ($child/name())
+                 then local:copy($child)
+                 else $child
+      }
+}
+;
+q(87,local:copy(doc("data/a.xml"))//d/string())
diff --git a/data/testdb.xq b/data/testdb.xq
--- a/data/testdb.xq
+++ b/data/testdb.xq
@@ -4,7 +4,7 @@
 
 ----------------------------------------------------------------:)
 
-declare function q ($n,$q) { "Query {$n}:\n{$q}\n" }
+declare function q ($n,$q) { (concat("Query ",$n,":\n"), $q, "\n") }
 ;
 q(1,publish('hxq','c')//gradstudent[.//lastname='Galanis']/gpa)
 ;
diff --git a/db.html b/db.html
--- a/db.html
+++ b/db.html
@@ -1,9 +1,13 @@
 <html>
-<head><title>HXQ with Database Connectivity</title></head>
+<head>
+<link rel="shortcut icon" href="http://haskell.org/favicon.ico" type="image/x-icon" />
+<link rel="icon" href="http://haskell.org/favicon.ico" type="image/x-icon" />
+<title>HXQ with Database Connectivity</title>
+</head>
 <body>
 <center>
 <h1>HXQ with Database Connectivity</h1>
-<h3>Download <a href="/HXQ-0.14.0.tar.gz">HXQ-0.14.0.tar.gz</a></h3>
+<h3>Download <a href="/HXQ-0.15.0.tar.gz">HXQ-0.15.0.tar.gz</a></h3>
 </center>
 <p>
 <h2>Installation Instructions (HXQ with database connectivity)</h2>
@@ -37,11 +41,9 @@
 <tt>create database hxq</tt>.
 <p>
 Then, you need to install the Haskell packages:
-<a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HDBC-1.1.4">HDBC 1.1.4</a> (but not version 1.1.5)
+<a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HDBC">HDBC</a>
 and the
 <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HDBC-odbc">HDBC-odbc</a> driver.
-(For ghc 6.10, you may have to change <tt>import Control.Exception</tt> to <tt>import Control.OldException</tt>
-in Utils.hsc.)
 Then you do:
 <pre>
 runhaskell Setup.lhs configure -fmysql
@@ -54,11 +56,9 @@
 To use sqlite, you need to install <a href="http://sqlite.org/">SQLite</a>.
 On Linux, you can install it using <tt>yum install sqlite</tt>.
 Then you need to install the Haskell packages:
-<a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HDBC-1.1.4">HDBC 1.1.4</a> (but not version 1.1.5)
+<a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HDBC">HDBC</a>
 and the
 <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HDBC-sqlite3">HDBC-sqlite3</a> driver.
-(For ghc 6.10, you may have to change <tt>import Control.Exception</tt> to <tt>import Control.OldException</tt>
-in Utils.hsc and Statement.hsc.)
 Then you do:
 <pre>
 runhaskell Setup.lhs configure -fsqlite
@@ -184,7 +184,7 @@
 <a href="TestDBLP1.hs">TestDBLP1.hs</a> first (using ghc options <tt>+RTS -H200m -K100m</tt>) and then
 <a href="TestDBLP2.hs">TestDBLP2.hs</a>.
 Then, you may evaluate queries, such as <a href="data/q4.xq">data/q4.xq</a>, using the HXQ interpreter,
-<tt>xquery -db hxq data/q4.xq</tt>, which takes about 0.1 seconds.
+<tt>xquery -db hxq -t data/q4.xq</tt>, which takes about 90 milliseconds.
 <p>
 <h2>Status</h2>
 <p>
@@ -195,4 +195,4 @@
 <p>
 <hr>
 <p>
-<address>Last modified: 12/19/08 by <a href="http://lambda.uta.edu/">Leonidas Fegaras</a></address>
+<address>Last modified: 01/06/09 by <a href="http://lambda.uta.edu/">Leonidas Fegaras</a></address>
diff --git a/hxq-manual.pdf b/hxq-manual.pdf
Binary files a/hxq-manual.pdf and b/hxq-manual.pdf differ
diff --git a/index.html b/index.html
--- a/index.html
+++ b/index.html
@@ -1,9 +1,13 @@
 <html>
-<head><title>HXQ: A Compiler from XQuery to Haskell</title></head>
+<head>
+<link rel="shortcut icon" href="http://haskell.org/favicon.ico" type="image/x-icon" />
+<link rel="icon" href="http://haskell.org/favicon.ico" type="image/x-icon" />
+<title>HXQ: A Compiler from XQuery to Haskell</title>
+</head>
 <body>
 <center>
 <h1>HXQ: A Compiler from XQuery to Haskell</h1>
-<h3>Download <a href="/HXQ-0.14.0.tar.gz">HXQ-0.14.0.tar.gz</a></h3>
+<h3>Download <a href="/HXQ-0.15.0.tar.gz">HXQ-0.15.0.tar.gz</a></h3>
 </center>
 <p>
 <h2>Description</h2>
@@ -11,7 +15,7 @@
 HXQ is a fast and space-efficient translator
 from <a href="http://www.w3.org/XML/Query/">XQuery</a> (the standard
 query language for XML) to embedded Haskell code. The translation is
-based on <a href="http://haskell.org/haskellwiki/Template_Haskell">Haskell templates</a>.
+based on <a href="http://haskell.org/haskellwiki/Template_Haskell">Template Haskell</a>.
 HXQ takes full advantage of Haskell's lazy
 evaluation to keep in memory only those parts of XML data needed at
 each point of evaluation, thus performing stream-based evaluation for
@@ -19,36 +23,40 @@
 results to an implementation that is as fast and space-efficient as
 any stream-based implementation based on SAX filters or finite state
 machines. Furthermore, the coding is far simpler and extensible since
-its based on XML trees, rather than SAX events.
+it is based on XML trees, rather than SAX events.
 <p>
-For example, the <a href="Test2.hs">XQuery given below</a>, which is
+For example, the XQuery in <a href="Test2.hs">Test2.hs</a>, which is
 against the <a href="http://dblp.uni-trier.de/xml/">DBLP XML
-file</a> (420MB), runs in 39 seconds on my laptop PC (using 18MB of max heap space).
+document</a> (420MB), runs in 36 seconds on my laptop PC and uses a maximum of 3.2MB of heap space
+(using the runtime options <tt>+RTS -H2m -M3.2m</tt>).
 To contrast this, <a href="http://www.gnu.org/software/qexo/">Qexo</a>, which
-compiles XQueries to Java bytecode, took 1 minute 17 seconds (using no less than 1400MB of heap space).
-Also <a href="http://xqilla.sourceforge.net/HomePage">XQilla</a>, which is written in C++, took 1 minute and 10 secs
-(using 1150MB of heap space). (All results are taken on an Intel Core 2 Duo 2.2GHz 2GB running ghc-6.8.2 on Linux 2.6.23 kernel.)
+compiles XQueries to Java bytecode, takes 1 minute 17 seconds and uses 1400MB of heap space for the same query.
+Also <a href="http://xqilla.sourceforge.net/HomePage">XQilla</a>, which is written in C++, takes 1 minute and 10 secs
+and uses 1150MB of heap space. (All results are taken on an Intel Core 2 Duo 2.2GHz 2GB running ghc-6.8.3 on Linux 2.6.27 kernel.)
+Furthermore, since HXQ uses lazy evaluation, you get the first results of non-blocking queries immediately, while
+most other XQuery processors must first parse the entire input file and construct the whole XML tree in memory before they produce any output.
 <p>
 Finally, HXQ can store XML documents in a relational database
 (currently MySQL or SQLite), by shredding XML into relational tuples, and by
 translating XQueries over the shredded documents into optimized SQL
-queries.
+queries. For example, when the DBLP file is shredded into a MySQL database and the appropriate index is created, the
+above query runs in 90 milliseconds.
 <p>
 <h2>Installation Instructions (HXQ without Database Connectivity)</h2>
 <p>
 HXQ can be installed on most platforms but I have only tested it on
-Linux, MAC OS X, and Windows XP.  The simplest installation is without database
+Linux, Mac OS X, and Windows XP.  The simplest installation is without database
 connectivity (ie, it can only process XQueries against XML text
 documents). If you want database connectivity
-(over mysql or sqlite relational databases), look at the <a href="db.html">installation instructions for database connectivity</a>.
+(over MySQL or sqlite relational databases), look at the <a href="db.html">installation instructions for database connectivity</a>.
 <p>
 First, you need to install the Glasgow Haskell
 Compiler, <a href="http://www.haskell.org/ghc/">ghc</a>.  Optionally,
 if you want to modify the XQuery parser, you need to install the
 parser generator for Haskell,
 <a href="http://www.haskell.org/happy/">happy</a>.  Then,
-download <a href="/HXQ-0.14.0.tar.gz">HXQ version 0.14.0</a> and untar
-it (using <tt>tar xfz</tt> on Linux
+download <a href="/HXQ-0.15.0.tar.gz">HXQ version 0.15.0</a> and untar
+it (using <tt>tar xfz</tt> on Linux/Mac
 or <a href="http://www.7-zip.org/">7z x</a> on Windows).  Then,
 you execute the following commands inside the HXQ directory:
 <pre>
@@ -125,26 +133,26 @@
 <pre>
 f(x,y) = $(xq "&lt;article&gt;&lt;first&gt;{$x}&lt;/first&gt;&lt;second&gt;{$y}&lt;/second&gt;&lt;/article&gt;")
 
-main = do a &lt;- $(xq ("&lt;result&gt;{                                                        "
-                 ++"     for $x at $i in doc('data/dblp.xml')//inproceedings           "
-                 ++"     where $x/author = 'Leonidas Fegaras'                          "
-                 ++"     order by $x/year descending                                   "
-                 ++"     return &lt;paper&gt;{ $i, ') ', $x/booktitle/text(),                "
-                 ++"                     ': ', $x/title/text()                         "
-                 ++"            }&lt;/paper&gt;                                              "
-                 ++"  }&lt;/result&gt;                                                       "))
+main = do a &lt;- $(xq "&lt;result&gt;{                                                         /
+                 /       for $x at $i in doc('data/dblp.xml')//inproceedings           /
+                 /       where $x/author = 'Leonidas Fegaras'                          /
+                 /       order by $x/year descending                                   /
+                 /       return &lt;paper&gt;{ $i, ') ', $x/booktitle/text(),                /
+                 /                       ': ', $x/title/text()                         /
+                 /              }&lt;/paper&gt;                                              /
+                 /    }&lt;/result&gt;                                                       ")
           putXSeq a
           b &lt;- $(xq " f( $a/paper[10], $a/paper[8] ) ")
           putXSeq b
 </pre>
 Another example, can be found in <a href="Test1.hs">Test1.hs</a>. You compile it using
-<tt>ghc --make Test1.hs -o a.out</tt>.
+<tt>ghc -O2 --make Test1.hs -o a.out</tt>.
 Using the latest ghc (version >= 6.9), one may use <a href="http://haskell.org/haskellwiki/Quasiquotation">quasi-quotations</a>
 instead of strings, as is shown in <a href="Test2a.hs">Test2a.hs</a>.
 <p>
 You can compile an XQuery file into a Haskell program
 (<tt>Temp.hs</tt>) using <tt>xquery -c file</tt>. Or better, you can
-use the script <tt>compile</tt> (on either Unix or Windows) to compile the XQuery file
+use the script <tt>compile</tt> (on Unix/Mac or Windows) to compile the XQuery file
 to an executable. For example:
 <pre>
 compile data/q1.xq
@@ -178,4 +186,4 @@
 <p>
 <hr>
 <p>
-<address>Last modified: 12/19/08 by <a href="http://lambda.uta.edu/">Leonidas Fegaras</a></address>
+<address>Last modified: 01/06/09 by <a href="http://lambda.uta.edu/">Leonidas Fegaras</a></address>
diff --git a/src/Text/XML/HXQ/Compiler.hs b/src/Text/XML/HXQ/Compiler.hs
--- a/src/Text/XML/HXQ/Compiler.hs
+++ b/src/Text/XML/HXQ/Compiler.hs
@@ -4,7 +4,7 @@
 - Programmer: Leonidas Fegaras
 - Email: fegaras@cse.uta.edu
 - Web: http://lambda.uta.edu/
-- Creation: 02/15/08, last update: 12/19/08
+- Creation: 02/15/08, last update: 01/04/09
 - 
 - Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved.
 - This material is provided as is, with absolutely no warranty expressed or implied.
@@ -99,7 +99,9 @@
 compilePredicates [] xs _ = xs
 compilePredicates ((Aint n):preds) xs _   -- shortcut that improves laziness
     = compilePredicates preds
-            [| [ $xs !! $(litE (IntegerL (toInteger (n-1)))) ] |] True
+            [| index $xs $(litE (IntegerL (toInteger (n-1)))) |] True
+compilePredicates ((Ast "call" [Avar "last"]):preds) xs _
+    = compilePredicates preds [| [ last $xs ] |] True
 compilePredicates (pred:preds) xs True    -- top-k like
     | maxPosition pathPosition pred > 0
     = compilePredicates (pred:preds)
@@ -187,14 +189,6 @@
           -> error "External function calls must be within the IO monad"
       Ast "call" ((Avar f):args)
           -> callF f (map (\x -> compile x context position last effective_axis) args)
-      Ast "construction" [Astring tag,id,parent,Ast "attributes" [],body]
-          -> let ct = litE (StringL tag)
-                 bc = compile body context position last effective_axis
-                 cid = compile id context position last effective_axis
-                 cparent = compile parent context position last effective_axis
-             in [| let [XText vid] = $cid
-                       vparent = $cparent
-                   in [ XElem $ct [] (read vid) (if null vparent then parent_error else head vparent) $bc ] |]
       Ast "construction" [tag,id,parent,Ast "attributes" al,body]
           -> let alc = foldr (\(Ast "pair" [a,v]) r
                                   -> let ac = compile a context position last effective_axis
@@ -206,7 +200,13 @@
                  cparent = compile parent context position last effective_axis
              in [| let [XText vid] = $cid
                        vparent = $cparent
-                   in [ XElem (qName $ct) $alc (read vid) (if null vparent then parent_error else head vparent) $bc ] |]
+                       (as,bs) = span (\x -> case x of XAttr _ _ -> True; _ -> False) $bc
+                       atts = $alc ++ [ (n,v) | XAttr n v <- as ]
+                   in [ XElem (qName $ct) atts (read vid) (if null vparent then parent_error else head vparent) bs ] |]
+      Ast "attribute_construction" [name,value]
+          -> let ns = compile name context position last effective_axis
+                 vs = compile value context position last effective_axis
+             in [| [ XAttr (qName $ns) (showXS $vs) ] |]
       Ast "let" [Avar var,source,body]
           -> do s <- compile source context position last effective_axis
                 b <- compile body context position last effective_axis
@@ -251,7 +251,9 @@
     = [| return $xs |]
 compilePredicatesM ((Aint n):preds) xs _   -- shortcut that improves laziness
     = compilePredicatesM preds
-            [| [ $xs !! $(litE (IntegerL (toInteger (n-1)))) ] |] True
+            [| index $xs $(litE (IntegerL (toInteger (n-1)))) |] True
+compilePredicatesM ((Ast "call" [Avar "last"]):preds) xs _
+    = compilePredicatesM preds [| [ last $xs ] |] True
 compilePredicatesM (pred:preds) xs True    -- top-k like
     | maxPosition pathPosition pred > 0
     = compilePredicatesM (pred:preds)
@@ -367,22 +369,13 @@
              in [| do v1 <- $vc1
                       v2 <- $vc2
                       replaceDB $db v1 v2 |]
-      Ast "call" ((Avar f):args)
+      Ast "call" ((Avar f):args)           -- Note: strict function application
           -> let binds = zipWith (\i x -> (mkName ("x"++(show i)),x)) [1..(length args)] args
                  call = if elem f system_functions
                         then [| return $(callF f (map (\(n,_) -> varE n) binds)) |]
                         else callF f (map (\(n,_) -> varE n) binds)
              in foldr (\(n,x) r -> [| $(compileM x context position last effective_axis) >>= $(lamE [varP n] r) |])
                       call binds
-      Ast "construction" [Astring tag,id,parent,Ast "attributes" [],body]
-          -> let ct = litE (StringL tag)
-                 bc = compileM body context position last effective_axis
-                 cid = compile id context position last effective_axis
-                 cparent = compile parent context position last effective_axis
-             in [| do b <- $bc
-                      let [XText vid] = $cid
-                          vparent = $cparent
-                      return [ XElem $ct [] (read vid) (if null vparent then parent_error else head vparent) b ] |]
       Ast "construction" [tag,id,parent,Ast "attributes" al,body]
           -> let alc = foldr (\(Ast "pair" [a,v]) r
                                   -> [| do ac <- $(compileM a context position last effective_axis)
@@ -396,9 +389,17 @@
              in [| do a <- $alc
                       c <- $ct
                       b <- $bc
-                      let [XText vid] = $cid
+                      let (as,bs) = span (\x -> case x of XAttr _ _ -> True; _ -> False) b
+                          atts = a ++ [ (n,v) | XAttr n v <- as ]
+                          [XText vid] = $cid
                           vparent = $cparent
-                      return [ XElem (qName c) a (read vid) (if null vparent then parent_error else head vparent) b ] |]
+                      return [ XElem (qName c) atts (read vid) (if null vparent then parent_error else head vparent) bs ] |]
+      Ast "attribute_construction" [name,value]
+          -> let ns = compileM name context position last effective_axis
+                 vs = compileM value context position last effective_axis
+             in [| do n <- $ns
+                      v <- $vs
+                      return $! [ XAttr (qName n) (showXS v) ] |]
       Ast "let" [Avar var,source,body]
           -> [|  $(compileM source context position last effective_axis)
                  >>= $(lamE [varP (mkName var)] (compileM body context position last effective_axis)) |]
diff --git a/src/Text/XML/HXQ/Functions.hs b/src/Text/XML/HXQ/Functions.hs
--- a/src/Text/XML/HXQ/Functions.hs
+++ b/src/Text/XML/HXQ/Functions.hs
@@ -4,7 +4,7 @@
 - Programmer: Leonidas Fegaras
 - Email: fegaras@cse.uta.edu
 - Web: http://lambda.uta.edu/
-- Creation: 08/15/08, last update: 11/18/08
+- Creation: 08/15/08, last update: 01/07/09
 - 
 - Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved.
 - This material is provided as is, with absolutely no warranty expressed or implied.
@@ -20,10 +20,12 @@
 module Text.XML.HXQ.Functions where
 
 import HXML(AttList)
-import Data.List(foldl')
-import Char(isDigit)
+import Data.List
+import Char
 import Text.XML.HXQ.XTree
 import Language.Haskell.TH
+import Text.Regex
+import Text.Regex.Base.RegexLike
 import Debug.Trace
 
 
@@ -49,7 +51,7 @@
         _ -> []
 
 
--- XPath step //tag or // *
+-- XPath step descendant-or-self
 descendant_or_self_step :: Tag -> XTree -> XSeq
 descendant_or_self_step tag (x@(XElem t _ _ _ cs))
     | tag==t || tag=="*"
@@ -59,7 +61,7 @@
 descendant_or_self_step _ _ = []
 
 
--- XPath step descendant
+-- XPath step //tag or // *
 descendant_step :: Tag -> XTree -> XSeq
 descendant_step tag (XElem t _ _ _ cs)
     = concatMap (descendant_or_self_step tag) cs
@@ -69,14 +71,17 @@
 -- It's like //* but has tagged children, which are derived statically
 -- After examining 100 children it gives up: this avoids space leaks
 descendant_any_with_tagged_children :: [Tag] -> XTree -> XSeq
-descendant_any_with_tagged_children tags (x@(XElem t _ _ _ cs))
-    | all (\tag -> foldr (\b s -> case b of
-                                     (XElem k _ _ _ _) -> s || k == tag
-                                     _ -> s) False cs100) tags
-    = x:(concatMap (descendant_any_with_tagged_children tags) cs)
-    where cs100 = take 100 cs
 descendant_any_with_tagged_children tags (XElem t _ _ _ cs)
-    = concatMap (descendant_any_with_tagged_children tags) cs
+    = concatMap (ca tags) cs
+      where ca tags (x@(XElem t _ _ _ cs))
+                | all (\tag -> foldr (\b s -> case b of
+                                                (XElem k _ _ _ _) -> s || k == tag
+                                                _ -> s) False cs100) tags
+                = x:(concatMap (ca tags) cs)
+                where cs100 = take 100 cs
+            ca tags (XElem t _ _ _ cs)
+                = concatMap (ca tags) cs
+            ca tags _ = []
 descendant_any_with_tagged_children tags _ = []
 
 
@@ -85,7 +90,7 @@
 attribute_step attr x
     = case x of
         XElem _ al _ _ _ -> foldr (\(a,v) s -> if a==attr || attr=="*"
-                                               then (XText v):s
+                                               then (XAttr a v):s
                                                else s) [] al
         _ -> []
 
@@ -94,7 +99,7 @@
 attribute_descendant_step :: Tag -> XTree -> XSeq
 attribute_descendant_step attr (x@(XElem _ al _ _ cs))
     = foldr (\(a,v) s -> if a==attr || attr=="*"
-                         then (XText v):s
+                         then (XAttr a v):s
                          else s)
             (concatMap (attribute_descendant_step attr) cs) al
 attribute_descendant_step _ _ = []
@@ -219,20 +224,18 @@
 
 
 -- find the value of a variable in an association list
-findV var env
-  = case filter (\(n,_) -> n==var) env of
-      (_,b):_ -> b
-      _ -> error ("Undefined variable: "++var)
+findV var ((n,b):_) | n==var = b
+findV var (_:xs) = findV var xs
+findV var _ = error ("Undefined variable: "++var)
 
 
 -- is the variable defined in the association list?
-memV var env
-  = case filter (\(n,_) -> n==var) env of
-      (_,b):_ -> True
-      _ -> False
+memV var ((n,_):_) | n==var = True
+memV var (_:xs) = memV var xs
+memV _ _ = False
 
 
--- like foldr but with an index
+-- lazy: like foldr but with an index
 foldir :: (a -> Int -> b -> b) -> b -> [a] -> Int -> b
 foldir c n [] i = n
 foldir c n (x:xs) i = c x i (foldir c n xs $! (i+1))
@@ -248,6 +251,10 @@
 falseXT = XBool False
 
 
+toBool :: Bool -> XSeq
+toBool b = if b then [trueXT] else [falseXT]
+
+
 readNum :: String -> Maybe XTree
 readNum cs = case span isDigit cs of
                (n,[]) -> Just (XInt (read n))
@@ -272,6 +279,7 @@
 string :: XSeq -> XSeq
 string xs = foldr (\x r -> case x of
                              XElem _ _ _ _ zs -> (string zs)++r
+                             XAttr _ v -> (XText v):r
                              XText _ -> x:r
                              XInt _ -> x:r
                              XFloat _ -> x:r
@@ -288,6 +296,13 @@
                   (text xs)
 
 
+getNames :: XSeq -> XSeq
+getNames xs = foldr (\x r -> case x of 
+                               XElem tag _ _ _ _ -> (XText tag):r
+                               XAttr tag _ -> (XText tag):r
+                               _ -> r) [] xs
+
+
 -- concatenate text with no padding (for element content)
 appendText :: [XSeq] -> XSeq
 appendText [] = []
@@ -295,6 +310,41 @@
 appendText (x:xs) = x++(XNoPad:(appendText xs))
 
 
+substring_before :: String -> String -> String
+substring_before xs ys
+    = s xs ys []
+      where s xs ys c | isPrefixOf ys xs = c
+            s (x:xs) ys c = s xs ys (c++[x])
+            s _ _ _ = []
+
+
+substring_after :: String -> String -> String
+substring_after xs ys
+    = s xs ys
+      where s xs ys | isPrefixOf ys xs = drop (length ys) xs
+            s (_:xs) ys = s xs ys
+            s _ _ = []
+
+
+replace :: String -> String -> String -> String
+replace xs from to
+    = s xs from []
+      where s xs from c
+                | isPrefixOf from xs
+                = c ++ to ++ drop (length from) xs
+            s (x:xs) from c = s xs from (c++[x])
+            s _ _ _ = []
+
+
+translate_string :: String -> String -> String -> String
+translate_string xs from to
+    = foldr (\c r -> case elemIndex c from of
+                       Just i -> if i < length to
+                                 then (to !! i):r
+                                 else r
+                       _ -> c:r) "" xs
+
+
 toNum :: XSeq -> XSeq
 toNum xs = foldr (\x r -> case x of
                              XInt n -> x:r
@@ -315,21 +365,21 @@
 toFloat x = error("Cannot convert to a float: "++(show x))
 
 
+-- strict: average value
 mean :: (Fractional t) => [t] -> t
 mean = uncurry (/) . foldl' (\(!s, !n) x -> (s+x, n+1)) (0,0.0)
 
 
 contains :: String -> String -> Bool
-contains text word
-    = let len = length word
-          c xs | ((take len xs) == word) = True
-          c (_:xs) = c xs
-          c _ = False
-      in c text
+contains text word = isInfixOf word text
 
 
+-- lazy: remove duplicates
 distinct :: Eq a => [a] -> [a]
-distinct = foldl (\r a -> if elem a r then r else r++[a]) []
+distinct xs
+    = rd xs []
+      where rd (x:xs) r = if elem x r then rd xs r else x:(rd xs $! (x:r))
+            rd [] _ = []
 
 
 arithmetic :: (Float -> Float -> Float) -> XTree -> XTree -> XTree
@@ -347,6 +397,7 @@
 compareXTrees (XInt n) (XFloat m) = compare (fromIntegral n) m
 compareXTrees (XFloat n) (XFloat m) = compare n m
 compareXTrees (XText n) (XText m) = compare n m
+compareXTrees (XBool n) (XBool m) = compare n m
 compareXTrees x y = compare (toFloat x) (toFloat y)
 
 
@@ -355,6 +406,7 @@
 strictCompareOne [XFloat n] [XInt m] = compare n (fromIntegral m)
 strictCompareOne [XInt n] [XFloat m] = compare (fromIntegral n) m
 strictCompareOne [XText n] [XText m] = compare n m
+strictCompareOne [XBool n] [XBool m] = compare n m
 strictCompareOne x y = error ("Illegal operands in strict comparison: "++(show x)++" "++(show y))
 
 strictCompare :: XSeq -> XSeq -> Ordering
@@ -363,6 +415,7 @@
 strictCompare [XElem _ _ _ _ x] y = strictCompareOne x y
 strictCompare x y = strictCompareOne x y
 
+
 compareXSeqs :: Bool -> XSeq -> XSeq -> Ordering
 compareXSeqs ord xs ys
     = let comps = [ compareXTrees x y | x <- xs, y <- ys ]
@@ -379,6 +432,14 @@
               else EQ
 
 
+deep_equal :: XTree -> XTree -> Bool
+deep_equal (XElem t1 a1 _ _ xs1) (XElem t2 a2 _ _ xs2)
+    = t1 == t2 && sort a1 == a2 && (and $ zipWith deep_equal xs1 xs2)
+deep_equal (XElem _ _ _ _ _) _ = False
+deep_equal _ (XElem _ _ _ _ _) = False
+deep_equal x y = x == y
+
+
 conditionTest :: XSeq -> Bool
 conditionTest [] = False
 conditionTest [XText ""] = False
@@ -387,70 +448,106 @@
 conditionTest _ = True
 
 
+-- lazy indexing (similar to !!)
+index :: [a] -> Int -> [a]
+index [] n = []
+index (x:xs) 0 = [x]
+index (_:xs) n = index xs $! (n-1)
+
+
 type Function = [Q Exp] -> Q Exp
 
 
 -- System functions: they can also be defined as Haskell functions of type (XSeq,...,XSeq) -> XSeq
 -- but here we make sure they are unfolded and fused with the rest of the query
 functions :: [(Tag,Int,Function)]
-functions = [ ( "=", 2, \[xs,ys] -> [| [ trueXT | x <- text $xs, y <- text $ys, compareXTrees x y == EQ ] |] ),
-              ( "!=", 2, \[xs,ys] -> [| if null [ trueXT | x <- text $xs, y <- text $ys, compareXTrees x y == EQ ]
-                                        then [trueXT]
-                                        else [falseXT] |] ),
-              ( ">", 2, \[xs,ys] -> [| [ trueXT | x <- text $xs, y <- text $ys, compareXTrees x y == GT ] |] ),
-              ( "<", 2, \[xs,ys] -> [| [ trueXT | x <- text $xs, y <- text $ys, compareXTrees x y == LT ] |] ),
-              ( ">=", 2, \[xs,ys] -> [| [ trueXT | x <- text $xs, y <- text $ys, compareXTrees x y `elem` [GT,EQ] ] |] ),
-              ( "<=", 2, \[xs,ys] -> [| [ trueXT | x <- text $xs, y <- text $ys, compareXTrees x y `elem` [LT,EQ] ] |] ),
-              ( "eq", 2, \[xs,ys] -> [| if strictCompare $xs $ys == EQ then [trueXT] else [falseXT] |] ),
-              ( "neq", 2, \[xs,ys] -> [| if strictCompare $xs $ys /= EQ then [trueXT] else [falseXT] |] ),
-              ( "lt", 2, \[xs,ys] -> [| if strictCompare $xs $ys == LT then [trueXT] else [falseXT] |] ),
-              ( "gt", 2, \[xs,ys] -> [| if strictCompare $xs $ys == GT then [trueXT] else [falseXT] |] ),
-              ( "le", 2, \[xs,ys] -> [| if strictCompare $xs $ys `elem` [LT,EQ] then [trueXT] else [falseXT] |] ),
-              ( "ge", 2, \[xs,ys] -> [| if strictCompare $xs $ys `elem` [GT,EQ] then [trueXT] else [falseXT] |] ),
-              ( "<<", 2, \[xs,ys] -> [| [ trueXT | XElem _ _ ox _ _ <- $xs, XElem _ _ oy _ _ <- $ys, ox < oy ] |] ),
-              ( ">>", 2, \[xs,ys] -> [| [ trueXT | XElem _ _ ox _ _ <- $xs, XElem _ _ oy _ _ <- $ys, ox > oy ] |] ),
-              ( "is", 2, \[xs,ys] -> [| [ trueXT | XElem _ _ ox _ _ <- $xs, XElem _ _ oy _ _ <- $ys, ox == oy ] |] ),
-              ( "+", 2, \[xs,ys] -> [| [ arithmetic (+) x y | x <- toNum $xs, y <- toNum $ys ] |] ),
-              ( "-", 2, \[xs,ys] -> [| [ arithmetic (-) x y | x <- toNum $xs, y <- toNum $ys ] |] ),
-              ( "*", 2, \[xs,ys] -> [| [ arithmetic (*) x y | x <- toNum $xs, y <- toNum $ys ] |] ),
-              ( "div", 2, \[xs,ys] -> [| [ arithmetic (/) x y | x <- toNum $xs, y <- toNum $ys ] |] ),
-              ( "idiv", 2, \[xs,ys] -> [| [ XInt (div x y) | (XInt x) <- toNum $xs, (XInt y) <- toNum $ys ] |] ),
-              ( "mod", 2, \[xs,ys] -> [| [ XInt (mod x y) | (XInt x) <- toNum $xs, (XInt y) <- toNum $ys ] |] ),
-              ( "uplus", 1, \[xs] -> [| [ x | x <- toNum $xs ] |] ),
-              ( "uminus", 1, \[xs] -> [| [ case x of XInt n -> XInt (-n); XFloat n -> XFloat (-n) | x <- toNum $xs ] |] ),
-              ( "and", 2, \[xs,ys] -> [| if (conditionTest $xs) && (conditionTest $ys) then [trueXT] else [falseXT] |] ),
-              ( "or", 2, \[xs,ys] -> [| if (conditionTest $xs) || (conditionTest $ys) then [trueXT] else [falseXT] |] ),
-              ( "not", 1, \[xs] -> [| if conditionTest $xs then [falseXT] else [trueXT] |] ),
-              ( "some", 1, \[xs] -> [| if conditionTest $xs then [trueXT] else [falseXT] |] ),
-              ( "count", 1, \[xs] -> [| [ XInt (length $xs) ] |] ),
-              ( "sum", 1, \[xs] -> [| [ XFloat (sum [ toFloat x | x <- toNum $xs ]) ] |] ),
-              ( "avg", 1, \[xs] -> [| [ XFloat (mean [ toFloat x | x <- toNum $xs ]) ] |] ),
-              ( "min", 1, \[xs] -> [| [ XFloat (minimum [ toFloat x | x <- toNum $xs ]) ] |] ),
-              ( "max", 1, \[xs] -> [| [ XFloat (maximum [ toFloat x | x <- toNum $xs ]) ] |] ),
-              ( "to", 2, \[xs,ys] -> [| [ XInt i | XInt n <- toNum $xs, XInt m <- toNum $ys, i <- [n..m] ] |] ),
-              ( "text", 1, \[xs] -> [| text $xs |] ),
-              ( "string", 1, \[xs] -> [| string $xs |] ),
-              ( "data", 1, \[xs] -> [| text $xs |] ),
-              ( "node", 1, \[xs] -> [| [ w | w@(XElem _ _ _ _ _) <- $xs ] |] ),
-              ( "exists", 1, \[xs] -> [| [ XBool (not (null $xs)) ] |] ),
-              ( "empty", 0, \[] -> [| [] |] ),
-              ( "true", 0, \[] -> [| [trueXT] |] ),
-              ( "false", 0, \[] -> [| [] |] ),
-              ( "if", 3, \[cs,ts,es] -> [| if conditionTest $cs then $ts else $es |] ),
-              ( "element", 2, \[tags,xs] -> [| [ x | tag <- toString $tags, x@(XElem t _ _ _ _) <- $xs, (t==tag || tag=="*") ] |] ),
-              ( "attribute", 2, \[tags,xs] -> [| [ z | tag <- toString $tags, x <- $xs, z <- attribute_step tag x ] |] ),
-              ( "name", 1, \[xs] -> [| [ XText tag | XElem tag _ _ _ _ <- $xs ] |] ),
-              ( "contains", 2, \[xs,text] -> [| [ trueXT | x <- toString $xs, t <- toString $text, contains x t ] |] ),
-              ( "substring", 3, \[xs,n1,n2] -> [| [ XText (take m2 (drop (m1-1) x)) | x <- toString $xs,
-                                                    XInt m1 <- toNum $n1, XInt m2 <- toNum $n2 ] |] ),
-              ( "concatenate", 2, \[xs,ys] -> [| $xs ++ $ys |] ),
-              ( "distinct-values", 1, \[xs] -> [| distinct $xs |] ),
-              ( "union", 2, \[xs,ys] -> [| distinct ($xs ++ $ys) |] ),
-              ( "intersect", 2, \[xs,ys] -> [| filter (\x -> elem x $ys) $xs |] ),
-              ( "except", 2, \[xs,ys] -> [| filter (\x -> not (elem x $ys)) $xs  |] ),
-              ( "reverse", 1, \[xs] -> [| reverse $xs |] ),
-              ( "trace", 2, \[xs,ys] -> [| trace ("***trace:"++show $xs) $ys |] )
-            ]
+functions
+    = [ ( "=", 2, \[xs,ys] -> [| toBool $ or [ compareXTrees x y == EQ | x <- text $xs, y <- text $ys ] |] ),
+        ( "!=", 2, \[xs,ys] -> [| toBool $ strictCompare $xs $ys /= EQ |] ),
+        ( ">", 2, \[xs,ys] -> [| toBool $ or [ compareXTrees x y == GT | x <- text $xs, y <- text $ys ] |] ),
+        ( "<", 2, \[xs,ys] -> [| toBool $ or [ compareXTrees x y == LT | x <- text $xs, y <- text $ys ] |] ),
+        ( ">=", 2, \[xs,ys] -> [| toBool $ or [ compareXTrees x y `elem` [GT,EQ] | x <- text $xs, y <- text $ys ] |] ),
+        ( "<=", 2, \[xs,ys] -> [| toBool $ or [ compareXTrees x y `elem` [LT,EQ] | x <- text $xs, y <- text $ys ] |] ),
+        ( "eq", 2, \[xs,ys] -> [| toBool $ strictCompare $xs $ys == EQ |] ),
+        ( "neq", 2, \[xs,ys] -> [| toBool $ strictCompare $xs $ys /= EQ |] ),
+        ( "lt", 2, \[xs,ys] -> [| toBool $ strictCompare $xs $ys == LT |] ),
+        ( "gt", 2, \[xs,ys] -> [| toBool $ strictCompare $xs $ys == GT |] ),
+        ( "le", 2, \[xs,ys] -> [| toBool $ strictCompare $xs $ys `elem` [LT,EQ] |] ),
+        ( "ge", 2, \[xs,ys] -> [| toBool $ strictCompare $xs $ys `elem` [GT,EQ] |] ),
+        ( "<<", 2, \[xs,ys] -> [| toBool $ or [ ox < oy | XElem _ _ ox _ _ <- $xs, XElem _ _ oy _ _ <- $ys ] |] ),
+        ( ">>", 2, \[xs,ys] -> [| toBool $ or [ ox > oy | XElem _ _ ox _ _ <- $xs, XElem _ _ oy _ _ <- $ys ] |] ),
+        ( "is", 2, \[xs,ys] -> [| toBool $ or [ ox == oy | XElem _ _ ox _ _ <- $xs, XElem _ _ oy _ _ <- $ys ] |] ),
+        ( "+", 2, \[xs,ys] -> [| [ arithmetic (+) x y | x <- toNum $xs, y <- toNum $ys ] |] ),
+        ( "-", 2, \[xs,ys] -> [| [ arithmetic (-) x y | x <- toNum $xs, y <- toNum $ys ] |] ),
+        ( "*", 2, \[xs,ys] -> [| [ arithmetic (*) x y | x <- toNum $xs, y <- toNum $ys ] |] ),
+        ( "div", 2, \[xs,ys] -> [| [ arithmetic (/) x y | x <- toNum $xs, y <- toNum $ys ] |] ),
+        ( "idiv", 2, \[xs,ys] -> [| [ XInt (div x y) | (XInt x) <- toNum $xs, (XInt y) <- toNum $ys ] |] ),
+        ( "mod", 2, \[xs,ys] -> [| [ XInt (mod x y) | (XInt x) <- toNum $xs, (XInt y) <- toNum $ys ] |] ),
+        ( "uplus", 1, \[xs] -> [| [ x | x <- toNum $xs ] |] ),
+        ( "uminus", 1, \[xs] -> [| [ case x of XInt n -> XInt (-n); XFloat n -> XFloat (-n) | x <- toNum $xs ] |] ),
+        ( "and", 2, \[xs,ys] -> [| toBool $ (conditionTest $xs) && (conditionTest $ys) |] ),
+        ( "or", 2, \[xs,ys] -> [| toBool $ (conditionTest $xs) || (conditionTest $ys) |] ),
+        ( "not", 1, \[xs] -> [| toBool $ not $ conditionTest $xs |] ),
+        ( "count", 1, \[xs] -> [| [ XInt (length $xs) ] |] ),
+        ( "sum", 1, \[xs] -> [| [ XFloat (sum [ toFloat x | x <- toNum $xs ]) ] |] ),
+        ( "avg", 1, \[xs] -> [| [ XFloat (mean [ toFloat x | x <- toNum $xs ]) ] |] ),
+        ( "min", 1, \[xs] -> [| [ XFloat (minimum [ toFloat x | x <- toNum $xs ]) ] |] ),
+        ( "max", 1, \[xs] -> [| [ XFloat (maximum [ toFloat x | x <- toNum $xs ]) ] |] ),
+        ( "to", 2, \[xs,ys] -> [| [ XInt i | XInt n <- toNum $xs, XInt m <- toNum $ys, i <- [n..m] ] |] ),
+        ( "text", 1, \[xs] -> [| [ w | XElem _ _ _ _ ts <- $xs, w <- text ts ] |] ),
+        ( "string", 1, \[xs] -> [| string $xs |] ),
+        ( "data", 1, \[xs] -> [| text $xs |] ),
+        ( "node", 1, \[xs] -> [| [ w | XElem _ _ _ _ ts <- $xs, w <- ts ] |] ),
+        ( "exists", 1, \[xs] -> [| toBool $ (not (null $xs)) |] ),
+        ( "some", 1, \[xs] -> [| toBool $ or [ conditionTest [x] | x <- $xs ] |] ),
+        ( "empty", 0, \[] -> [| [] |] ),
+        ( "empty", 1, \[xs] -> [| toBool $ null $xs |] ),
+        ( "true", 0, \[] -> [| [trueXT] |] ),
+        ( "false", 0, \[] -> [| [falseXT] |] ),
+        ( "if", 3, \[cs,xs,ys] -> [| if conditionTest $cs then $xs else $ys |] ),
+        ( "name", 1, \[xs] -> [| getNames $xs |] ),
+        ( "local-name", 1, \[xs] -> [| getNames $xs |] ),
+        ( "contains", 2, \[xs,text] -> [| toBool $ or [ contains x t | x <- toString $xs, t <- toString $text ] |] ),
+        ( "substring", 3, \[xs,n1,n2] -> [| [ XText (take m2 (drop (m1-1) x)) | x <- toString $xs,
+                                              XInt m1 <- toNum $n1, XInt m2 <- toNum $n2 ] |] ),
+        ( "concatenate", 2, \[xs,ys] -> [| $xs ++ $ys |] ),
+        ( "distinct-values", 1, \[xs] -> [| distinct $xs |] ),
+        ( "union", 2, \[xs,ys] -> [| distinct ($xs ++ $ys) |] ),
+        ( "intersect", 2, \[xs,ys] -> [| intersect $xs $ys |] ),
+        ( "except", 2, \[xs,ys] -> [| $xs \\ $ys |] ),
+        ( "reverse", 1, \[xs] -> [| reverse $xs |] ),
+        ( "trace", 2, \[xs,ys] -> [| trace ("*** trace: "++show $xs) $ys |] ),
+        ( "error", 0, \[] -> [| error "XQuery error" |] ),
+        ( "error", 2, \[xs,ys] -> [| error (showXS $xs++": "++show $ys) |] ),
+        ( "substring", 2, \[xs,n] -> [| [ XText (drop (m-1) x) | x <- toString $xs, XInt m <- toNum $n ] |] ),
+        ( "substring-before", 2, \[xs,ys] -> [| [ XText (substring_before x y)  | x <- toString $xs, y <- toString $ys ] |] ),
+        ( "substring-after", 2, \[xs,ys] -> [| [ XText (substring_after x y)  | x <- toString $xs, y <- toString $ys ] |] ),
+        ( "starts-with", 2, \[xs,ys] -> [| toBool $ or [ x == "" || isPrefixOf y x  | x <- toString $xs, y <- toString $ys ] |] ),
+        ( "ends-with", 2, \[xs,ys] -> [| toBool $ or [ x == "" || isSuffixOf y x  | x <- toString $xs, y <- toString $ys ] |] ),
+        ( "concat", -1, \ss -> [| [ XText $ $(foldr (\s r -> [| concat [ x | x <- toString $s ] ++ $r |]) [| "" |] ss) ] |] ),
+        ( "string-join", 2, \[xs,ys] -> [| [ XText $ intercalate y (toString $xs) | y <- toString $ys ] |] ),
+        ( "substitute-string", 3, \[xs,ys,zs] -> [| [ XText $ replace x y z  | x <- toString $xs, y <- toString $ys, z <- toString $zs ] |] ),
+        ( "string-length", 1, \[xs] -> [| [ XInt $ length x | x <- toString $xs ] |] ),
+        ( "number", 1, \[xs] -> [| toNum $xs |] ),
+        ( "boolean", 1, \[xs] -> [| toBool $ or [ conditionTest [x] | x <- $xs ] |] ),
+        ( "abs", 1, \[xs] -> [| [ case x of XInt n -> XInt (abs n); XFloat n -> XFloat (abs n) | x <- toNum $xs ] |] ),
+        ( "ceiling", 1, \[xs] -> [| [ case x of XInt n -> XInt n; XFloat n -> XInt (ceiling n) | x <- toNum $xs ] |] ),
+        ( "round", 1, \[xs] -> [| [ case x of XInt n -> XInt n; XFloat n -> XInt (round n) | x <- toNum $xs ] |] ),
+        ( "floor", 1, \[xs] -> [| [ case x of XInt n -> XInt n; XFloat n -> XInt (floor n) | x <- toNum $xs ] |] ),
+        ( "index-of", 2, \[xs,ys] -> [| [ XInt (i+1) | y <- $ys, i <- elemIndices y $xs ] |] ),
+        ( "remove", 2, \[xs,ys] -> [| let x = $xs in concat [ (take (i-1) x)++(drop i x) | XInt i <- toNum $ys ] |] ),
+        ( "subsequence", 2, \[xs,n] -> [| concat [ drop (m-1) $xs | XInt m <- toNum $n ] |] ),
+        ( "subsequence", 3, \[xs,n1,n2] -> [| concat [ take m2 (drop (m1-1) $xs) | XInt m1 <- toNum $n1, XInt m2 <- toNum $n2 ] |] ),
+        ( "last", 0, \[] -> error "the 'last()' call must be handled separately" ),
+        ( "position", 0, \[] -> error "the 'position()' call must be handled separately" ),
+        ( "insert-before", 3, \[xs,n,ys] -> [| let x = $xs in concat [ (take (i-1) x) ++ $ys ++ (drop (i-1) x) | XInt i <- toNum $n ] |] ),
+        ( "deep-equal", 2, \[xs,ys] -> [| toBool $ or [ deep_equal x y | x <- $xs, y <- $ys ] |] ),
+        ( "translate", 3, \[xs,ys,zs] -> [| [ XText $ translate_string x y z  | x <- toString $xs, y <- toString $ys, z <- toString $zs ] |] ),
+        ( "matches", 2, \[xs,ys] -> [| toBool $ or [ matchTest (mkRegex y) x | x <- toString $xs, y <- toString $ys ] |] ),
+        ( "compare", 2, \[xs,ys] -> [| [ XInt $ case compare x y of EQ -> 0; LT -> -1; GT -> 1 | x <- toString $xs, y <- toString $ys ] |] ),
+        ( "upper-case", 1, \[xs] -> [| [ XText $ map toUpper x | x <- toString $xs ] |] ),
+        ( "lower-case", 1, \[xs] -> [| [ XText  $ map toLower x | x <- toString $xs ] |] )
+   ]
 
 
 -- Functions to be used by the interpreter. When evaluated, it gives [(String,Int,[XSeq]->XSeq)]
@@ -465,64 +562,92 @@
 -- System functions used by the interpreter. They can be derived from functions using the splicing $(iFunctions),
 -- but haddock crashes during splicing.
 systemFunctions :: [(String,Int,[XSeq]->XSeq)]
-systemFunctions
-    = [ ( "=", 2, \[xs,ys] -> [ trueXT | x <- text xs, y <- text ys, compareXTrees x y == EQ ] ),
-        ( "!=", 2, \[xs,ys] -> if null [ trueXT | x <- text xs, y <- text ys, compareXTrees x y == EQ ]
-                               then [trueXT]
-                               else [falseXT] ),
-      ( ">", 2, \[xs,ys] -> [ trueXT | x <- text xs, y <- text ys, compareXTrees x y == GT ] ),
-      ( "<", 2, \[xs,ys] -> [ trueXT | x <- text xs, y <- text ys, compareXTrees x y == LT ] ),
-      ( ">=", 2, \[xs,ys] -> [ trueXT | x <- text xs, y <- text ys, compareXTrees x y `elem` [GT,EQ] ] ),
-      ( "<=", 2, \[xs,ys] -> [ trueXT | x <- text xs, y <- text ys, compareXTrees x y `elem` [LT,EQ] ] ),
-      ( "eq", 2, \[xs,ys] -> if strictCompare xs ys == EQ then [trueXT] else [falseXT] ),
-      ( "neq", 2, \[xs,ys] -> if strictCompare xs ys /= EQ then [trueXT] else [falseXT] ),
-      ( "lt", 2, \[xs,ys] -> if strictCompare xs ys == LT then [trueXT] else [falseXT] ),
-      ( "gt", 2, \[xs,ys] -> if strictCompare xs ys == GT then [trueXT] else [falseXT] ),
-      ( "le", 2, \[xs,ys] -> if strictCompare xs ys `elem` [LT,EQ] then [trueXT] else [falseXT] ),
-      ( "ge", 2, \[xs,ys] -> if strictCompare xs ys `elem` [GT,EQ] then [trueXT] else [falseXT] ),
-      ( "<<", 2, \[xs,ys] -> [ trueXT | XElem _ _ ox _ _ <- xs, XElem _ _ oy _ _ <- ys, ox < oy ] ),
-      ( ">>", 2, \[xs,ys] -> [ trueXT | XElem _ _ ox _ _ <- xs, XElem _ _ oy _ _ <- ys, ox > oy ] ),
-      ( "is", 2, \[xs,ys] -> [ trueXT | XElem _ _ ox _ _ <- xs, XElem _ _ oy _ _ <- ys, ox == oy ] ),
-      ( "+", 2, \[xs,ys] -> [ arithmetic (+) x y | x <- toNum xs, y <- toNum ys ] ),
-      ( "-", 2, \[xs,ys] -> [ arithmetic (-) x y | x <- toNum xs, y <- toNum ys ] ),
-      ( "*", 2, \[xs,ys] -> [ arithmetic (*) x y | x <- toNum xs, y <- toNum ys ] ),
-      ( "div", 2, \[xs,ys] -> [ arithmetic (/) x y | x <- toNum xs, y <- toNum ys ] ),
-      ( "idiv", 2, \[xs,ys] -> [ XInt (div x y) | (XInt x) <- toNum xs, (XInt y) <- toNum ys ] ),
-      ( "mod", 2, \[xs,ys] -> [ XInt (mod x y) | (XInt x) <- toNum xs, (XInt y) <- toNum ys ] ),
-      ( "uplus", 1, \[xs] -> [ x | x <- toNum xs ] ),
-      ( "uminus", 1, \[xs] -> [ case x of XInt n -> XInt (-n); XFloat n -> XFloat (-n) | x <- toNum xs ] ),
-      ( "and", 2, \[xs,ys] -> if (conditionTest xs) && (conditionTest ys) then [trueXT] else [falseXT] ),
-      ( "or", 2, \[xs,ys] -> if (conditionTest xs) || (conditionTest ys) then [trueXT] else [falseXT] ),
-      ( "not", 1, \[xs] -> if conditionTest xs then [falseXT] else [trueXT] ),
-      ( "some", 1, \[xs] -> if conditionTest xs then [trueXT] else [falseXT] ),
-      ( "count", 1, \[xs] -> [ XInt (length xs) ] ),
-      ( "sum", 1, \[xs] -> [ XFloat (sum [ toFloat x | x <- toNum xs ]) ] ),
-      ( "avg", 1, \[xs] -> [ XFloat (mean [ toFloat x | x <- toNum xs ]) ] ),
-      ( "min", 1, \[xs] -> [ XFloat (minimum [ toFloat x | x <- toNum xs ]) ] ),
-      ( "max", 1, \[xs] -> [ XFloat (maximum [ toFloat x | x <- toNum xs ]) ] ),
-      ( "to", 2, \[xs,ys] -> [ XInt i | XInt n <- toNum xs, XInt m <- toNum ys, i <- [n..m] ] ),
-      ( "text", 1, \[xs] -> text xs ),
-      ( "string", 1, \[xs] -> string xs ),
-      ( "data", 1, \[xs] -> text xs ),
-      ( "node", 1, \[xs] -> [ w | w@(XElem _ _ _ _ _) <- xs ] ),
-      ( "exists", 1, \[xs] -> [ XBool (not (null xs)) ] ),
-      ( "empty", 0, \[] -> [] ),
-      ( "true", 0, \[] -> [trueXT] ),
-      ( "false", 0, \[] -> [] ),
-      ( "if", 3, \[cs,ts,es] -> if conditionTest cs then ts else es ),
-      ( "element", 2, \[tags,xs] -> [ x | tag <- toString tags, x@(XElem t _ _ _ _) <- xs, (t==tag || tag=="*") ] ),
-      ( "attribute", 2, \[tags,xs] -> [ z | tag <- toString tags, x <- xs, z <- attribute_step tag x ] ),
-      ( "name", 1, \[xs] -> [ XText tag | XElem tag _ _ _ _ <- xs ] ),
-      ( "contains", 2, \[xs,text] -> [ trueXT | x <- toString xs, t <- toString text, contains x t ] ),
-      ( "substring", 3, \[xs,n1,n2] -> [ XText (take m2 (drop (m1-1) x)) | x <- toString xs,
-                                         XInt m1 <- toNum n1, XInt m2 <- toNum n2 ] ),
-      ( "concatenate", 2, \[xs,ys] -> xs ++ ys ),
-      ( "distinct-values", 1, \[xs] -> distinct xs ),
-      ( "union", 2, \[xs,ys] -> distinct (xs ++ ys) ),
-      ( "intersect", 2, \[xs,ys] -> filter (\x -> elem x ys) xs ),
-      ( "except", 2, \[xs,ys] -> filter (\x -> not (elem x ys)) xs  ),
-      ( "reverse", 1, \[xs] -> reverse xs ),
-      ( "trace", 2, \[xs,ys] -> trace ("***trace:"++show xs) ys )
+systemFunctions                   --   = $(iFunctions)
+    = [ ( "=", 2, \[xs,ys] -> toBool $ or [ compareXTrees x y == EQ | x <- text xs, y <- text ys ] ),
+        ( "!=", 2, \[xs,ys] -> toBool $ strictCompare xs ys /= EQ ),
+        ( ">", 2, \[xs,ys] -> toBool $ or [ compareXTrees x y == GT | x <- text xs, y <- text ys ] ),
+        ( "<", 2, \[xs,ys] -> toBool $ or [ compareXTrees x y == LT | x <- text xs, y <- text ys ] ),
+        ( ">=", 2, \[xs,ys] -> toBool $ or [ compareXTrees x y `elem` [GT,EQ] | x <- text xs, y <- text ys ] ),
+        ( "<=", 2, \[xs,ys] -> toBool $ or [ compareXTrees x y `elem` [LT,EQ] | x <- text xs, y <- text ys ] ),
+        ( "eq", 2, \[xs,ys] -> toBool $ strictCompare xs ys == EQ ),
+        ( "neq", 2, \[xs,ys] -> toBool $ strictCompare xs ys /= EQ ),
+        ( "lt", 2, \[xs,ys] -> toBool $ strictCompare xs ys == LT ),
+        ( "gt", 2, \[xs,ys] -> toBool $ strictCompare xs ys == GT ),
+        ( "le", 2, \[xs,ys] -> toBool $ strictCompare xs ys `elem` [LT,EQ] ),
+        ( "ge", 2, \[xs,ys] -> toBool $ strictCompare xs ys `elem` [GT,EQ] ),
+        ( "<<", 2, \[xs,ys] -> toBool $ or [ ox < oy | XElem _ _ ox _ _ <- xs, XElem _ _ oy _ _ <- ys ] ),
+        ( ">>", 2, \[xs,ys] -> toBool $ or [ ox > oy | XElem _ _ ox _ _ <- xs, XElem _ _ oy _ _ <- ys ] ),
+        ( "is", 2, \[xs,ys] -> toBool $ or [ ox == oy | XElem _ _ ox _ _ <- xs, XElem _ _ oy _ _ <- ys ] ),
+        ( "+", 2, \[xs,ys] -> [ arithmetic (+) x y | x <- toNum xs, y <- toNum ys ] ),
+        ( "-", 2, \[xs,ys] -> [ arithmetic (-) x y | x <- toNum xs, y <- toNum ys ] ),
+        ( "*", 2, \[xs,ys] -> [ arithmetic (*) x y | x <- toNum xs, y <- toNum ys ] ),
+        ( "div", 2, \[xs,ys] -> [ arithmetic (/) x y | x <- toNum xs, y <- toNum ys ] ),
+        ( "idiv", 2, \[xs,ys] -> [ XInt (div x y) | (XInt x) <- toNum xs, (XInt y) <- toNum ys ] ),
+        ( "mod", 2, \[xs,ys] -> [ XInt (mod x y) | (XInt x) <- toNum xs, (XInt y) <- toNum ys ] ),
+        ( "uplus", 1, \[xs] -> [ x | x <- toNum xs ] ),
+        ( "uminus", 1, \[xs] -> [ case x of XInt n -> XInt (-n); XFloat n -> XFloat (-n) | x <- toNum xs ] ),
+        ( "and", 2, \[xs,ys] -> toBool $ (conditionTest xs) && (conditionTest ys) ),
+        ( "or", 2, \[xs,ys] -> toBool $ (conditionTest xs) || (conditionTest ys) ),
+        ( "not", 1, \[xs] -> toBool $ not $ conditionTest xs ),
+        ( "count", 1, \[xs] -> [ XInt (length xs) ] ),
+        ( "sum", 1, \[xs] -> [ XFloat (sum [ toFloat x | x <- toNum xs ]) ] ),
+        ( "avg", 1, \[xs] -> [ XFloat (mean [ toFloat x | x <- toNum xs ]) ] ),
+        ( "min", 1, \[xs] -> [ XFloat (minimum [ toFloat x | x <- toNum xs ]) ] ),
+        ( "max", 1, \[xs] -> [ XFloat (maximum [ toFloat x | x <- toNum xs ]) ] ),
+        ( "to", 2, \[xs,ys] -> [ XInt i | XInt n <- toNum xs, XInt m <- toNum ys, i <- [n..m] ] ),
+        ( "text", 1, \[xs] -> [ w | XElem _ _ _ _ ts <- xs, w <- text ts ] ),
+        ( "string", 1, \[xs] -> string xs ),
+        ( "data", 1, \[xs] -> text xs ),
+        ( "node", 1, \[xs] -> [ w | XElem _ _ _ _ ts <- xs, w <- ts ] ),
+        ( "exists", 1, \[xs] -> toBool $ (not (null xs)) ),
+        ( "some", 1, \[xs] -> toBool $ or [ conditionTest [x] | x <- xs ] ),
+        ( "empty", 0, \[] -> [] ),
+        ( "empty", 1, \[xs] -> toBool $ null xs ),
+        ( "true", 0, \[] -> [trueXT] ),
+        ( "false", 0, \[] -> [falseXT] ),
+        ( "if", 3, \[cs,xs,ys] -> if conditionTest cs then xs else ys ),
+        ( "name", 1, \[xs] -> getNames xs ),
+        ( "local-name", 1, \[xs] -> getNames xs ),
+        ( "contains", 2, \[xs,text] -> toBool $ or [ contains x t | x <- toString xs, t <- toString text ] ),
+        ( "substring", 3, \[xs,n1,n2] -> [ XText (take m2 (drop (m1-1) x)) | x <- toString xs,
+                                           XInt m1 <- toNum n1, XInt m2 <- toNum n2 ] ),
+        ( "concatenate", 2, \[xs,ys] -> xs ++ ys ),
+        ( "distinct-values", 1, \[xs] -> distinct xs ),
+        ( "union", 2, \[xs,ys] -> distinct (xs ++ ys) ),
+        ( "intersect", 2, \[xs,ys] -> intersect xs ys ),
+        ( "except", 2, \[xs,ys] -> xs \\ ys ),
+        ( "reverse", 1, \[xs] -> reverse xs ),
+        ( "trace", 2, \[xs,ys] -> trace ("*** trace: "++show xs) ys ),
+        ( "error", 0, \[] -> error "XQuery error" ),
+        ( "error", 2, \[xs,ys] -> error (showXS xs++": "++show ys) ),
+        ( "substring", 2, \[xs,n] -> [ XText (drop (m-1) x) | x <- toString xs, XInt m <- toNum n ] ),
+        ( "substring-before", 2, \[xs,ys] -> [ XText (substring_before x y)  | x <- toString xs, y <- toString ys ] ),
+        ( "substring-after", 2, \[xs,ys] -> [ XText (substring_after x y)  | x <- toString xs, y <- toString ys ] ),
+        ( "starts-with", 2, \[xs,ys] -> toBool $ or [ x == "" || isPrefixOf y x  | x <- toString xs, y <- toString ys ] ),
+        ( "ends-with", 2, \[xs,ys] -> toBool $ or [ x == "" || isSuffixOf y x  | x <- toString xs, y <- toString ys ] ),
+        ( "concat", -1, \ss -> [ XText $ foldr (\s r -> concat [ x | x <- toString s ] ++ r) "" ss ] ),
+        ( "string-join", 2, \[xs,ys] -> [ XText $ intercalate y (toString xs) | y <- toString ys ] ),
+        ( "substitute-string", 3, \[xs,ys,zs] -> [ XText $ replace x y z  | x <- toString xs, y <- toString ys, z <- toString zs ] ),
+        ( "string-length", 1, \[xs] -> [ XInt $ length x | x <- toString xs ] ),
+        ( "number", 1, \[xs] -> toNum xs ),
+        ( "boolean", 1, \[xs] -> toBool $ or [ conditionTest [x] | x <- xs ] ),
+        ( "abs", 1, \[xs] -> [ case x of XInt n -> XInt (abs n); XFloat n -> XFloat (abs n) | x <- toNum xs ] ),
+        ( "ceiling", 1, \[xs] -> [ case x of XInt n -> XInt n; XFloat n -> XInt (ceiling n) | x <- toNum xs ] ),
+        ( "round", 1, \[xs] -> [ case x of XInt n -> XInt n; XFloat n -> XInt (round n) | x <- toNum xs ] ),
+        ( "floor", 1, \[xs] -> [ case x of XInt n -> XInt n; XFloat n -> XInt (floor n) | x <- toNum xs ] ),
+        ( "index-of", 2, \[xs,ys] -> [ XInt (i+1) | y <- ys, i <- elemIndices y xs ] ),
+        ( "remove", 2, \[xs,ys] -> concat [ (take (i-1) xs)++(drop i xs) | XInt i <- toNum ys ] ),
+        ( "subsequence", 2, \[xs,n] -> concat [ drop (m-1) xs | XInt m <- toNum n ] ),
+        ( "subsequence", 3, \[xs,n1,n2] -> concat [ take m2 (drop (m1-1) xs) | XInt m1 <- toNum n1, XInt m2 <- toNum n2 ] ),
+        ( "last", 0, \[] -> error "the 'last()' call must be handled separately" ),
+        ( "position", 0, \[] -> error "the 'position()' call must be handled separately" ),
+        ( "insert-before", 3, \[xs,n,ys] -> concat [ (take (i-1) xs)++ys++(drop (i-1) xs) | XInt i <- toNum n ] ),
+        ( "deep-equal", 2, \[xs,ys] -> toBool $ or [ deep_equal x y | x <- xs, y <- ys ] ),
+        ( "translate", 3, \[xs,ys,zs] -> [ XText $ translate_string x y z  | x <- toString xs, y <- toString ys, z <- toString zs ] ),
+        ( "matches", 2, \[xs,ys] -> toBool $ or [ matchTest (mkRegex y) x | x <- toString xs, y <- toString ys ] ),
+        ( "compare", 2, \[xs,ys] -> [ XInt $ case compare x y of EQ -> 0; LT -> -1; GT -> 1 | x <- toString xs, y <- toString ys ] ),
+        ( "upper-case", 1, \[xs] -> [ XText $ map toUpper x | x <- toString xs ] ),
+        ( "lower-case", 1, \[xs] -> [ XText  $ map toLower x | x <- toString xs ] )
    ]
 
 
@@ -546,10 +671,7 @@
 callF :: Tag -> Function
 callF fname args
     = case filter (\(n,_,_) -> n == fname || ("fn:"++n)==fname) functions of
-        (_,len,f):_ -> if (length args) == len
-                       then f args
-                       else error ("wrong number of arguments in function call: " ++ fname)
-        _ ->     -- otherwise, it must be a Haskell function of type (XSeq,...,XSeq) -> IO XSeq
+        [] ->     -- must be a Haskell function of type (XSeq,...,XSeq) -> IO XSeq
              let itp = case args of
                          [] -> [t| () |]
                          [_] -> [t| XSeq |]
@@ -558,3 +680,6 @@
                  fn = sigE (varE (mkName fname))
                            (appT (appT arrowT itp) [t| IO XSeq |])
              in appE fn (tupE args)
+        fs -> case filter (\(_,len,_) -> len < 0 || length args == len) fs of
+                [] -> error ("wrong number of arguments in function call: " ++ fname)
+                (_,_,f):_ -> f args
diff --git a/src/Text/XML/HXQ/Interpreter.hs b/src/Text/XML/HXQ/Interpreter.hs
--- a/src/Text/XML/HXQ/Interpreter.hs
+++ b/src/Text/XML/HXQ/Interpreter.hs
@@ -4,7 +4,7 @@
 - Programmer: Leonidas Fegaras
 - Email: fegaras@cse.uta.edu
 - Web: http://lambda.uta.edu/
-- Creation: 03/22/08, last update: 12/19/08
+- Creation: 03/22/08, last update: 01/04/09
 - 
 - Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved.
 - This material is provided as is, with absolutely no warranty expressed or implied.
@@ -47,7 +47,9 @@
 applyPredicates :: [Ast] -> XSeq -> Bool -> Environment -> Functions -> XSeq
 applyPredicates [] xs _ _ _ = xs
 applyPredicates ((Aint n):preds) xs _ env fncs   -- shortcut that improves laziness
-    = applyPredicates preds [xs !! (n-1)] True env fncs
+    = applyPredicates preds (index xs (n-1)) True env fncs
+applyPredicates ((Ast "call" [Avar "last"]):preds) xs _  env fncs
+    = applyPredicates preds [ last $xs ] True  env fncs
 applyPredicates (pred:preds) xs True env fncs    -- top-k like
     | maxPosition pathPosition pred > 0
     = applyPredicates (pred:preds) (take (maxPosition pathPosition pred) xs) False env fncs
@@ -119,25 +121,26 @@
       Ast "call" ((Avar fname):args)
           -> let vs = map (\x -> eval x context position last effective_axis env fncs) args
              in case filter (\(n,_,_) -> n == fname || ("fn:"++n) == fname) systemFunctions of
-                       [(_,len,f)] -> if (length args) == len
-                                      then f vs
-                                      else error ("Wrong number of arguments in system call: "++fname)
-                       _ -> error "External function calls must be within the IO monad"
-      Ast "construction" [Astring tag,id,parent,Ast "attributes" [],body]
-          -> let [XText vid] = eval id context position last effective_axis env fncs
-                 vparent = eval parent context position last effective_axis env fncs
-             in [ XElem tag [] (read vid) (if null vparent then parent_error else head vparent)
-                            (eval body context position last effective_axis env fncs) ]
+                  [] -> error "External function calls must be within the IO monad"
+                  fs -> case filter (\(_,len,_) -> len < 0 || length args == len) fs of
+                          [] -> error ("wrong number of arguments in function call: " ++ fname)
+                          (_,_,f):_ -> f vs
       Ast "construction" [tag,id,parent,Ast "attributes" al,body]
-             -> let alc = concatMap (\(Ast "pair" [a,v])
+             -> let ct = eval tag context position last effective_axis env fncs
+                    bc = eval body context position last effective_axis env fncs
+                    (as,bs) = span (\x -> case x of XAttr _ _ -> True; _ -> False) bc
+                    alc = concatMap (\(Ast "pair" [a,v])
                                      -> let ac = eval a context position last effective_axis env fncs
                                             vc = eval v context position last effective_axis env fncs
                                         in if vc==[XNull] then [] else [(qName ac,showXS vc)]) al
-                    ct = eval tag context position last effective_axis env fncs
-                    bc = eval body context position last effective_axis env fncs
+                          ++ [ (n,v) | XAttr n v <- as ]
                     [XText vid] = eval id context position last effective_axis env fncs
                     vparent = eval parent context position last effective_axis env fncs
-                in [ XElem (qName ct) alc (read vid) (if null vparent then parent_error else head vparent) bc ]
+                in [ XElem (qName ct) alc (read vid) (if null vparent then parent_error else head vparent) bs ]
+      Ast "attribute_construction" [name,value]
+          -> let ns = eval name context position last effective_axis env fncs
+                 vs = eval value context position last effective_axis env fncs
+             in [ XAttr (qName ns) (showXS vs) ]
       Ast "let" [Avar var,source,body]
           -> eval body context position last effective_axis
                   ((var,eval source context position last effective_axis env fncs):env) fncs
@@ -175,10 +178,12 @@
 applyPredicatesM :: [Ast] -> XSeq -> Bool -> Environment -> Functions -> Connection -> Statements -> IO XSeq
 applyPredicatesM [] xs _ _ _ _ _ = return $! xs
 applyPredicatesM ((Aint n):preds) xs _ env fncs db stmts   -- shortcut that improves laziness
-    = applyPredicatesM preds [xs !! (n-1)] True env fncs db stmts
+    = applyPredicatesM preds (index xs (n-1)) True env fncs db stmts
 applyPredicatesM (pred:preds) xs True env fncs db stmts    -- top-k like
     | maxPosition pathPosition pred > 0
     = applyPredicatesM (pred:preds) (take (maxPosition pathPosition pred) xs) False env fncs db stmts
+applyPredicatesM ((Ast "call" [Avar "last"]):preds) xs _  env fncs db stmts
+    = applyPredicatesM preds [ last $xs ] True  env fncs db stmts
 applyPredicatesM (pred:preds) xs _ env fncs db stmts
     | containsLast pred         -- blocking: use only when last() is used in the predicate
     = do let last = length xs
@@ -221,7 +226,7 @@
       Ast "call" [Avar f,Astring file]
           | elem f ["doc","fn:doc"]
           -> do doc <- readFile file
-                return [materialize False (parseDocument doc)]
+                return $! [materialize False (parseDocument doc)]
       Ast "step" (Avar "child":tag:Avar ".":preds)
           | effective_axis /= ""
           -> evalM (Ast "step" (Avar effective_axis:tag:Avar ".":preds)) context position last "" env fncs db stmts
@@ -270,32 +275,33 @@
                 replaceDB db v1 v2
       Ast "call" ((Avar fname):args)        -- Note: strict function application
           -> case filter (\(n,_,_) -> n == fname || ("fn:"++n) == fname) systemFunctions of
-               [(_,len,f)] -> if (length args) == len
-                              then do vs <- mapM (\x -> evalM x context position last effective_axis env fncs db stmts) args
-                                      return $ f vs
-                              else error ("Wrong number of arguments in system call: "++fname)
-               _ -> case filter (\(n,_,_) -> n == fname) fncs of
-                      (_,params,body):_ -> if (length params) == (length args)
-                                           then do vs <- mapM (\a -> evalM a context position last effective_axis env fncs db stmts) args
-                                                   evalM body context undefv2 undefv3 ""
-                                                             ((zipWith (\p a -> (p,a)) params vs)++env) fncs db stmts
-                                           else error ("Wrong number of arguments in function call: "++fname)
-                      _ -> error ("Undefined function: "++fname)
-      Ast "construction" [Astring tag,id,parent,Ast "attributes" [],body]
-          -> do b <- evalM body context position last effective_axis env fncs db stmts
-                [XText vid] <- evalM id context position last effective_axis env fncs db stmts
-                vparent <- evalM parent context position last effective_axis env fncs db stmts
-                return $! [ XElem tag [] (read vid) (if null vparent then parent_error else head vparent) b ]
+               [] -> case filter (\(n,_,_) -> n == fname) fncs of
+                       (_,params,body):_ -> if (length params) == (length args)
+                                            then do vs <- mapM (\a -> evalM a context position last effective_axis env fncs db stmts) args
+                                                    evalM body context undefv2 undefv3 ""
+                                                             ((zip params vs)++env) fncs db stmts
+                                            else error ("Wrong number of arguments in function call: "++fname)
+                       _ -> error ("Undefined function: "++fname)
+               fs -> case filter (\(_,len,_) -> len < 0 || length args == len) fs of
+                       [] -> error ("wrong number of arguments in function call: " ++ fname)
+                       (_,_,f):_ -> do vs <- mapM (\x -> evalM x context position last effective_axis env fncs db stmts) args
+                                       return $ f vs
       Ast "construction" [tag,id,parent,Ast "attributes" al,body]
-             -> do alc <- foldM (\r (Ast "pair" [a,v])
+             -> do ct <- evalM tag context position last effective_axis env fncs db stmts
+                   bc <- evalM body context position last effective_axis env fncs db stmts
+                   let (as,bs) = span (\x -> case x of XAttr _ _ -> True; _ -> False) bc
+                   alc <- foldM (\r (Ast "pair" [a,v])
                                      -> do ac <- evalM a context position last effective_axis env fncs db stmts
                                            vc <- evalM v context position last effective_axis env fncs db stmts
                                            if vc==[XNull] then return r else return $! (qName ac,showXS vc):r) [] al
-                   ct <- evalM tag context position last effective_axis env fncs db stmts
-                   bc <- evalM body context position last effective_axis env fncs db stmts
                    [XText vid] <- evalM id context position last effective_axis env fncs db stmts
                    vparent <- evalM parent context position last effective_axis env fncs db stmts
-                   return $! [ XElem (qName ct) alc (read vid) (if null vparent then parent_error else head vparent) bc ]
+                   return $! [ XElem (qName ct) (alc ++ [ (n,v) | XAttr n v <- as ])
+                                         (read vid) (if null vparent then parent_error else head vparent) bs ]
+      Ast "attribute_construction" [name,value]
+          -> do n <- evalM name context position last effective_axis env fncs db stmts
+                v <- evalM value context position last effective_axis env fncs db stmts
+                return $! [ XAttr (qName n) (showXS v) ]
       Ast "let" [Avar var,source,body]
           -> do s <- evalM source context position last effective_axis env fncs db stmts
                 evalM body context position last effective_axis ((var,s):env) fncs db stmts
@@ -331,24 +337,25 @@
 -- evaluate from input continuously
 evalInput :: (String -> Environment -> Functions -> IO(Environment,Functions)) -> Environment -> Functions -> IO ()
 evalInput eval vs fs
-    = do let oneline prompt = do line <- readline prompt
+    = do let bracs s = (length $ filter (== '{') s) - (length $ filter (== '}') s)
+             oneline prompt = do line <- readline prompt
                                  case line of
-                                   Nothing -> return "quit"
+                                   Nothing -> return ("quit",0)
                                    Just t -> if t == ""
                                              then oneline prompt
-                                             else return $! t
-             readlines x = do line <- oneline ": "
-                              if last line == '}'
-                                 then return $! (x++" "++(init line))
-                                 else if line == "quit"
-                                      then return $! line
-                                      else readlines (x++" "++line)
-         line <- oneline "> "
-         stmt <- if head line == '{'
-                 then if last line == '}'
-                      then return $! (init (tail line))
-                      else readlines (tail line)
-                 else return $! line
+                                             else return $! (t,bracs t)
+             readlines x c = do (line,bs) <- oneline ": "
+                                if last line == '}' && bs+c == 0
+                                   then return $! (x++" "++(init line),0)
+                                   else if line == "quit"
+                                        then return $! (line,0)
+                                        else readlines (x++" "++line) (bs+c)
+         (line,c) <- oneline "> "
+         (stmt,_) <- if head line == '{'
+                     then if last line == '}' && c==0
+                          then return $! (init (tail line),0)
+                          else readlines (tail line) c
+                     else return $! (line,0)
          if stmt == "quit"
             then putStrLn "Bye!"
             else do addHistory stmt
diff --git a/src/Text/XML/HXQ/Optimizer.hs b/src/Text/XML/HXQ/Optimizer.hs
--- a/src/Text/XML/HXQ/Optimizer.hs
+++ b/src/Text/XML/HXQ/Optimizer.hs
@@ -4,7 +4,7 @@
 - Programmer: Leonidas Fegaras
 - Email: fegaras@cse.uta.edu
 - Web: http://lambda.uta.edu/
-- Creation: 05/01/08, last update: 11/23/08
+- Creation: 05/01/08, last update: 01/05/09
 - 
 - Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved.
 - This material is provided as is, with absolutely no warranty expressed or implied.
@@ -90,6 +90,7 @@
          return (Ast "step" (Avar "self":tag:nx:preds),cond,childp,t)
 removeParent (Ast "step" (Avar "child":tag:x:preds))
     = Just (Ast "step" (Avar "child":tag:Avar ".":preds),x,True,tag)
+
 removeParent (Ast "step" (Avar "descendant-or-self":tag:x:preds))
     = Just (Ast "step" (Avar "child":tag:Avar ".":preds),
             Ast "step" [Avar "descendant-or-self",Astring "*",x],True,tag)
@@ -173,18 +174,18 @@
     = case collect_attributes content of
         (nc,(Ast "pair" [Astring "_id",id]):(Ast "pair" [Astring "_parent",parent]):attrs)
             -> simplify (Ast "construction" [tag,id,parent,Ast "attributes" (as++attrs),nc])
-        (nc,attrs) -> simplify (Ast "construction" [tag,Astring "0",Ast "call" [Avar "empty"],Ast "attributes" (as++attrs),nc])
+	(nc,attrs) -> simplify (Ast "construction" [tag,Astring "0",Ast "call" [Avar "empty"],Ast "attributes" (as++attrs),nc])
 -- if //* collect all children tagnames to use descendant_any
-simplify (Ast "for" [Avar var,i,Ast "step" (Avar "descendant-or-self":Astring "*":path:preds),body])
+simplify (Ast "for" [Avar var,i,Ast "step" (Avar "descendant":Astring "*":path:preds),body])
     | not (null ((tagged_children var body))) || any (not . null . (tagged_children ".")) preds
     = let ctags = distinct ((tagged_children var body)++(concatMap (tagged_children ".") preds))
           tags = Ast "tags" (map Avar ctags)
       in simplify (Ast "for" [Avar var,i,Ast "step" (Avar "descendant_any":tags:path:preds),body])
-simplify (Ast "step" (Avar "child":Astring tag:Ast "step" (Avar "descendant-or-self":Astring "*":path:preds):preds2))
+simplify (Ast "step" (Avar "child":Astring tag:Ast "step" (Avar "descendant":Astring "*":path:preds):preds2))
     = let ctags = distinct(tag:(concatMap (tagged_children ".") preds))
           tags = Ast "tags" (map Avar ctags)
       in simplify (Ast "step" (Avar "child":Astring tag:Ast "step" (Avar "descendant_any":tags:path:preds):preds2))
-simplify (Ast "step" (Avar "descendant-or-self":Astring "*":path:preds))
+simplify (Ast "step" (Avar "descendant":Astring "*":path:preds))
     | any (not . null . (tagged_children ".")) preds
     = let ctags = distinct (concatMap (tagged_children ".") preds)
           tags = Ast "tags" (map Avar ctags)
@@ -352,9 +353,11 @@
 
 
 findAttr :: String -> [Ast] -> Ast
-findAttr tag ((Ast "pair" [Astring a,v]):_)
+findAttr tag ((Ast "pair" [n@(Astring a),v]):xs)
     | a==tag || tag=="*"
-    = v
+    = case findAttr tag xs of
+        Ast "call" [Avar "empty"] -> Ast "attribute_construction" [n,v]
+        z -> Ast "call" [Avar "concatenate",Ast "attribute_construction" [n,v],z]
 findAttr tag (_:xs) = findAttr tag xs
 findAttr _ [] = empty
 
@@ -573,9 +576,14 @@
                      then subst v e b
                      else subst v e (subst i (Aint 1) b))
 -- normalize XPath steps
-        Ast "step" (step:tag:Ast "step" (Avar "self":Astring "*":x:preds1):preds2)
+        Ast "step" (Avar "self":Astring "*":Ast "step" (step:tag:x:preds2):preds1)
+            -> norm (Ast "step" (step:tag:x:preds1++preds2))
+        Ast "step" (step:tag:Ast "step" (Avar "self":Astring "*":x@(Ast "construction" _):preds1):preds2)
             -> let npreds1 = map (substContext x) preds1
                in norm (Ast "step" (step:tag:x:npreds1++preds2))
+        Ast "step" (step:tag:x:(Ast "step" (Avar "self":Astring "*":y:preds2)):preds1)
+            -> let npreds2 = map (substContext y) preds2
+               in norm (Ast "step" (step:tag:x:preds1++npreds2))
         -- (for $v in s return b)/tag  -->  for $v in s return b/tag
         Ast "step" (step:tag:Ast "for" [v,i,s,b]:preds)
             | all (wellFormedPredicate False) preds
@@ -603,6 +611,8 @@
         Ast "step" (Avar "descendant_any":tags:z@(Ast "construction" [Astring ctag,_,_,al,Ast "append" x]):preds)
             -> norm (Ast "call" [Avar "concatenate",predicates z preds,
                                  Ast "step" (Avar "descendant_any":tags:concatenateAll x:preds)])
+        Ast "step" (Avar "descendant":Astring tag:Ast "construction" [_,_,_,al,Ast "append" x]:preds)
+            -> norm (Ast "step" (Avar "descendant-or-self":Astring tag:concatenateAll x:preds))
         Ast "step" (Avar "descendant-or-self":Astring tag:z@(Ast "construction" [Astring ctag,_,_,al,Ast "append" x]):preds)
             -> norm (if tag == ctag || tag == "*"
                      then Ast "call" [Avar "concatenate",predicates z preds,
@@ -612,9 +622,9 @@
         Ast "step" (Avar "attribute":Astring tag:Ast "construction" [ctag,_,_,Ast "attributes" as,x]:preds)
             -> norm (predicates (findAttr tag as) preds)
         -- (<tag A=s>x</tag>)//@A  --> (s,x//@A)
-        Ast "step" (Avar "attribute_descendant":Astring tag:Ast "construction" [ctag,_,_,Ast "attributes" as,Ast "append" x]:preds)
+        Ast "step" (Avar "attribute-descendant":Astring tag:Ast "construction" [ctag,_,_,Ast "attributes" as,Ast "append" x]:preds)
             -> norm (Ast "call" [Avar "concatenate",predicates (findAttr tag as) preds,
-                                 Ast "step" (Avar "attribute_descendant":Astring tag:concatenateAll x:preds)])
+                                 Ast "step" (Avar "attribute-descendant":Astring tag:concatenateAll x:preds)])
 -- SQL folding
         Ast "for" [Avar v1,Avar "$",Ast "call" [Avar "SQL",Ast "call" ((Avar "select"):s1),Ast "call" ((Avar "tables"):f1),pred1],
                    Ast "for" [Avar v2,Avar "$",Ast "call" [Avar "SQL",Ast "call" ((Avar "select"):s2),Ast "call" ((Avar "tables"):f2),pred2],
@@ -631,6 +641,11 @@
                in norm (Ast "for" [Avar v,Avar "$",Ast "call" [Avar "SQL",Ast "call" ((Avar "select"):s),
                                                                Ast "call" ((Avar "tables"):tables),Ast "call" [Avar "and",pred1,pred3]],
                                    Ast "step" (Avar "self":Astring "*":x:pred4)])
+        Ast "for" [Avar v,Avar "$",Ast "call" [Avar "SQL",Ast "call" ((Avar "select"):s),Ast "call" ((Avar "tables"):tables),pred1],
+                   Ast "step" (Avar "self":Astring "*":x:pred2)]
+            | occursContext x == 0 && sum (map occursContext pred2) > 0
+            -> norm (Ast "for" [Avar v,Avar "$",Ast "call" [Avar "SQL",Ast "call" ((Avar "select"):s),Ast "call" ((Avar "tables"):tables),pred1],
+                                Ast "step" (Avar "self":Astring "*":x:map (substContext x) pred2)])
         Ast "for" [Avar v1,Avar "$",Ast "call" [Avar "SQL",Ast "call" ((Avar "select"):s1),Ast "call" ((Avar "tables"):f1),pred1],
                    Ast "for" [Avar v2,Avar "$",Ast "call" [Avar "SQL",Ast "call" ((Avar "select"):s2),Ast "call" ((Avar "tables"):f2),pred2],
                               Ast "step" (Avar "self":Astring "*":b:predd)]]
diff --git a/src/Text/XML/HXQ/Parser.hs b/src/Text/XML/HXQ/Parser.hs
--- a/src/Text/XML/HXQ/Parser.hs
+++ b/src/Text/XML/HXQ/Parser.hs
@@ -1,2107 +1,2175 @@
 {-# OPTIONS -fglasgow-exts -cpp #-}
-module Text.XML.HXQ.Parser where
-import Char
-#if __GLASGOW_HASKELL__ >= 503
-import Data.Array
-#else
-import Array
-#endif
-#if __GLASGOW_HASKELL__ >= 503
-import GHC.Exts
-#else
-import GlaExts
-#endif
-
--- parser produced by Happy Version 1.17
-
-newtype HappyAbsSyn  = HappyAbsSyn HappyAny
-#if __GLASGOW_HASKELL__ >= 607
-type HappyAny = GHC.Exts.Any
-#else
-type HappyAny = forall a . a
-#endif
-happyIn4 :: ([ Ast ]) -> (HappyAbsSyn )
-happyIn4 x = unsafeCoerce# x
-{-# INLINE happyIn4 #-}
-happyOut4 :: (HappyAbsSyn ) -> ([ Ast ])
-happyOut4 x = unsafeCoerce# x
-{-# INLINE happyOut4 #-}
-happyIn5 :: (Ast) -> (HappyAbsSyn )
-happyIn5 x = unsafeCoerce# x
-{-# INLINE happyIn5 #-}
-happyOut5 :: (HappyAbsSyn ) -> (Ast)
-happyOut5 x = unsafeCoerce# x
-{-# INLINE happyOut5 #-}
-happyIn6 :: (String) -> (HappyAbsSyn )
-happyIn6 x = unsafeCoerce# x
-{-# INLINE happyIn6 #-}
-happyOut6 :: (HappyAbsSyn ) -> (String)
-happyOut6 x = unsafeCoerce# x
-{-# INLINE happyOut6 #-}
-happyIn7 :: ([ Ast ]) -> (HappyAbsSyn )
-happyIn7 x = unsafeCoerce# x
-{-# INLINE happyIn7 #-}
-happyOut7 :: (HappyAbsSyn ) -> ([ Ast ])
-happyOut7 x = unsafeCoerce# x
-{-# INLINE happyOut7 #-}
-happyIn8 :: (String) -> (HappyAbsSyn )
-happyIn8 x = unsafeCoerce# x
-{-# INLINE happyIn8 #-}
-happyOut8 :: (HappyAbsSyn ) -> (String)
-happyOut8 x = unsafeCoerce# x
-{-# INLINE happyOut8 #-}
-happyIn9 :: (Ast) -> (HappyAbsSyn )
-happyIn9 x = unsafeCoerce# x
-{-# INLINE happyIn9 #-}
-happyOut9 :: (HappyAbsSyn ) -> (Ast)
-happyOut9 x = unsafeCoerce# x
-{-# INLINE happyOut9 #-}
-happyIn10 :: (Ast) -> (HappyAbsSyn )
-happyIn10 x = unsafeCoerce# x
-{-# INLINE happyIn10 #-}
-happyOut10 :: (HappyAbsSyn ) -> (Ast)
-happyOut10 x = unsafeCoerce# x
-{-# INLINE happyOut10 #-}
-happyIn11 :: ([ Ast ]) -> (HappyAbsSyn )
-happyIn11 x = unsafeCoerce# x
-{-# INLINE happyIn11 #-}
-happyOut11 :: (HappyAbsSyn ) -> ([ Ast ])
-happyOut11 x = unsafeCoerce# x
-{-# INLINE happyOut11 #-}
-happyIn12 :: (Ast -> Ast) -> (HappyAbsSyn )
-happyIn12 x = unsafeCoerce# x
-{-# INLINE happyIn12 #-}
-happyOut12 :: (HappyAbsSyn ) -> (Ast -> Ast)
-happyOut12 x = unsafeCoerce# x
-{-# INLINE happyOut12 #-}
-happyIn13 :: (Ast -> Ast) -> (HappyAbsSyn )
-happyIn13 x = unsafeCoerce# x
-{-# INLINE happyIn13 #-}
-happyOut13 :: (HappyAbsSyn ) -> (Ast -> Ast)
-happyOut13 x = unsafeCoerce# x
-{-# INLINE happyOut13 #-}
-happyIn14 :: (Ast -> Ast) -> (HappyAbsSyn )
-happyIn14 x = unsafeCoerce# x
-{-# INLINE happyIn14 #-}
-happyOut14 :: (HappyAbsSyn ) -> (Ast -> Ast)
-happyOut14 x = unsafeCoerce# x
-{-# INLINE happyOut14 #-}
-happyIn15 :: (Ast -> Ast) -> (HappyAbsSyn )
-happyIn15 x = unsafeCoerce# x
-{-# INLINE happyIn15 #-}
-happyOut15 :: (HappyAbsSyn ) -> (Ast -> Ast)
-happyOut15 x = unsafeCoerce# x
-{-# INLINE happyOut15 #-}
-happyIn16 :: (( Ast -> Ast, Ast -> Ast )) -> (HappyAbsSyn )
-happyIn16 x = unsafeCoerce# x
-{-# INLINE happyIn16 #-}
-happyOut16 :: (HappyAbsSyn ) -> (( Ast -> Ast, Ast -> Ast ))
-happyOut16 x = unsafeCoerce# x
-{-# INLINE happyOut16 #-}
-happyIn17 :: (( [ Ast ], [ Ast ] )) -> (HappyAbsSyn )
-happyIn17 x = unsafeCoerce# x
-{-# INLINE happyIn17 #-}
-happyOut17 :: (HappyAbsSyn ) -> (( [ Ast ], [ Ast ] ))
-happyOut17 x = unsafeCoerce# x
-{-# INLINE happyOut17 #-}
-happyIn18 :: (Ast) -> (HappyAbsSyn )
-happyIn18 x = unsafeCoerce# x
-{-# INLINE happyIn18 #-}
-happyOut18 :: (HappyAbsSyn ) -> (Ast)
-happyOut18 x = unsafeCoerce# x
-{-# INLINE happyOut18 #-}
-happyIn19 :: (Ast) -> (HappyAbsSyn )
-happyIn19 x = unsafeCoerce# x
-{-# INLINE happyIn19 #-}
-happyOut19 :: (HappyAbsSyn ) -> (Ast)
-happyOut19 x = unsafeCoerce# x
-{-# INLINE happyOut19 #-}
-happyIn20 :: (Ast) -> (HappyAbsSyn )
-happyIn20 x = unsafeCoerce# x
-{-# INLINE happyIn20 #-}
-happyOut20 :: (HappyAbsSyn ) -> (Ast)
-happyOut20 x = unsafeCoerce# x
-{-# INLINE happyOut20 #-}
-happyIn21 :: ([ Ast ]) -> (HappyAbsSyn )
-happyIn21 x = unsafeCoerce# x
-{-# INLINE happyIn21 #-}
-happyOut21 :: (HappyAbsSyn ) -> ([ Ast ])
-happyOut21 x = unsafeCoerce# x
-{-# INLINE happyOut21 #-}
-happyIn22 :: ([ Ast ]) -> (HappyAbsSyn )
-happyIn22 x = unsafeCoerce# x
-{-# INLINE happyIn22 #-}
-happyOut22 :: (HappyAbsSyn ) -> ([ Ast ])
-happyOut22 x = unsafeCoerce# x
-{-# INLINE happyOut22 #-}
-happyIn23 :: (Ast) -> (HappyAbsSyn )
-happyIn23 x = unsafeCoerce# x
-{-# INLINE happyIn23 #-}
-happyOut23 :: (HappyAbsSyn ) -> (Ast)
-happyOut23 x = unsafeCoerce# x
-{-# INLINE happyOut23 #-}
-happyIn24 :: ([Ast]) -> (HappyAbsSyn )
-happyIn24 x = unsafeCoerce# x
-{-# INLINE happyIn24 #-}
-happyOut24 :: (HappyAbsSyn ) -> ([Ast])
-happyOut24 x = unsafeCoerce# x
-{-# INLINE happyOut24 #-}
-happyIn25 :: ([ Ast ]) -> (HappyAbsSyn )
-happyIn25 x = unsafeCoerce# x
-{-# INLINE happyIn25 #-}
-happyOut25 :: (HappyAbsSyn ) -> ([ Ast ])
-happyOut25 x = unsafeCoerce# x
-{-# INLINE happyOut25 #-}
-happyIn26 :: (Ast) -> (HappyAbsSyn )
-happyIn26 x = unsafeCoerce# x
-{-# INLINE happyIn26 #-}
-happyOut26 :: (HappyAbsSyn ) -> (Ast)
-happyOut26 x = unsafeCoerce# x
-{-# INLINE happyOut26 #-}
-happyIn27 :: (Ast -> Ast) -> (HappyAbsSyn )
-happyIn27 x = unsafeCoerce# x
-{-# INLINE happyIn27 #-}
-happyOut27 :: (HappyAbsSyn ) -> (Ast -> Ast)
-happyOut27 x = unsafeCoerce# x
-{-# INLINE happyOut27 #-}
-happyIn28 :: (Ast -> Ast) -> (HappyAbsSyn )
-happyIn28 x = unsafeCoerce# x
-{-# INLINE happyIn28 #-}
-happyOut28 :: (HappyAbsSyn ) -> (Ast -> Ast)
-happyOut28 x = unsafeCoerce# x
-{-# INLINE happyOut28 #-}
-happyIn29 :: ([ Ast ]) -> (HappyAbsSyn )
-happyIn29 x = unsafeCoerce# x
-{-# INLINE happyIn29 #-}
-happyOut29 :: (HappyAbsSyn ) -> ([ Ast ])
-happyOut29 x = unsafeCoerce# x
-{-# INLINE happyOut29 #-}
-happyIn30 :: (String -> Ast -> [ Ast ] -> Ast) -> (HappyAbsSyn )
-happyIn30 x = unsafeCoerce# x
-{-# INLINE happyIn30 #-}
-happyOut30 :: (HappyAbsSyn ) -> (String -> Ast -> [ Ast ] -> Ast)
-happyOut30 x = unsafeCoerce# x
-{-# INLINE happyOut30 #-}
-happyIn31 :: (String -> Ast -> Ast) -> (HappyAbsSyn )
-happyIn31 x = unsafeCoerce# x
-{-# INLINE happyIn31 #-}
-happyOut31 :: (HappyAbsSyn ) -> (String -> Ast -> Ast)
-happyOut31 x = unsafeCoerce# x
-{-# INLINE happyOut31 #-}
-happyInTok :: Token -> (HappyAbsSyn )
-happyInTok x = unsafeCoerce# x
-{-# INLINE happyInTok #-}
-happyOutTok :: (HappyAbsSyn ) -> Token
-happyOutTok x = unsafeCoerce# x
-{-# INLINE happyOutTok #-}
-
-
-happyActOffsets :: HappyAddr
-happyActOffsets = HappyA# "\xe6\x00\xe6\x00\x00\x00\x38\x02\x00\x00\xc7\x02\x7c\x00\x00\x00\x00\x00\xf3\xff\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\xf6\x01\xf6\x01\x33\x01\x99\x00\x33\x01\x33\x01\x33\x01\x00\x00\xe6\x01\x33\x01\xd8\x01\xd8\x01\x16\x00\x0b\x00\x17\x00\xdd\x01\xfd\x00\x00\x00\x33\x01\xd7\x01\x33\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\xd3\x01\x00\x00\x4c\x00\x75\x01\x33\x01\x91\x01\xe2\x01\xb3\x01\xdf\xff\x00\x00\xf1\x01\xc0\x01\x33\x01\xb7\x01\xee\x01\xbb\x01\x33\x01\xc9\x01\xc8\x01\xed\xff\xaa\x01\x00\x00\x97\x01\x00\x00\x00\x00\xc7\x02\x73\x00\x59\x00\x00\x00\xf3\x01\x43\x00\x3f\x00\xfd\xff\x33\x01\x00\x00\x08\x00\x00\x00\xa6\x01\x89\x01\x89\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\x33\x01\xff\xff\x12\x00\x00\x00\xeb\x08\xeb\x08\xeb\x08\x1d\x09\xeb\x08\x04\x09\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x01\x34\x01\x35\x09\xc7\x02\xa4\x01\xa2\x01\xcb\x01\x96\x01\x00\x00\xfc\xff\x33\x01\x22\x00\xfb\xff\x8d\x01\x00\x00\x00\x00\x72\x00\x8c\x01\x00\x00\x33\x01\x25\x00\x7b\x01\x33\x01\x33\x01\x33\x01\x00\x00\x33\x01\x00\x00\xb0\x01\x88\x01\x33\x01\x73\x01\x73\x01\x33\x01\xab\x02\x74\x01\x33\x01\x80\x01\x8e\x02\x72\x01\x33\x01\xfd\xff\x00\x00\x29\x00\x4d\x01\x71\x01\x33\x01\xc7\x02\x33\x01\x6f\x01\x00\x00\xc7\x02\xc7\x02\x2c\x01\x33\x01\x00\x00\x00\x00\x3b\x01\x71\x00\x00\x00\x68\x01\x68\x00\x00\x00\x66\x01\xc7\x02\x44\x01\x45\x01\xc7\x02\x5b\x01\xfa\xff\xc7\x02\x16\x02\xc7\x02\xc7\x02\xec\xff\x00\x00\x17\x00\x32\x00\x00\x00\x37\x02\x00\x00\x00\x00\x55\x01\x66\x00\x00\x00\x33\x01\x30\x01\x00\x00\x00\x00\x33\x01\x33\x01\x00\x00\xc7\x02\xcc\x01\x39\x01\x4c\x01\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x54\x01\x33\x01\x0f\x01\x33\x01\x00\x00\xfa\xff\x33\x01\x33\x01\x33\x01\x00\x00\x33\x01\x00\x00\xc7\x02\x02\x00\x35\x01\x1f\x01\x5e\x00\x0c\x01\x5c\x00\x4d\x00\xc7\x02\xc7\x02\x00\x00\xc7\x02\x28\x01\xc7\x02\x4b\x01\x00\x00\x4b\x01\x00\x00\x00\x00\x33\x01\x00\x00\x00\x00\x00\x00\xcc\x01\x4b\x01\x33\x01\x00\x00\x00\x00\x23\x01\x33\x01\x13\x01\x3f\x01\xbc\x00\x00\x00\x00\x00\x43\x01\xa3\x00\x71\x02\x11\x01\xc7\x02\x00\x00\xbc\x00\x00\x00\x33\x01\x00\x00\x54\x02\x00\x00\x00\x00"#
-
-happyGotoOffsets :: HappyAddr
-happyGotoOffsets = HappyA# "\xb5\x00\x4f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x40\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\x00\x00\x00\x01\xee\x00\xdc\x08\xbd\x03\xa6\x03\xc5\x08\xae\x08\x00\x00\x3e\x01\x97\x08\xd7\x00\xb7\x00\x3d\x01\x2f\x01\x1e\x01\x00\x00\x00\x00\x00\x00\x80\x08\x00\x00\x69\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x52\x08\x00\x00\x2d\x01\x21\x01\x00\x00\x24\x01\x00\x00\x1c\x01\x3b\x08\x00\x00\x00\x00\x17\x01\x24\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x01\x8f\x03\x00\x00\xfc\x00\x00\x00\x0b\x01\xd2\x00\xaf\x00\x0d\x08\xf6\x07\xdf\x07\xc8\x07\xb1\x07\x9a\x07\x83\x07\x6c\x07\x55\x07\x3e\x07\x27\x07\x10\x07\xf9\x06\xe2\x06\xcb\x06\xb4\x06\x9d\x06\x86\x06\x6f\x06\x58\x06\x41\x06\x2a\x06\x13\x06\xfc\x05\xe5\x05\xce\x05\xb7\x05\xa0\x05\x89\x05\x78\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x01\x61\x03\x12\x01\x04\x01\xf9\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x72\x05\xdf\x00\xeb\x00\x5b\x05\x44\x05\x2d\x05\x00\x00\x16\x05\x00\x00\x00\x00\xf0\x00\xff\x04\xdd\x00\xd4\x00\xe8\x04\x00\x00\x00\x00\x4a\x03\x00\x00\x00\x00\x00\x00\x33\x03\x0d\x01\x00\x00\xc5\x00\x00\x00\x00\x00\xd1\x04\x00\x00\xba\x04\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\xa3\x04\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x00\xd3\x00\xd1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x03\xa8\x00\x00\x00\x00\x00\x05\x03\x8c\x04\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x92\x00\x4e\x00\x00\x00\x75\x04\x86\x00\x5e\x04\x00\x00\x65\x00\x47\x04\x30\x04\xee\x02\x00\x00\xba\x01\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x19\x04\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x02\x04\x00\x00\x00\x00\x00\x00\xeb\x03\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x03\x00\x00\x00\x00\x00\x00\x00\x00"#
-
-happyDefActions :: HappyAddr
-happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x81\xff\x7e\xff\xfa\xff\xb2\xff\xe5\xff\xe6\xff\x00\x00\xc5\xff\x97\xff\xe7\xff\x84\xff\x83\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xff\x00\x00\x7d\xff\x00\x00\x00\x00\x00\x00\xec\xff\xc4\xff\xc3\xff\x96\xff\x00\x00\xfe\xff\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\xff\x00\x00\x00\x00\x00\x00\xf6\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\x00\x00\xbd\xff\xc6\xff\xa1\xff\xc7\xff\xc8\xff\xbf\xff\x00\x00\x00\x00\x7b\xff\x00\x00\x00\x00\x00\x00\x90\xff\x00\x00\x94\xff\x00\x00\xa6\xff\xb0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\xff\xc9\xff\xca\xff\xcb\xff\xcc\xff\xcd\xff\xce\xff\xcf\xff\xd0\xff\xd1\xff\xd2\xff\xd3\xff\xd4\xff\xd5\xff\xd6\xff\xd7\xff\xd8\xff\xd9\xff\xda\xff\xdb\xff\xdc\xff\xdd\xff\xde\xff\xdf\xff\xe0\xff\xe1\xff\xe2\xff\xe3\xff\xe4\xff\xb3\xff\xba\xff\xbb\xff\x00\x00\x00\x00\x9c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\xff\x9e\xff\x00\x00\x8e\xff\x8c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\xff\x00\x00\x95\xff\x00\x00\xa0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xff\xf5\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xff\x00\x00\xfc\xff\xfb\xff\xc0\xff\xc2\xff\x00\x00\x00\x00\x80\xff\x7f\xff\x8d\xff\x00\x00\xa9\xff\x00\x00\x00\x00\xaa\xff\x00\x00\xb5\xff\x00\x00\x00\x00\xb9\xff\x00\x00\x00\x00\xbe\xff\x00\x00\xe9\xff\xea\xff\x00\x00\x84\xff\x00\x00\x00\x00\x86\xff\x00\x00\x8b\xff\x93\xff\x00\x00\x00\x00\x98\xff\x00\x00\x00\x00\x99\xff\x9a\xff\x00\x00\x00\x00\x7a\xff\xeb\xff\xab\xff\xb1\xff\x00\x00\x00\x00\x9f\xff\xa7\xff\x85\xff\x84\xff\x00\x00\x84\xff\x8a\xff\x00\x00\x00\x00\x00\x00\x92\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa3\xff\x00\x00\xa2\xff\xf9\xff\x00\x00\xf4\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\xff\xb8\xff\x91\xff\xe8\xff\x00\x00\xb7\xff\x89\xff\x84\xff\x88\xff\x9b\xff\xa8\xff\x00\x00\xaf\xff\xad\xff\xac\xff\xab\xff\x87\xff\x00\x00\xa5\xff\xa4\xff\xf2\xff\x00\x00\x00\x00\xf0\xff\xf3\xff\xee\xff\xed\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xff\xae\xff\xf1\xff\xf8\xff\x00\x00\xef\xff\x00\x00\xf7\xff"#
-
-happyCheck :: HappyAddr
-happyCheck = HappyA# "\xff\xff\x02\x00\x03\x00\x04\x00\x07\x00\x0b\x00\x0b\x00\x0b\x00\x09\x00\x0a\x00\x0b\x00\x18\x00\x0a\x00\x0e\x00\x0f\x00\x10\x00\x02\x00\x0b\x00\x16\x00\x0b\x00\x09\x00\x16\x00\x0b\x00\x2b\x00\x2b\x00\x42\x00\x3b\x00\x02\x00\x0a\x00\x04\x00\x16\x00\x09\x00\x09\x00\x0b\x00\x43\x00\x15\x00\x25\x00\x19\x00\x4f\x00\x10\x00\x29\x00\x2a\x00\x37\x00\x3f\x00\x3f\x00\x0b\x00\x09\x00\x2d\x00\x34\x00\x35\x00\x36\x00\x34\x00\x35\x00\x10\x00\x3b\x00\x3a\x00\x39\x00\x10\x00\x3b\x00\x09\x00\x34\x00\x35\x00\x36\x00\x2d\x00\x41\x00\x0e\x00\x10\x00\x44\x00\x45\x00\x46\x00\x3b\x00\x4b\x00\x4e\x00\x4a\x00\x4e\x00\x4c\x00\x4d\x00\x4e\x00\x02\x00\x03\x00\x04\x00\x3b\x00\x3b\x00\x4b\x00\x4e\x00\x09\x00\x4e\x00\x0b\x00\x41\x00\x0c\x00\x0e\x00\x0f\x00\x10\x00\x3b\x00\x39\x00\x3a\x00\x3b\x00\x4a\x00\x16\x00\x0a\x00\x3b\x00\x40\x00\x41\x00\x19\x00\x0c\x00\x0b\x00\x19\x00\x39\x00\x2d\x00\x3b\x00\x0c\x00\x4a\x00\x2d\x00\x25\x00\x0c\x00\x41\x00\x0c\x00\x29\x00\x2a\x00\x38\x00\x13\x00\x14\x00\x2d\x00\x38\x00\x4a\x00\x0c\x00\x0c\x00\x0c\x00\x34\x00\x35\x00\x02\x00\x05\x00\x04\x00\x39\x00\x2d\x00\x3b\x00\x3c\x00\x2d\x00\x2c\x00\x05\x00\x02\x00\x41\x00\x04\x00\x2d\x00\x44\x00\x45\x00\x46\x00\x2d\x00\x02\x00\x2d\x00\x4a\x00\x05\x00\x4c\x00\x4d\x00\x4e\x00\x02\x00\x03\x00\x04\x00\x2d\x00\x2d\x00\x2d\x00\x0e\x00\x09\x00\x0a\x00\x0b\x00\x29\x00\x2a\x00\x0e\x00\x0f\x00\x10\x00\x02\x00\x2f\x00\x1a\x00\x1b\x00\x0b\x00\x16\x00\x03\x00\x0e\x00\x05\x00\x10\x00\x05\x00\x00\x00\x01\x00\x02\x00\x19\x00\x0a\x00\x05\x00\x06\x00\x05\x00\x08\x00\x25\x00\x13\x00\x14\x00\x0a\x00\x29\x00\x2a\x00\x0f\x00\x10\x00\x11\x00\x02\x00\x13\x00\x14\x00\x0e\x00\x16\x00\x10\x00\x34\x00\x35\x00\x1a\x00\x1b\x00\x18\x00\x39\x00\x02\x00\x3b\x00\x02\x00\x05\x00\x05\x00\x05\x00\x05\x00\x41\x00\x09\x00\x05\x00\x44\x00\x45\x00\x46\x00\x09\x00\x02\x00\x05\x00\x4a\x00\x05\x00\x4c\x00\x4d\x00\x4e\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x1b\x00\x1a\x00\x1b\x00\x09\x00\x05\x00\x0b\x00\x02\x00\x05\x00\x0e\x00\x0f\x00\x10\x00\x09\x00\x18\x00\x1a\x00\x1b\x00\x02\x00\x16\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x01\x00\x02\x00\x05\x00\x02\x00\x05\x00\x06\x00\x09\x00\x08\x00\x25\x00\x10\x00\x11\x00\x12\x00\x29\x00\x2a\x00\x0f\x00\x10\x00\x11\x00\x02\x00\x13\x00\x14\x00\x0c\x00\x16\x00\x02\x00\x34\x00\x35\x00\x1a\x00\x1b\x00\x02\x00\x39\x00\x02\x00\x3b\x00\x3c\x00\x05\x00\x17\x00\x18\x00\x05\x00\x41\x00\x10\x00\x11\x00\x44\x00\x45\x00\x46\x00\x17\x00\x18\x00\x02\x00\x4a\x00\x02\x00\x4c\x00\x4d\x00\x4e\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x1b\x00\x3d\x00\x3e\x00\x09\x00\x19\x00\x0b\x00\x02\x00\x02\x00\x0e\x00\x0f\x00\x10\x00\x10\x00\x11\x00\x12\x00\x13\x00\x09\x00\x16\x00\x19\x00\x0b\x00\x3b\x00\x0a\x00\x3b\x00\x2c\x00\x01\x00\x02\x00\x07\x00\x2b\x00\x05\x00\x06\x00\x4a\x00\x08\x00\x25\x00\x4a\x00\x3b\x00\x07\x00\x29\x00\x2a\x00\x0f\x00\x10\x00\x11\x00\x2c\x00\x13\x00\x14\x00\x18\x00\x16\x00\x2d\x00\x34\x00\x35\x00\x1a\x00\x1b\x00\x3b\x00\x39\x00\x18\x00\x3b\x00\x14\x00\x2b\x00\x0b\x00\x2e\x00\x0b\x00\x41\x00\x3a\x00\x4a\x00\x44\x00\x45\x00\x46\x00\x09\x00\x2e\x00\x0a\x00\x4a\x00\x0a\x00\x4c\x00\x4d\x00\x4e\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x4b\x00\x3b\x00\x02\x00\x4a\x00\x49\x00\x05\x00\x06\x00\x07\x00\x08\x00\x3b\x00\x14\x00\x4a\x00\x3a\x00\x31\x00\x3b\x00\x0f\x00\x10\x00\x11\x00\x01\x00\x13\x00\x14\x00\x2d\x00\x16\x00\x2d\x00\x3b\x00\x4a\x00\x1a\x00\x1b\x00\x30\x00\x2d\x00\x47\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x2d\x00\x3b\x00\x2e\x00\x05\x00\x0b\x00\x43\x00\x3b\x00\x0b\x00\x4a\x00\x32\x00\x33\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x06\x00\x3b\x00\x4b\x00\x48\x00\x43\x00\x3b\x00\x4a\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x08\x00\x4a\x00\x09\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x02\x00\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\x02\x00\x1a\x00\x1b\x00\x05\x00\x06\x00\xff\xff\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x13\x00\x14\x00\xff\xff\x16\x00\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x25\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
-
-happyTable :: HappyAddr
-happyTable = HappyA# "\x00\x00\x10\x00\x11\x00\x12\x00\x9e\x00\x14\x00\x36\x00\xe0\x00\x13\x00\x71\x00\x14\x00\x4d\x00\x02\x01\x15\x00\x16\x00\x17\x00\xa6\x00\x4b\x00\x18\x00\x95\x00\x35\x00\x18\x00\x36\x00\xf3\x00\xa9\x00\x2c\x00\xb5\x00\x1c\x01\xe6\x00\x26\x01\x18\x00\x39\x00\x13\x00\x3a\x00\xb6\x00\xa7\x00\x19\x00\x15\x01\xff\xff\x17\x00\x1a\x00\x1b\x00\x4e\x00\xf4\x00\xaa\x00\x3a\x00\x13\x00\x03\x01\x96\x00\x97\x00\xe1\x00\x1c\x00\x1d\x00\x17\x00\x37\x00\x9f\x00\x1e\x00\xc3\x00\x1f\x00\x13\x00\x96\x00\x97\x00\x98\x00\xa5\x00\x21\x00\x25\x01\x17\x00\x22\x00\x23\x00\x24\x00\x37\x00\xe2\x00\x28\x00\x25\x00\xe3\x00\x26\x00\x27\x00\x28\x00\x10\x00\x11\x00\x12\x00\x37\x00\x1f\x00\x99\x00\x4c\x00\x13\x00\x9a\x00\x14\x00\x21\x00\x18\x01\x15\x00\x16\x00\x17\x00\x37\x00\xd7\x00\xd8\x00\x1f\x00\x25\x00\x18\x00\xa4\x00\x37\x00\xd9\x00\x21\x00\x0b\x01\x19\x01\x1b\x01\x0d\x01\xf0\x00\xa0\x00\x1f\x00\x0f\x01\x25\x00\xa0\x00\x19\x00\xec\x00\x21\x00\xfb\x00\x1a\x00\x1b\x00\xa1\x00\x07\x01\x0b\x00\xa5\x00\xa2\x00\x25\x00\xfd\x00\xdc\x00\xa6\x00\x1c\x00\x1d\x00\x1c\x01\x19\x01\x21\x01\x1e\x00\xa5\x00\x1f\x00\x20\x00\xa5\x00\x1c\x01\x09\x01\x1c\x01\x21\x00\x1d\x01\xa5\x00\x22\x00\x23\x00\x24\x00\xa5\x00\x03\x00\xa5\x00\x25\x00\x04\x00\x26\x00\x27\x00\x28\x00\x10\x00\x11\x00\x12\x00\xa5\x00\xa5\x00\xa5\x00\x11\x01\x13\x00\x46\x00\x14\x00\x50\x00\x51\x00\x15\x00\x16\x00\x17\x00\xe9\x00\x52\x00\x0c\x01\x0e\x00\x29\x01\x18\x00\xfe\x00\x1f\x01\xff\x00\x20\x01\x3a\x00\x28\x00\x29\x00\x03\x00\xf1\x00\x8e\x00\x04\x00\x05\x00\x3a\x00\x06\x00\x19\x00\xf5\x00\x0b\x00\x3b\x00\x1a\x00\x1b\x00\x07\x00\x08\x00\x09\x00\xc1\x00\x0a\x00\x0b\x00\x1f\x01\x0c\x00\x20\x01\x1c\x00\x1d\x00\x0d\x00\x0e\x00\xda\x00\x1e\x00\x03\x00\x1f\x00\x03\x00\x04\x00\x3c\x00\x04\x00\xcb\x00\x21\x00\x8f\x00\x3c\x00\x22\x00\x23\x00\x24\x00\x3d\x00\x03\x00\xcc\x00\x25\x00\x04\x00\x26\x00\x27\x00\x28\x00\x10\x00\x11\x00\x12\x00\xee\x00\x0e\x00\xf0\x00\x0e\x00\x13\x00\xd4\x00\x14\x00\xce\x00\x3c\x00\x15\x00\x16\x00\x17\x00\x47\x00\xda\x00\xd5\x00\x0e\x00\xdc\x00\x18\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xbb\x00\x03\x00\x3c\x00\x33\x00\x04\x00\x05\x00\x48\x00\x06\x00\x19\x00\x92\x00\x09\x00\x93\x00\x1a\x00\x1b\x00\x07\x00\x08\x00\x09\x00\x37\x00\x0a\x00\x0b\x00\x90\x00\x0c\x00\xad\x00\x1c\x00\x1d\x00\x0d\x00\x0e\x00\xb1\x00\x1e\x00\x03\x00\x1f\x00\x20\x00\x04\x00\xc3\x00\x9c\x00\xb6\x00\x21\x00\xde\x00\x09\x00\x22\x00\x23\x00\x24\x00\x9b\x00\x9c\x00\xb7\x00\x25\x00\x33\x00\x26\x00\x27\x00\x28\x00\x10\x00\x11\x00\x12\x00\x32\x00\x0e\x00\x30\x00\x31\x00\x13\x00\xb3\x00\x14\x00\x37\x00\x3f\x00\x15\x00\x16\x00\x17\x00\x56\x00\x57\x00\x58\x00\x59\x00\x21\x01\x18\x00\x49\x00\x4e\x00\x37\x00\x2a\x01\x37\x00\x24\x01\x02\x00\x03\x00\x9e\x00\x17\x01\x04\x00\x05\x00\x25\x00\x06\x00\x19\x00\x25\x00\x37\x00\x9e\x00\x1a\x00\x1b\x00\x07\x00\x08\x00\x09\x00\x01\x01\x0a\x00\x0b\x00\x10\x01\x0c\x00\x11\x01\x1c\x00\x1d\x00\x0d\x00\x0e\x00\x37\x00\x1e\x00\xed\x00\x1f\x00\xf7\x00\xf8\x00\xfa\x00\xf9\x00\xfc\x00\x21\x00\x9f\x00\x25\x00\x22\x00\x23\x00\x24\x00\xc0\x00\xc1\x00\xc6\x00\x25\x00\xc9\x00\x26\x00\x27\x00\x28\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\xbd\x00\xb5\x00\x03\x00\x25\x00\xbb\x00\x04\x00\x42\x00\x03\x01\x06\x00\x37\x00\xd0\x00\x25\x00\x9f\x00\xe4\x00\x37\x00\x07\x00\x08\x00\x09\x00\xe5\x00\x0a\x00\x0b\x00\xa0\x00\x0c\x00\xab\x00\x37\x00\x25\x00\x0d\x00\x0e\x00\x92\x00\xa0\x00\xb9\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\xab\x00\x37\x00\xac\x00\xa3\x00\xaf\x00\xb0\x00\x37\x00\xb3\x00\x25\x00\x13\x01\x14\x01\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\xf5\x00\x37\x00\x2b\x00\x2e\x00\x32\x00\x37\x00\x25\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\xee\x00\x25\x00\x6f\x00\x00\x00\x00\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x2c\x01\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x28\x01\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\xc7\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\xca\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x03\x00\x00\x00\x00\x00\x04\x00\x42\x00\x04\x01\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xe7\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x42\x00\xea\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x42\x00\xc4\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x42\x00\xc7\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x42\x00\xdd\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x42\x00\x6f\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x42\x00\x9a\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x42\x00\x43\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x42\x00\x44\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x2a\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x22\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x24\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x14\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x05\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x06\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x08\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x0a\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xe6\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xfd\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xbd\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xbe\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xca\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xcd\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xd0\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xd1\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xd2\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xd3\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xd9\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x71\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x72\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x73\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x74\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x75\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x76\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x77\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x78\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x79\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x7a\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x7b\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x7c\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x7d\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x7e\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x7f\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x80\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x81\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x82\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x83\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x84\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x85\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x86\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x87\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x88\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x89\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x8a\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x8b\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x8c\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x8d\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xac\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xb0\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\xb9\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x2c\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x2e\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x3e\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x40\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x41\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x03\x00\x0d\x00\x0e\x00\x04\x00\x46\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x08\x00\x09\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x00\x00\x6b\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x00\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
-
-happyReduceArr = array (1, 134) [
-	(1 , happyReduce_1),
-	(2 , happyReduce_2),
-	(3 , happyReduce_3),
-	(4 , happyReduce_4),
-	(5 , happyReduce_5),
-	(6 , happyReduce_6),
-	(7 , happyReduce_7),
-	(8 , happyReduce_8),
-	(9 , happyReduce_9),
-	(10 , happyReduce_10),
-	(11 , happyReduce_11),
-	(12 , happyReduce_12),
-	(13 , happyReduce_13),
-	(14 , happyReduce_14),
-	(15 , happyReduce_15),
-	(16 , happyReduce_16),
-	(17 , happyReduce_17),
-	(18 , happyReduce_18),
-	(19 , happyReduce_19),
-	(20 , happyReduce_20),
-	(21 , happyReduce_21),
-	(22 , happyReduce_22),
-	(23 , happyReduce_23),
-	(24 , happyReduce_24),
-	(25 , happyReduce_25),
-	(26 , happyReduce_26),
-	(27 , happyReduce_27),
-	(28 , happyReduce_28),
-	(29 , happyReduce_29),
-	(30 , happyReduce_30),
-	(31 , happyReduce_31),
-	(32 , happyReduce_32),
-	(33 , happyReduce_33),
-	(34 , happyReduce_34),
-	(35 , happyReduce_35),
-	(36 , happyReduce_36),
-	(37 , happyReduce_37),
-	(38 , happyReduce_38),
-	(39 , happyReduce_39),
-	(40 , happyReduce_40),
-	(41 , happyReduce_41),
-	(42 , happyReduce_42),
-	(43 , happyReduce_43),
-	(44 , happyReduce_44),
-	(45 , happyReduce_45),
-	(46 , happyReduce_46),
-	(47 , happyReduce_47),
-	(48 , happyReduce_48),
-	(49 , happyReduce_49),
-	(50 , happyReduce_50),
-	(51 , happyReduce_51),
-	(52 , happyReduce_52),
-	(53 , happyReduce_53),
-	(54 , happyReduce_54),
-	(55 , happyReduce_55),
-	(56 , happyReduce_56),
-	(57 , happyReduce_57),
-	(58 , happyReduce_58),
-	(59 , happyReduce_59),
-	(60 , happyReduce_60),
-	(61 , happyReduce_61),
-	(62 , happyReduce_62),
-	(63 , happyReduce_63),
-	(64 , happyReduce_64),
-	(65 , happyReduce_65),
-	(66 , happyReduce_66),
-	(67 , happyReduce_67),
-	(68 , happyReduce_68),
-	(69 , happyReduce_69),
-	(70 , happyReduce_70),
-	(71 , happyReduce_71),
-	(72 , happyReduce_72),
-	(73 , happyReduce_73),
-	(74 , happyReduce_74),
-	(75 , happyReduce_75),
-	(76 , happyReduce_76),
-	(77 , happyReduce_77),
-	(78 , happyReduce_78),
-	(79 , happyReduce_79),
-	(80 , happyReduce_80),
-	(81 , happyReduce_81),
-	(82 , happyReduce_82),
-	(83 , happyReduce_83),
-	(84 , happyReduce_84),
-	(85 , happyReduce_85),
-	(86 , happyReduce_86),
-	(87 , happyReduce_87),
-	(88 , happyReduce_88),
-	(89 , happyReduce_89),
-	(90 , happyReduce_90),
-	(91 , happyReduce_91),
-	(92 , happyReduce_92),
-	(93 , happyReduce_93),
-	(94 , happyReduce_94),
-	(95 , happyReduce_95),
-	(96 , happyReduce_96),
-	(97 , happyReduce_97),
-	(98 , happyReduce_98),
-	(99 , happyReduce_99),
-	(100 , happyReduce_100),
-	(101 , happyReduce_101),
-	(102 , happyReduce_102),
-	(103 , happyReduce_103),
-	(104 , happyReduce_104),
-	(105 , happyReduce_105),
-	(106 , happyReduce_106),
-	(107 , happyReduce_107),
-	(108 , happyReduce_108),
-	(109 , happyReduce_109),
-	(110 , happyReduce_110),
-	(111 , happyReduce_111),
-	(112 , happyReduce_112),
-	(113 , happyReduce_113),
-	(114 , happyReduce_114),
-	(115 , happyReduce_115),
-	(116 , happyReduce_116),
-	(117 , happyReduce_117),
-	(118 , happyReduce_118),
-	(119 , happyReduce_119),
-	(120 , happyReduce_120),
-	(121 , happyReduce_121),
-	(122 , happyReduce_122),
-	(123 , happyReduce_123),
-	(124 , happyReduce_124),
-	(125 , happyReduce_125),
-	(126 , happyReduce_126),
-	(127 , happyReduce_127),
-	(128 , happyReduce_128),
-	(129 , happyReduce_129),
-	(130 , happyReduce_130),
-	(131 , happyReduce_131),
-	(132 , happyReduce_132),
-	(133 , happyReduce_133),
-	(134 , happyReduce_134)
-	]
-
-happy_n_terms = 80 :: Int
-happy_n_nonterms = 28 :: Int
-
-happyReduce_1 = happySpecReduce_1  0# happyReduction_1
-happyReduction_1 happy_x_1
-	 =  case happyOut5 happy_x_1 of { happy_var_1 -> 
-	happyIn4
-		 ([happy_var_1]
-	)}
-
-happyReduce_2 = happySpecReduce_2  0# happyReduction_2
-happyReduction_2 happy_x_2
-	happy_x_1
-	 =  case happyOut5 happy_x_1 of { happy_var_1 -> 
-	happyIn4
-		 ([happy_var_1]
-	)}
-
-happyReduce_3 = happySpecReduce_3  0# happyReduction_3
-happyReduction_3 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut4 happy_x_1 of { happy_var_1 -> 
-	case happyOut5 happy_x_3 of { happy_var_3 -> 
-	happyIn4
-		 (happy_var_1++[happy_var_3]
-	)}}
-
-happyReduce_4 = happyReduce 4# 0# happyReduction_4
-happyReduction_4 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut4 happy_x_1 of { happy_var_1 -> 
-	case happyOut5 happy_x_3 of { happy_var_3 -> 
-	happyIn4
-		 (happy_var_1++[happy_var_3]
-	) `HappyStk` happyRest}}
-
-happyReduce_5 = happySpecReduce_1  1# happyReduction_5
-happyReduction_5 happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	happyIn5
-		 (happy_var_1
-	)}
-
-happyReduce_6 = happyReduce 5# 1# happyReduction_6
-happyReduction_6 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut9 happy_x_3 of { happy_var_3 -> 
-	case happyOut10 happy_x_5 of { happy_var_5 -> 
-	happyIn5
-		 (Ast "variable" [happy_var_3,happy_var_5]
-	) `HappyStk` happyRest}}
-
-happyReduce_7 = happyReduce 9# 1# happyReduction_7
-happyReduction_7 (happy_x_9 `HappyStk`
-	happy_x_8 `HappyStk`
-	happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut6 happy_x_3 of { happy_var_3 -> 
-	case happyOut7 happy_x_5 of { happy_var_5 -> 
-	case happyOut10 happy_x_8 of { happy_var_8 -> 
-	happyIn5
-		 (Ast "function" ([Avar happy_var_3,happy_var_8]++happy_var_5)
-	) `HappyStk` happyRest}}}
-
-happyReduce_8 = happyReduce 11# 1# happyReduction_8
-happyReduction_8 (happy_x_11 `HappyStk`
-	happy_x_10 `HappyStk`
-	happy_x_9 `HappyStk`
-	happy_x_8 `HappyStk`
-	happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut6 happy_x_3 of { happy_var_3 -> 
-	case happyOut7 happy_x_5 of { happy_var_5 -> 
-	case happyOut10 happy_x_10 of { happy_var_10 -> 
-	happyIn5
-		 (Ast "function" ([Avar happy_var_3,happy_var_10]++happy_var_5)
-	) `HappyStk` happyRest}}}
-
-happyReduce_9 = happySpecReduce_1  2# happyReduction_9
-happyReduction_9 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (QName happy_var_1) -> 
-	happyIn6
-		 (happy_var_1
-	)}
-
-happyReduce_10 = happySpecReduce_3  2# happyReduction_10
-happyReduction_10 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (QName happy_var_1) -> 
-	case happyOutTok happy_x_3 of { (QName happy_var_3) -> 
-	happyIn6
-		 (happy_var_1++":"++happy_var_3
-	)}}
-
-happyReduce_11 = happySpecReduce_1  3# happyReduction_11
-happyReduction_11 happy_x_1
-	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
-	happyIn7
-		 ([happy_var_1]
-	)}
-
-happyReduce_12 = happySpecReduce_3  3# happyReduction_12
-happyReduction_12 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
-	happyIn7
-		 ([happy_var_1]
-	)}
-
-happyReduce_13 = happySpecReduce_3  3# happyReduction_13
-happyReduction_13 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
-	case happyOut9 happy_x_3 of { happy_var_3 -> 
-	happyIn7
-		 (happy_var_1++[happy_var_3]
-	)}}
-
-happyReduce_14 = happyReduce 5# 3# happyReduction_14
-happyReduction_14 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut7 happy_x_1 of { happy_var_1 -> 
-	case happyOut9 happy_x_3 of { happy_var_3 -> 
-	happyIn7
-		 (happy_var_1++[happy_var_3]
-	) `HappyStk` happyRest}}
-
-happyReduce_15 = happySpecReduce_1  4# happyReduction_15
-happyReduction_15 happy_x_1
-	 =  case happyOut6 happy_x_1 of { happy_var_1 -> 
-	happyIn8
-		 (happy_var_1
-	)}
-
-happyReduce_16 = happySpecReduce_3  4# happyReduction_16
-happyReduction_16 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut6 happy_x_1 of { happy_var_1 -> 
-	happyIn8
-		 (happy_var_1
-	)}
-
-happyReduce_17 = happySpecReduce_2  4# happyReduction_17
-happyReduction_17 happy_x_2
-	happy_x_1
-	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
-	happyIn8
-		 (happy_var_1
-	)}
-
-happyReduce_18 = happySpecReduce_2  4# happyReduction_18
-happyReduction_18 happy_x_2
-	happy_x_1
-	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
-	happyIn8
-		 (happy_var_1
-	)}
-
-happyReduce_19 = happySpecReduce_1  5# happyReduction_19
-happyReduction_19 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (Variable happy_var_1) -> 
-	happyIn9
-		 (Avar happy_var_1
-	)}
-
-happyReduce_20 = happyReduce 5# 6# happyReduction_20
-happyReduction_20 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut12 happy_x_1 of { happy_var_1 -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut16 happy_x_3 of { happy_var_3 -> 
-	case happyOut10 happy_x_5 of { happy_var_5 -> 
-	happyIn10
-		 ((snd happy_var_3) (happy_var_1 (happy_var_2 ((fst happy_var_3) happy_var_5)))
-	) `HappyStk` happyRest}}}}
-
-happyReduce_21 = happyReduce 4# 6# happyReduction_21
-happyReduction_21 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut13 happy_x_2 of { happy_var_2 -> 
-	case happyOut10 happy_x_4 of { happy_var_4 -> 
-	happyIn10
-		 (call "some" [happy_var_2 happy_var_4]
-	) `HappyStk` happyRest}}
-
-happyReduce_22 = happyReduce 4# 6# happyReduction_22
-happyReduction_22 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut13 happy_x_2 of { happy_var_2 -> 
-	case happyOut10 happy_x_4 of { happy_var_4 -> 
-	happyIn10
-		 (call "not" [call "some" [happy_var_2 (call "not" [happy_var_4])]]
-	) `HappyStk` happyRest}}
-
-happyReduce_23 = happyReduce 6# 6# happyReduction_23
-happyReduction_23 (happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut10 happy_x_2 of { happy_var_2 -> 
-	case happyOut10 happy_x_4 of { happy_var_4 -> 
-	case happyOut10 happy_x_6 of { happy_var_6 -> 
-	happyIn10
-		 (Ast "if" [happy_var_2,happy_var_4,happy_var_6]
-	) `HappyStk` happyRest}}}
-
-happyReduce_24 = happySpecReduce_1  6# happyReduction_24
-happyReduction_24 happy_x_1
-	 =  case happyOut26 happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (happy_var_1
-	)}
-
-happyReduce_25 = happySpecReduce_1  6# happyReduction_25
-happyReduction_25 happy_x_1
-	 =  case happyOut20 happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (happy_var_1
-	)}
-
-happyReduce_26 = happySpecReduce_1  6# happyReduction_26
-happyReduction_26 happy_x_1
-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (happy_var_1
-	)}
-
-happyReduce_27 = happySpecReduce_3  6# happyReduction_27
-happyReduction_27 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "to" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_28 = happySpecReduce_3  6# happyReduction_28
-happyReduction_28 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "+" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_29 = happySpecReduce_3  6# happyReduction_29
-happyReduction_29 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "-" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_30 = happySpecReduce_3  6# happyReduction_30
-happyReduction_30 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "*" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_31 = happySpecReduce_3  6# happyReduction_31
-happyReduction_31 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "div" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_32 = happySpecReduce_3  6# happyReduction_32
-happyReduction_32 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "idiv" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_33 = happySpecReduce_3  6# happyReduction_33
-happyReduction_33 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "mod" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_34 = happySpecReduce_3  6# happyReduction_34
-happyReduction_34 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "=" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_35 = happySpecReduce_3  6# happyReduction_35
-happyReduction_35 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "!=" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_36 = happySpecReduce_3  6# happyReduction_36
-happyReduction_36 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "<" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_37 = happySpecReduce_3  6# happyReduction_37
-happyReduction_37 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "<=" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_38 = happySpecReduce_3  6# happyReduction_38
-happyReduction_38 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call ">" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_39 = happySpecReduce_3  6# happyReduction_39
-happyReduction_39 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call ">=" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_40 = happySpecReduce_3  6# happyReduction_40
-happyReduction_40 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "<<" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_41 = happySpecReduce_3  6# happyReduction_41
-happyReduction_41 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call ">>" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_42 = happySpecReduce_3  6# happyReduction_42
-happyReduction_42 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "is" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_43 = happySpecReduce_3  6# happyReduction_43
-happyReduction_43 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "eq" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_44 = happySpecReduce_3  6# happyReduction_44
-happyReduction_44 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "ne" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_45 = happySpecReduce_3  6# happyReduction_45
-happyReduction_45 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "lt" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_46 = happySpecReduce_3  6# happyReduction_46
-happyReduction_46 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "le" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_47 = happySpecReduce_3  6# happyReduction_47
-happyReduction_47 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "gt" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_48 = happySpecReduce_3  6# happyReduction_48
-happyReduction_48 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "ge" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_49 = happySpecReduce_3  6# happyReduction_49
-happyReduction_49 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "and" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_50 = happySpecReduce_3  6# happyReduction_50
-happyReduction_50 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "or" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_51 = happySpecReduce_3  6# happyReduction_51
-happyReduction_51 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "not" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_52 = happySpecReduce_3  6# happyReduction_52
-happyReduction_52 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "union" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_53 = happySpecReduce_3  6# happyReduction_53
-happyReduction_53 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "intersect" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_54 = happySpecReduce_3  6# happyReduction_54
-happyReduction_54 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (call "except" [happy_var_1,happy_var_3]
-	)}}
-
-happyReduce_55 = happySpecReduce_2  6# happyReduction_55
-happyReduction_55 happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
-	happyIn10
-		 (call "uplus" [happy_var_2]
-	)}
-
-happyReduce_56 = happySpecReduce_2  6# happyReduction_56
-happyReduction_56 happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
-	happyIn10
-		 (call "uminus" [happy_var_2]
-	)}
-
-happyReduce_57 = happySpecReduce_2  6# happyReduction_57
-happyReduction_57 happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
-	happyIn10
-		 (call "not" [happy_var_2]
-	)}
-
-happyReduce_58 = happySpecReduce_1  6# happyReduction_58
-happyReduction_58 happy_x_1
-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (happy_var_1
-	)}
-
-happyReduce_59 = happySpecReduce_1  6# happyReduction_59
-happyReduction_59 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TInteger happy_var_1) -> 
-	happyIn10
-		 (Aint happy_var_1
-	)}
-
-happyReduce_60 = happySpecReduce_1  6# happyReduction_60
-happyReduction_60 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TFloat happy_var_1) -> 
-	happyIn10
-		 (Afloat happy_var_1
-	)}
-
-happyReduce_61 = happyReduce 4# 6# happyReduction_61
-happyReduction_61 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut10 happy_x_2 of { happy_var_2 -> 
-	case happyOut10 happy_x_4 of { happy_var_4 -> 
-	happyIn10
-		 (Ast "insert" [happy_var_2,Ast "destination" [happy_var_4]]
-	) `HappyStk` happyRest}}
-
-happyReduce_62 = happySpecReduce_3  6# happyReduction_62
-happyReduction_62 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn10
-		 (Ast "delete" [happy_var_3]
-	)}
-
-happyReduce_63 = happyReduce 4# 6# happyReduction_63
-happyReduction_63 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut10 happy_x_2 of { happy_var_2 -> 
-	case happyOut10 happy_x_4 of { happy_var_4 -> 
-	happyIn10
-		 (Ast "replace" [happy_var_2,happy_var_4]
-	) `HappyStk` happyRest}}
-
-happyReduce_64 = happySpecReduce_1  7# happyReduction_64
-happyReduction_64 happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	happyIn11
-		 ([happy_var_1]
-	)}
-
-happyReduce_65 = happySpecReduce_3  7# happyReduction_65
-happyReduction_65 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn11
-		 (happy_var_1++[happy_var_3]
-	)}}
-
-happyReduce_66 = happySpecReduce_2  8# happyReduction_66
-happyReduction_66 happy_x_2
-	happy_x_1
-	 =  case happyOut13 happy_x_2 of { happy_var_2 -> 
-	happyIn12
-		 (happy_var_2
-	)}
-
-happyReduce_67 = happySpecReduce_2  8# happyReduction_67
-happyReduction_67 happy_x_2
-	happy_x_1
-	 =  case happyOut14 happy_x_2 of { happy_var_2 -> 
-	happyIn12
-		 (happy_var_2
-	)}
-
-happyReduce_68 = happySpecReduce_3  8# happyReduction_68
-happyReduction_68 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut12 happy_x_1 of { happy_var_1 -> 
-	case happyOut13 happy_x_3 of { happy_var_3 -> 
-	happyIn12
-		 (happy_var_1 . happy_var_3
-	)}}
-
-happyReduce_69 = happySpecReduce_3  8# happyReduction_69
-happyReduction_69 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut12 happy_x_1 of { happy_var_1 -> 
-	case happyOut14 happy_x_3 of { happy_var_3 -> 
-	happyIn12
-		 (happy_var_1 . happy_var_3
-	)}}
-
-happyReduce_70 = happySpecReduce_3  9# happyReduction_70
-happyReduction_70 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn13
-		 (\x -> Ast "for" [happy_var_1,Avar "$",happy_var_3,x]
-	)}}
-
-happyReduce_71 = happyReduce 5# 9# happyReduction_71
-happyReduction_71 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut9 happy_x_1 of { happy_var_1 -> 
-	case happyOut9 happy_x_3 of { happy_var_3 -> 
-	case happyOut10 happy_x_5 of { happy_var_5 -> 
-	happyIn13
-		 (\x -> Ast "for" [happy_var_1,happy_var_3,happy_var_5,x]
-	) `HappyStk` happyRest}}}
-
-happyReduce_72 = happyReduce 5# 9# happyReduction_72
-happyReduction_72 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut13 happy_x_1 of { happy_var_1 -> 
-	case happyOut9 happy_x_3 of { happy_var_3 -> 
-	case happyOut10 happy_x_5 of { happy_var_5 -> 
-	happyIn13
-		 (\x -> happy_var_1(Ast "for" [happy_var_3,Avar "$",happy_var_5,x])
-	) `HappyStk` happyRest}}}
-
-happyReduce_73 = happyReduce 7# 9# happyReduction_73
-happyReduction_73 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut13 happy_x_1 of { happy_var_1 -> 
-	case happyOut9 happy_x_3 of { happy_var_3 -> 
-	case happyOut9 happy_x_5 of { happy_var_5 -> 
-	case happyOut10 happy_x_7 of { happy_var_7 -> 
-	happyIn13
-		 (\x -> happy_var_1(Ast "for" [happy_var_3,happy_var_5,happy_var_7,x])
-	) `HappyStk` happyRest}}}}
-
-happyReduce_74 = happySpecReduce_3  10# happyReduction_74
-happyReduction_74 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn14
-		 (\x -> Ast "let" [happy_var_1,happy_var_3,x]
-	)}}
-
-happyReduce_75 = happyReduce 5# 10# happyReduction_75
-happyReduction_75 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut14 happy_x_1 of { happy_var_1 -> 
-	case happyOut9 happy_x_3 of { happy_var_3 -> 
-	case happyOut10 happy_x_5 of { happy_var_5 -> 
-	happyIn14
-		 (\x -> happy_var_1(Ast "let" [happy_var_3,happy_var_5,x])
-	) `HappyStk` happyRest}}}
-
-happyReduce_76 = happySpecReduce_2  11# happyReduction_76
-happyReduction_76 happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
-	happyIn15
-		 (\x -> Ast "predicate" [happy_var_2,x]
-	)}
-
-happyReduce_77 = happySpecReduce_0  11# happyReduction_77
-happyReduction_77  =  happyIn15
-		 (id
-	)
-
-happyReduce_78 = happySpecReduce_3  12# happyReduction_78
-happyReduction_78 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut17 happy_x_3 of { happy_var_3 -> 
-	happyIn16
-		 ((\x -> Ast "sortTuple" (x:(fst happy_var_3)),
-                                                           \x -> Ast "sort" (x:(snd happy_var_3)))
-	)}
-
-happyReduce_79 = happySpecReduce_0  12# happyReduction_79
-happyReduction_79  =  happyIn16
-		 ((id,id)
-	)
-
-happyReduce_80 = happySpecReduce_2  13# happyReduction_80
-happyReduction_80 happy_x_2
-	happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	case happyOut18 happy_x_2 of { happy_var_2 -> 
-	happyIn17
-		 (([happy_var_1],[happy_var_2])
-	)}}
-
-happyReduce_81 = happyReduce 4# 13# happyReduction_81
-happyReduction_81 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut17 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	case happyOut18 happy_x_4 of { happy_var_4 -> 
-	happyIn17
-		 (((fst happy_var_1)++[happy_var_3],(snd happy_var_1)++[happy_var_4])
-	) `HappyStk` happyRest}}}
-
-happyReduce_82 = happySpecReduce_1  14# happyReduction_82
-happyReduction_82 happy_x_1
-	 =  happyIn18
-		 (Avar "ascending"
-	)
-
-happyReduce_83 = happySpecReduce_1  14# happyReduction_83
-happyReduction_83 happy_x_1
-	 =  happyIn18
-		 (Avar "descending"
-	)
-
-happyReduce_84 = happySpecReduce_0  14# happyReduction_84
-happyReduction_84  =  happyIn18
-		 (Avar "ascending"
-	)
-
-happyReduce_85 = happyReduce 4# 15# happyReduction_85
-happyReduction_85 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut6 happy_x_3 of { happy_var_3 -> 
-	happyIn19
-		 (call "element" [Avar happy_var_3]
-	) `HappyStk` happyRest}
-
-happyReduce_86 = happyReduce 4# 15# happyReduction_86
-happyReduction_86 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut6 happy_x_3 of { happy_var_3 -> 
-	happyIn19
-		 (call "attribute" [Avar happy_var_3]
-	) `HappyStk` happyRest}
-
-happyReduce_87 = happyReduce 6# 16# happyReduction_87
-happyReduction_87 (happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut21 happy_x_1 of { happy_var_1 -> 
-	case happyOut22 happy_x_3 of { happy_var_3 -> 
-	case happyOut6 happy_x_5 of { happy_var_5 -> 
-	happyIn20
-		 (if head happy_var_1 == Astring happy_var_5
-						  	     then Ast "element_construction" (happy_var_1++[Ast "append" happy_var_3])
-                                                          else parseError [TError ("Unmatched tags in element construction: "
-                                                                                   ++(show (head happy_var_1))++" '"++happy_var_5++"'")]
-	) `HappyStk` happyRest}}}
-
-happyReduce_88 = happyReduce 5# 16# happyReduction_88
-happyReduction_88 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut21 happy_x_1 of { happy_var_1 -> 
-	case happyOut6 happy_x_4 of { happy_var_4 -> 
-	happyIn20
-		 (if head happy_var_1 == Astring happy_var_4
-							     then Ast "element_construction" (happy_var_1++[Ast "append" []])
-                                                          else parseError [TError ("Unmatched tags in element construction: "
-                                                                                   ++(show (head happy_var_1))++" '"++happy_var_4++"'")]
-	) `HappyStk` happyRest}}
-
-happyReduce_89 = happySpecReduce_2  16# happyReduction_89
-happyReduction_89 happy_x_2
-	happy_x_1
-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
-	happyIn20
-		 (Ast "element_construction" (happy_var_1++[Ast "append" []])
-	)}
-
-happyReduce_90 = happyReduce 7# 16# happyReduction_90
-happyReduction_90 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut10 happy_x_3 of { happy_var_3 -> 
-	case happyOut11 happy_x_6 of { happy_var_6 -> 
-	happyIn20
-		 (Ast "element_construction" [happy_var_3,Ast "attributes" [],concatenateAll happy_var_6]
-	) `HappyStk` happyRest}}
-
-happyReduce_91 = happyReduce 7# 16# happyReduction_91
-happyReduction_91 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut10 happy_x_3 of { happy_var_3 -> 
-	case happyOut11 happy_x_6 of { happy_var_6 -> 
-	happyIn20
-		 (Ast "attribute_construction" [happy_var_3,concatenateAll happy_var_6]
-	) `HappyStk` happyRest}}
-
-happyReduce_92 = happyReduce 5# 16# happyReduction_92
-happyReduction_92 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut6 happy_x_2 of { happy_var_2 -> 
-	case happyOut11 happy_x_4 of { happy_var_4 -> 
-	happyIn20
-		 (Ast "element_construction" [Astring happy_var_2,Ast "attributes" [],concatenateAll happy_var_4]
-	) `HappyStk` happyRest}}
-
-happyReduce_93 = happyReduce 5# 16# happyReduction_93
-happyReduction_93 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut6 happy_x_2 of { happy_var_2 -> 
-	case happyOut11 happy_x_4 of { happy_var_4 -> 
-	happyIn20
-		 (Ast "attribute_construction" [Astring happy_var_2,concatenateAll happy_var_4]
-	) `HappyStk` happyRest}}
-
-happyReduce_94 = happySpecReduce_2  17# happyReduction_94
-happyReduction_94 happy_x_2
-	happy_x_1
-	 =  case happyOut6 happy_x_2 of { happy_var_2 -> 
-	happyIn21
-		 ([Astring happy_var_2,Ast "attributes" []]
-	)}
-
-happyReduce_95 = happySpecReduce_3  17# happyReduction_95
-happyReduction_95 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut6 happy_x_2 of { happy_var_2 -> 
-	case happyOut25 happy_x_3 of { happy_var_3 -> 
-	happyIn21
-		 ([Astring happy_var_2,Ast "attributes" happy_var_3]
-	)}}
-
-happyReduce_96 = happySpecReduce_3  18# happyReduction_96
-happyReduction_96 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut11 happy_x_2 of { happy_var_2 -> 
-	happyIn22
-		 ([concatenateAll happy_var_2]
-	)}
-
-happyReduce_97 = happySpecReduce_1  18# happyReduction_97
-happyReduction_97 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TString happy_var_1) -> 
-	happyIn22
-		 ([Astring happy_var_1]
-	)}
-
-happyReduce_98 = happySpecReduce_1  18# happyReduction_98
-happyReduction_98 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (XMLtext happy_var_1) -> 
-	happyIn22
-		 ([Astring happy_var_1]
-	)}
-
-happyReduce_99 = happySpecReduce_1  18# happyReduction_99
-happyReduction_99 happy_x_1
-	 =  case happyOut20 happy_x_1 of { happy_var_1 -> 
-	happyIn22
-		 ([happy_var_1]
-	)}
-
-happyReduce_100 = happyReduce 4# 18# happyReduction_100
-happyReduction_100 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut22 happy_x_1 of { happy_var_1 -> 
-	case happyOut11 happy_x_3 of { happy_var_3 -> 
-	happyIn22
-		 (happy_var_1++[concatenateAll happy_var_3]
-	) `HappyStk` happyRest}}
-
-happyReduce_101 = happySpecReduce_2  18# happyReduction_101
-happyReduction_101 happy_x_2
-	happy_x_1
-	 =  case happyOut22 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { (TString happy_var_2) -> 
-	happyIn22
-		 (happy_var_1++[Astring happy_var_2]
-	)}}
-
-happyReduce_102 = happySpecReduce_2  18# happyReduction_102
-happyReduction_102 happy_x_2
-	happy_x_1
-	 =  case happyOut22 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { (XMLtext happy_var_2) -> 
-	happyIn22
-		 (happy_var_1++[Astring happy_var_2]
-	)}}
-
-happyReduce_103 = happySpecReduce_2  18# happyReduction_103
-happyReduction_103 happy_x_2
-	happy_x_1
-	 =  case happyOut22 happy_x_1 of { happy_var_1 -> 
-	case happyOut20 happy_x_2 of { happy_var_2 -> 
-	happyIn22
-		 (happy_var_1++[happy_var_2]
-	)}}
-
-happyReduce_104 = happySpecReduce_1  19# happyReduction_104
-happyReduction_104 happy_x_1
-	 =  case happyOut24 happy_x_1 of { happy_var_1 -> 
-	happyIn23
-		 (if length happy_var_1 == 1 then head happy_var_1 else Ast "append" happy_var_1
-	)}
-
-happyReduce_105 = happySpecReduce_1  20# happyReduction_105
-happyReduction_105 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TString happy_var_1) -> 
-	happyIn24
-		 (if happy_var_1=="" then [] else [Astring happy_var_1]
-	)}
-
-happyReduce_106 = happySpecReduce_3  20# happyReduction_106
-happyReduction_106 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut11 happy_x_2 of { happy_var_2 -> 
-	happyIn24
-		 ([concatenateAll happy_var_2]
-	)}
-
-happyReduce_107 = happySpecReduce_2  20# happyReduction_107
-happyReduction_107 happy_x_2
-	happy_x_1
-	 =  case happyOut24 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { (TString happy_var_2) -> 
-	happyIn24
-		 (if happy_var_2=="" then happy_var_1 else happy_var_1++[Astring happy_var_2]
-	)}}
-
-happyReduce_108 = happyReduce 4# 20# happyReduction_108
-happyReduction_108 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut24 happy_x_1 of { happy_var_1 -> 
-	case happyOut11 happy_x_3 of { happy_var_3 -> 
-	happyIn24
-		 (happy_var_1++[concatenateAll happy_var_3]
-	) `HappyStk` happyRest}}
-
-happyReduce_109 = happySpecReduce_3  21# happyReduction_109
-happyReduction_109 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut6 happy_x_1 of { happy_var_1 -> 
-	case happyOut23 happy_x_3 of { happy_var_3 -> 
-	happyIn25
-		 ([Ast "pair" [Astring happy_var_1,happy_var_3]]
-	)}}
-
-happyReduce_110 = happyReduce 4# 21# happyReduction_110
-happyReduction_110 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut25 happy_x_1 of { happy_var_1 -> 
-	case happyOut6 happy_x_2 of { happy_var_2 -> 
-	case happyOut23 happy_x_4 of { happy_var_4 -> 
-	happyIn25
-		 (happy_var_1++[Ast "pair" [Astring happy_var_2,happy_var_4]]
-	) `HappyStk` happyRest}}}
-
-happyReduce_111 = happySpecReduce_2  22# happyReduction_111
-happyReduction_111 happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_2 of { happy_var_2 -> 
-	happyIn26
-		 (happy_var_1 "child" (Avar ".") happy_var_2
-	)}}
-
-happyReduce_112 = happySpecReduce_3  22# happyReduction_112
-happyReduction_112 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	happyIn26
-		 (happy_var_2 "attribute" (Avar ".") happy_var_3
-	)}}
-
-happyReduce_113 = happySpecReduce_3  22# happyReduction_113
-happyReduction_113 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_2 of { happy_var_2 -> 
-	case happyOut27 happy_x_3 of { happy_var_3 -> 
-	happyIn26
-		 (happy_var_3 (happy_var_1 "child" (Avar ".") happy_var_2)
-	)}}}
-
-happyReduce_114 = happyReduce 4# 22# happyReduction_114
-happyReduction_114 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_2 of { happy_var_2 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	case happyOut27 happy_x_4 of { happy_var_4 -> 
-	happyIn26
-		 (happy_var_4 (happy_var_2 "attribute" (Avar ".") happy_var_3)
-	) `HappyStk` happyRest}}}
-
-happyReduce_115 = happySpecReduce_1  23# happyReduction_115
-happyReduction_115 happy_x_1
-	 =  case happyOut28 happy_x_1 of { happy_var_1 -> 
-	happyIn27
-		 (happy_var_1
-	)}
-
-happyReduce_116 = happySpecReduce_2  23# happyReduction_116
-happyReduction_116 happy_x_2
-	happy_x_1
-	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
-	case happyOut28 happy_x_2 of { happy_var_2 -> 
-	happyIn27
-		 (happy_var_2 . happy_var_1
-	)}}
-
-happyReduce_117 = happySpecReduce_3  24# happyReduction_117
-happyReduction_117 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	happyIn28
-		 (\e -> happy_var_2 "child" e happy_var_3
-	)}}
-
-happyReduce_118 = happyReduce 4# 24# happyReduction_118
-happyReduction_118 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_3 of { happy_var_3 -> 
-	case happyOut29 happy_x_4 of { happy_var_4 -> 
-	happyIn28
-		 (\e -> happy_var_3 "attribute" e happy_var_4
-	) `HappyStk` happyRest}}
-
-happyReduce_119 = happyReduce 4# 24# happyReduction_119
-happyReduction_119 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_3 of { happy_var_3 -> 
-	case happyOut29 happy_x_4 of { happy_var_4 -> 
-	happyIn28
-		 (\e -> happy_var_3 "descendant-or-self" e happy_var_4
-	) `HappyStk` happyRest}}
-
-happyReduce_120 = happyReduce 5# 24# happyReduction_120
-happyReduction_120 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_4 of { happy_var_4 -> 
-	case happyOut29 happy_x_5 of { happy_var_5 -> 
-	happyIn28
-		 (\e -> happy_var_4 "attribute-descendant" e happy_var_5
-	) `HappyStk` happyRest}}
-
-happyReduce_121 = happySpecReduce_2  24# happyReduction_121
-happyReduction_121 happy_x_2
-	happy_x_1
-	 =  happyIn28
-		 (\e -> Ast "step" [Avar "parent",Astring "*",e]
-	)
-
-happyReduce_122 = happyReduce 4# 25# happyReduction_122
-happyReduction_122 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut29 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn29
-		 (happy_var_1 ++ [happy_var_3]
-	) `HappyStk` happyRest}}
-
-happyReduce_123 = happySpecReduce_0  25# happyReduction_123
-happyReduction_123  =  happyIn29
-		 ([]
-	)
-
-happyReduce_124 = happySpecReduce_1  26# happyReduction_124
-happyReduction_124 happy_x_1
-	 =  case happyOut31 happy_x_1 of { happy_var_1 -> 
-	happyIn30
-		 (\t e ps -> if null ps
-								     then happy_var_1 t e
-                                                                     else Ast "filter" (happy_var_1 t e:ps)
-	)}
-
-happyReduce_125 = happySpecReduce_1  26# happyReduction_125
-happyReduction_125 happy_x_1
-	 =  happyIn30
-		 (\t e ps -> Ast "step" ((Avar t):(Astring "*"):e:ps)
-	)
-
-happyReduce_126 = happySpecReduce_1  26# happyReduction_126
-happyReduction_126 happy_x_1
-	 =  case happyOut6 happy_x_1 of { happy_var_1 -> 
-	happyIn30
-		 (\t e ps -> if elem happy_var_1 path_steps
-                                                                     then parseError [TError ("Axis "++happy_var_1++" is missing a node step")]
-                                                                     else Ast "step" ((Avar t):(Astring happy_var_1):e:ps)
-	)}
-
-happyReduce_127 = happyReduce 4# 26# happyReduction_127
-happyReduction_127 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (QName happy_var_1) -> 
-	case happyOut6 happy_x_4 of { happy_var_4 -> 
-	happyIn30
-		 (\t e ps -> if elem happy_var_1 path_steps
-                                                                     then if t == "child"
-                                                                          then Ast "step" ((Avar happy_var_1):(Astring happy_var_4):e:ps)
-                                                                          else parseError [TError ("The navigation step must be /"++happy_var_1++"::"++happy_var_4)]
-                                                                     else parseError [TError ("Not a valid axis name: "++happy_var_1)]
-	) `HappyStk` happyRest}}
-
-happyReduce_128 = happyReduce 4# 26# happyReduction_128
-happyReduction_128 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (QName happy_var_1) -> 
-	happyIn30
-		 (\t e ps -> if elem happy_var_1 path_steps
-                                                                     then if t == "child"
-                                                                          then Ast "step" ((Avar happy_var_1):(Astring "*"):e:ps)
-                                                                          else parseError [TError ("The navigation step must be /"++happy_var_1++"::*")]
-                                                                     else parseError [TError ("Not a valid axis name: "++happy_var_1)]
-	) `HappyStk` happyRest}
-
-happyReduce_129 = happySpecReduce_1  27# happyReduction_129
-happyReduction_129 happy_x_1
-	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
-	happyIn31
-		 (\_ _ -> happy_var_1
-	)}
-
-happyReduce_130 = happySpecReduce_1  27# happyReduction_130
-happyReduction_130 happy_x_1
-	 =  happyIn31
-		 (\_ e -> e
-	)
-
-happyReduce_131 = happySpecReduce_3  27# happyReduction_131
-happyReduction_131 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut11 happy_x_2 of { happy_var_2 -> 
-	happyIn31
-		 (\t e -> if e == Avar "."
-                                                                  then concatenateAll happy_var_2
-	                                                          else Ast "context" [e,Astring t,concatenateAll happy_var_2]
-	)}
-
-happyReduce_132 = happySpecReduce_2  27# happyReduction_132
-happyReduction_132 happy_x_2
-	happy_x_1
-	 =  happyIn31
-		 (\_ _ -> call "empty" []
-	)
-
-happyReduce_133 = happyReduce 4# 27# happyReduction_133
-happyReduction_133 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut6 happy_x_1 of { happy_var_1 -> 
-	case happyOut11 happy_x_3 of { happy_var_3 -> 
-	happyIn31
-		 (\t e -> if e == Avar "."
-                                                                     then call happy_var_1 happy_var_3
-                                                                  else Ast "context" [e,Astring t,call happy_var_1 happy_var_3]
-	) `HappyStk` happyRest}}
-
-happyReduce_134 = happySpecReduce_3  27# happyReduction_134
-happyReduction_134 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut6 happy_x_1 of { happy_var_1 -> 
-	happyIn31
-		 (\_ e -> if elem happy_var_1 ["last","position","true","false","empty","select"]
-                                                                  then call happy_var_1 []
-                                                                  else call happy_var_1 [e]
-	)}
-
-happyNewToken action sts stk [] =
-	happyDoAction 79# notHappyAtAll action sts stk []
-
-happyNewToken action sts stk (tk:tks) =
-	let cont i = happyDoAction i tk action sts stk tks in
-	case tk of {
-	RETURN -> cont 1#;
-	SOME -> cont 2#;
-	EVERY -> cont 3#;
-	IF -> cont 4#;
-	THEN -> cont 5#;
-	ELSE -> cont 6#;
-	LB -> cont 7#;
-	RB -> cont 8#;
-	LP -> cont 9#;
-	RP -> cont 10#;
-	LSB -> cont 11#;
-	RSB -> cont 12#;
-	TO -> cont 13#;
-	PLUS -> cont 14#;
-	MINUS -> cont 15#;
-	TIMES -> cont 16#;
-	DIV -> cont 17#;
-	IDIV -> cont 18#;
-	MOD -> cont 19#;
-	TEQ -> cont 20#;
-	TNE -> cont 21#;
-	TLT -> cont 22#;
-	TLE -> cont 23#;
-	TGT -> cont 24#;
-	TGE -> cont 25#;
-	PRE -> cont 26#;
-	POST -> cont 27#;
-	IS -> cont 28#;
-	SEQ -> cont 29#;
-	SNE -> cont 30#;
-	SLT -> cont 31#;
-	SLE -> cont 32#;
-	SGT -> cont 33#;
-	SGE -> cont 34#;
-	AND -> cont 35#;
-	OR -> cont 36#;
-	NOT -> cont 37#;
-	UNION -> cont 38#;
-	INTERSECT -> cont 39#;
-	EXCEPT -> cont 40#;
-	FOR -> cont 41#;
-	LET -> cont 42#;
-	IN -> cont 43#;
-	AS -> cont 44#;
-	COMMA -> cont 45#;
-	ASSIGN -> cont 46#;
-	WHERE -> cont 47#;
-	ORDER -> cont 48#;
-	BY -> cont 49#;
-	ASCENDING -> cont 50#;
-	DESCENDING -> cont 51#;
-	ELEMENT -> cont 52#;
-	ATTRIBUTE -> cont 53#;
-	STAG -> cont 54#;
-	ETAG -> cont 55#;
-	SATISFIES -> cont 56#;
-	ATSIGN -> cont 57#;
-	SLASH -> cont 58#;
-	QName happy_dollar_dollar -> cont 59#;
-	DECLARE -> cont 60#;
-	FUNCTION -> cont 61#;
-	VARIABLE -> cont 62#;
-	AT -> cont 63#;
-	DOTS -> cont 64#;
-	DOT -> cont 65#;
-	SEMI -> cont 66#;
-	COLON -> cont 67#;
-	INSERT -> cont 68#;
-	DELETE -> cont 69#;
-	REPLACE -> cont 70#;
-	INTO -> cont 71#;
-	FROM -> cont 72#;
-	WITH -> cont 73#;
-	Variable happy_dollar_dollar -> cont 74#;
-	XMLtext happy_dollar_dollar -> cont 75#;
-	TInteger happy_dollar_dollar -> cont 76#;
-	TFloat happy_dollar_dollar -> cont 77#;
-	TString happy_dollar_dollar -> cont 78#;
-	_ -> happyError' (tk:tks)
-	}
-
-happyError_ tk tks = happyError' (tk:tks)
-
-newtype HappyIdentity a = HappyIdentity a
-happyIdentity = HappyIdentity
-happyRunIdentity (HappyIdentity a) = a
-
-instance Monad HappyIdentity where
-    return = HappyIdentity
-    (HappyIdentity p) >>= q = q p
-
-happyThen :: () => HappyIdentity a -> (a -> HappyIdentity b) -> HappyIdentity b
-happyThen = (>>=)
-happyReturn :: () => a -> HappyIdentity a
-happyReturn = (return)
-happyThen1 m k tks = (>>=) m (\a -> k a tks)
-happyReturn1 :: () => a -> b -> HappyIdentity a
-happyReturn1 = \a tks -> (return) a
-happyError' :: () => [Token] -> HappyIdentity a
-happyError' = HappyIdentity . parseError
-
-parse tks = happyRunIdentity happySomeParser where
-  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut4 x))
-
-happySeq = happyDontSeq
-
-
--- Abstract Syntax Tree for XQueries
-data Ast = Ast String [Ast]
-         | Avar String
-         | Aint Int
-         | Afloat Float
-         | Astring String
-         deriving Eq
-
-
-instance Show Ast
-  where show (Ast s []) = s ++ "()"
-        show (Ast s (x:xs)) = s ++ "(" ++ show x
-                              ++ foldr (\a r -> ","++show a++r) "" xs
-                              ++ ")"
-        show (Avar s) = s
-        show (Aint n) = show n
-        show (Afloat n) = show n
-        show (Astring s) = "\'" ++ s ++ "\'"
-
-
-screenSize = 80::Int
-
-prettyAst :: Ast -> Int -> (String,Int)
-prettyAst (Avar s) p = (s,(length s)+p)
-prettyAst (Aint n) p = let s = show n in (s,(length s)+p)
-prettyAst (Afloat n) p = let s = show n in (s,(length s)+p)
-prettyAst (Astring s) p = ("\'" ++ s ++ "\'",(length s)+p+2)
-prettyAst (Ast s args) p
-    = let (ps,np) = prettyArgs args
-      in (s++"("++ps++")",np+1)
-    where prettyArgs [] = ("",p+1)
-          prettyArgs xs = let ss = show (head xs) ++ foldr (\a r -> ","++show a++r) "" (tail xs)
-                              np = (length s)+p+1
-                          in if (length ss)+p < screenSize
-                             then (ss,(length ss)+p)
-                             else let ds = map (\x -> let (s,ep) = prettyAst x np
-                                                      in (s ++ ",\n" ++ space np,ep)) (init xs)
-                                      (ls,lp) = prettyAst (last xs) np
-                                  in (concatMap fst ds ++ ls,lp)
-          space n = replicate n ' '
-
-
-ppAst :: Ast -> String
-ppAst e = let (s,_) = prettyAst e 0 in s
-
-
-call :: String -> [Ast] -> Ast
-call name args = Ast "call" ((Avar name):args)
-
-
-concatenateAll :: [Ast] -> Ast
-concatenateAll [x] = x
-concatenateAll (x:xs) = foldl (\a r -> call "concatenate" [a,r]) x xs
-concatenateAll _ = call "empty" []
-
-
-path_steps = ["child", "descendant", "attribute", "self", "descendant-or-self", "following-sibling", "following",
-              "attribute-descendant", "parent", "ancestor", "preceding-sibling", "preceding", "ancestor-or-self" ]
-
-
-data Token
-  = RETURN | SOME | EVERY | IF | THEN | ELSE | LB | RB | LP | RP | LSB | RSB
-  | TO | PLUS | MINUS | TIMES | DIV | IDIV | MOD | AS
-  | TEQ | TNE | TLT | TLE | TGT | TGE | SEQ | SNE | SLT | SLE | SGT | SGE
-  | AND | OR | NOT | UNION | INTERSECT | EXCEPT | FOR | LET | IN | COMMA
-  | ASSIGN | WHERE | ORDER | BY | ASCENDING | DESCENDING | ELEMENT
-  | ATTRIBUTE | STAG | ETAG | SATISFIES | ATSIGN | SLASH | DECLARE | SEMI | COLON
-  | FUNCTION | VARIABLE | AT | DOT | DOTS | TokenEOF | PRE | POST | IS
-  | INSERT | INTO | DELETE | FROM | REPLACE | WITH
-  | QName String | Variable String | XMLtext String | TInteger Int
-  | TFloat Float | TString String | TError String
-    deriving Eq
-
-
-instance Show Token
-    where show (QName s) = "QName("++s++")"
-	  show (Variable s) = "Variable("++s++")"
-	  show (XMLtext s) = "XMLtext("++s++")"
-	  show (TInteger n) = "Integer("++(show n)++")"
-	  show (TFloat n) = "Double("++(show n)++")"
-	  show (TString s) = "String("++s++")"
-	  show (TError s) = "'"++s++"'"
-          show t = case filter (\(n,_) -> n==t) tokenList of
-                     (_,b):_ -> b
-                     _ -> "Illegal token"
-
-
-tokenList :: [(Token,String)]
-tokenList = [(RETURN,"return"),(SOME,"some"),(EVERY,"every"),(IF,"if"),(THEN,"then"),(ELSE,"else"),
-             (LB,"["),(RB,"]"),(LP,"("),(RP,")"),(LSB,"{"),(RSB,"}"),
-             (TO,"to"),(PLUS,"+"),(MINUS,"-"),(TIMES,"*"),(DIV,"div"),(IDIV,"idiv"),(MOD,"mod"),
-             (TEQ,"="),(TNE,"!="),(TLT,"<"),(TLE,"<="),(TGT,">"),(TGE,">="),(PRE,"<<"),(POST,">>"),
-             (IS,"is"),(SEQ,"eq"),(SNE,"ne"),(SLT,"lt"),(SLE,"le"),(SGT,"gt"),(SGE,"ge"),(AND,"and"),
-             (OR,"or"),(NOT,"not"),(UNION,"union"),(INTERSECT,"intersect"),(EXCEPT,"except"),
-             (FOR,"for"),(LET,"let"),(IN,"in"),(AS,"as"),(COMMA,"','"),(ASSIGN,":="),(WHERE,"where"),(ORDER,"order"),
-             (BY,"by"),(ASCENDING,"ascending"),(DESCENDING,"descending"),(ELEMENT,"element"),
-             (ATTRIBUTE,"attribute"),(STAG,"</"),(ETAG,"/>"),(SATISFIES,"satisfies"),(ATSIGN,"@"),
-             (SLASH,"/"),(DECLARE,"declare"),(FUNCTION,"function"),(VARIABLE,"variable"),
-  	     (INSERT,"insert"),(INTO,"into"),(DELETE,"delete"),(FROM,"from"),(REPLACE,"replace"),(WITH,"with"),
-             (AT,"at"),(DOTS,".."),(DOT,"."),(SEMI,";"),(COLON,":")]
-
-
-parseError tk = error (case tk of
-                         ((TError s):_) -> "Parse error: "++s
-                         _ -> "Parse error: "++(foldr (\a r -> (show a)++" "++r) "" (take 20 tk)))
-
-
-scan :: String -> [Token]
-scan cs = lexer cs ""
-
-
-xmlText :: String -> [Token]
-xmlText "" = []
-xmlText text = [XMLtext text]
-
-
--- scans XML syntax and returns an XMLtext token with the text
-xml :: String -> String -> String -> [Token]
-xml ('{':cs) text n = (xmlText text)++(LSB : lexer cs ('{':n))
-xml ('<':'/':cs) text n = (xmlText text)++(STAG : lexer cs ('<':'/':n))
-xml ('<':'!':'-':cs) text n = xmlComment cs (text++"<!-") n
-xml ('<':cs) text n = (xmlText text)++(TLT : lexer cs ('<':n))
-xml ('(':':':cs) text n = xqComment cs text n
-xml (c:cs) text n = xml cs (text++[c]) n
-xml [] text _ = xmlText text
-
-
-xqComment :: String -> String -> String -> [Token]
-xqComment (':':')':cs) text n = xml cs text n
-xqComment (_:cs) text n = xqComment cs text n
-xqComment [] text _ = xmlText text
-
-
-xmlComment :: String -> String -> String -> [Token]
-xmlComment ('-':'>':cs) text n = xml cs (text++"->") n
-xmlComment (c:cs) text n = xmlComment cs (text++[c]) n
-xmlComment [] text _ = xmlText text
-
-
-isQN :: Char -> Bool
-isQN c = elem c "_-" || isDigit c || isAlpha c
-
-
-isVar :: Char -> Bool
-isVar c = elem c "_" || isDigit c || isAlpha c
-
-
-inXML :: String -> Bool
-inXML ('>':'<':_) = True
-inXML _ = False
-
-
--- the XQuery scanner
-lexer :: String -> String -> [Token]
-lexer [] "" = []
-lexer [] _ = [ TError "Unexpected end of input" ]
-lexer (' ':'>':' ':cs) n = TGT : lexer cs n
-lexer (c:cs) n
-      | isSpace c = lexer cs n
-      | isAlpha c = lexVar (c:cs) n
-      | isDigit c = lexNum (c:cs) n
-lexer ('$':c:cs) n | isAlpha c
-      = let (var,rest) = span isVar (c:cs)
-        in (Variable var) : lexer rest n
-lexer (':':'=':cs) n = ASSIGN : lexer cs n
-lexer ('<':'/':cs) n = STAG : lexer cs ('<':'/':n)
-lexer ('<':'=':cs) n = TLE : lexer cs n
-lexer ('>':'=':cs) n = TGE : lexer cs n
-lexer ('<':'<':cs) n = PRE : lexer cs n
-lexer ('>':'>':cs) n = POST : lexer cs n
-lexer ('/':'>':cs) m = case m of
-                         '<':n -> ETAG : (if inXML n then xml cs "" n else lexer cs n)
-                         _ -> [ TError "Unexpected token: '/>'" ]
-lexer ('(':':':cs) n = lexComment cs n
-lexer ('<':'!':'-':cs) n = lexXmlComment cs "<!-" n
-lexer ('.':'.':cs) n = DOTS : lexer cs n
-lexer ('.':cs) n = DOT : lexer cs n
-lexer ('!':'=':cs) n = TNE : lexer cs n
-lexer ('\'':cs) n = lexString cs "" ('\'':n)
-lexer ('\"':cs) n = lexString cs "" ('\"': n)
-lexer ('[':cs) n = LB : lexer cs n
-lexer (']':cs) n = RB : lexer cs n
-lexer ('(':cs) n = LP : lexer cs n
-lexer (')':cs) n = RP : lexer cs n
-lexer ('}':cs) m = case m of
-                     '{':'\"':n -> RSB : lexString cs "" ('\"':n)
-                     '{':'\'':n -> RSB : lexString cs "" ('\'':n)
-                     '{':n -> RSB : (if inXML n then xml cs "" n else lexer cs n)
-                     _ -> [ TError "Unexpected token: '}'" ]
-lexer ('+':cs) n = PLUS : lexer cs n
-lexer ('-':cs) n = MINUS : lexer cs n
-lexer ('*':cs) n = TIMES : lexer cs n
-lexer ('=':cs) n = TEQ : lexer cs n
-lexer ('<':c:cs) n = TLT : (lexer (c:cs) (if isAlpha c then ('<':n) else n))
-lexer ('>':cs) m = case m of
-                     '<':'/':'>':'<':n -> TGT : (if inXML n then xml cs "" n else lexer cs n)
-                     '<':n -> TGT : xml cs "" ('>':m) 
-                     _ -> TGT : lexer cs m
-lexer (',':cs) n = COMMA : lexer cs n
-lexer ('@':cs) n = ATSIGN : lexer cs n
-lexer ('/':cs) n = SLASH : lexer cs n
-lexer ('{':cs) n = LSB : lexer cs ('{':n)
-lexer ('|':cs) n = UNION : lexer cs n
-lexer (';':cs) n = SEMI : lexer cs n
-lexer (':':cs) n = COLON : lexer cs n
-lexer (c:cs) n = TError ("Illegal character: '"++[c,'\'']) : lexer cs n
-
-
-lexNum :: String -> String -> [Token]
-lexNum cs n = if null rest || head rest /= '.'
-                 then TInteger (read k) : lexer rest n
-              else let (m,rest2) = span isDigit (tail rest)
-                       val::Float = read (k++('.':m))
-                   in case rest2 of
-                        ('e':rest3) -> let (exp,rest4) = span isDigit rest3
-                                       in (TFloat (val*10^(read exp))) : lexer rest4 n
-                        _ -> (TFloat val) : lexer rest2 n
-      where (k,rest) = span isDigit cs
-
-
-lexString :: String -> String -> String -> [Token]
-lexString ('\"':cs) s m = case m of
-                            '\"':n -> (TString s) : (lexer cs n)
-                            _ -> lexString cs (s++"\"") m
-lexString ('\'':cs) s m = case m of
-                            '\'':n -> (TString s) : (lexer cs n)
-                            _ -> lexString cs (s++"\'") m
-lexString ('{':cs) s n = (TString s) : LSB : (lexer cs ('{':n))
-lexString ('\\':'n':cs) s n = lexString cs (s++['\n']) n
-lexString ('\\':'r':cs) s n = lexString cs (s++['\r']) n
-lexString (c:cs) s n = lexString cs (s++[c]) n
-lexString [] s n = [ TError "End of input while in string" ]
-
-
-lexComment :: String -> String -> [Token]
-lexComment (':':')':cs) n = lexer cs n
-lexComment (_:cs) n = lexComment cs n
-lexComment [] n = [ TError "End of input while in comment" ]
-
-
-lexXmlComment :: String -> String -> String -> [Token]
-lexXmlComment ('-':'>':cs) text n = (xmlText (text++"->"))++(lexer cs n)
-lexXmlComment (c:cs) text n = lexXmlComment cs (text++[c]) n
-lexXmlComment [] text _ = xmlText text
-
-
-lexVar :: String -> String -> [Token]
-lexVar cs n =
-    let (nm,rest) = span isQN cs
-    in (case nm of
-          "return" -> RETURN
-          "some" -> SOME
-          "every" -> EVERY
-          "if" -> IF
-          "then" -> THEN
-          "else" -> ELSE
-          "to" -> TO
-          "div" -> DIV
-          "idiv" -> IDIV
-          "mod" -> MOD
-          "and" -> AND
-          "or" -> OR
-          "not" -> NOT
-          "union" -> UNION
-          "intersect" -> INTERSECT
-          "except" -> EXCEPT
-          "for" -> FOR
-          "let" -> LET
-          "in" -> IN
-          "as" -> AS
-          "where" -> WHERE
-          "order" -> ORDER
-          "by" -> BY
-          "ascending" -> ASCENDING
-          "descending" -> DESCENDING
-          "element" -> ELEMENT
-          "attribute" -> ATTRIBUTE
-          "satisfies" -> SATISFIES
-          "declare" -> DECLARE
-          "function" -> FUNCTION
-          "variable" -> VARIABLE
-          "at" -> AT
-          "eq" -> SEQ
-          "ne" -> SNE
-          "lt" -> SLT
-          "le" -> SLE
-          "gt" -> SGT
-          "ge" -> SGE
-          "is" -> IS
-	  "insert" -> INSERT
-	  "into" -> INTO
-	  "delete" -> DELETE
-	  "from" -> FROM
-	  "replace" -> REPLACE
-	  "with" -> WITH
-          var -> QName var
-       ) : lexer rest n
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<built-in>" #-}
-{-# LINE 1 "<command line>" #-}
+module Text.XML.HXQ.Parser(Ast(..),scan,parse,call,concatenateAll,ppAst) where
+import Char
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array
+#else
+import Array
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import GHC.Exts
+#else
+import GlaExts
+#endif
+
+-- parser produced by Happy Version 1.18.2
+
+newtype HappyAbsSyn  = HappyAbsSyn HappyAny
+#if __GLASGOW_HASKELL__ >= 607
+type HappyAny = GHC.Exts.Any
+#else
+type HappyAny = forall a . a
+#endif
+happyIn4 :: ([ Ast ]) -> (HappyAbsSyn )
+happyIn4 x = unsafeCoerce# x
+{-# INLINE happyIn4 #-}
+happyOut4 :: (HappyAbsSyn ) -> ([ Ast ])
+happyOut4 x = unsafeCoerce# x
+{-# INLINE happyOut4 #-}
+happyIn5 :: ([ Ast ]) -> (HappyAbsSyn )
+happyIn5 x = unsafeCoerce# x
+{-# INLINE happyIn5 #-}
+happyOut5 :: (HappyAbsSyn ) -> ([ Ast ])
+happyOut5 x = unsafeCoerce# x
+{-# INLINE happyOut5 #-}
+happyIn6 :: (Ast) -> (HappyAbsSyn )
+happyIn6 x = unsafeCoerce# x
+{-# INLINE happyIn6 #-}
+happyOut6 :: (HappyAbsSyn ) -> (Ast)
+happyOut6 x = unsafeCoerce# x
+{-# INLINE happyOut6 #-}
+happyIn7 :: (String) -> (HappyAbsSyn )
+happyIn7 x = unsafeCoerce# x
+{-# INLINE happyIn7 #-}
+happyOut7 :: (HappyAbsSyn ) -> (String)
+happyOut7 x = unsafeCoerce# x
+{-# INLINE happyOut7 #-}
+happyIn8 :: ([ Ast ]) -> (HappyAbsSyn )
+happyIn8 x = unsafeCoerce# x
+{-# INLINE happyIn8 #-}
+happyOut8 :: (HappyAbsSyn ) -> ([ Ast ])
+happyOut8 x = unsafeCoerce# x
+{-# INLINE happyOut8 #-}
+happyIn9 :: (String) -> (HappyAbsSyn )
+happyIn9 x = unsafeCoerce# x
+{-# INLINE happyIn9 #-}
+happyOut9 :: (HappyAbsSyn ) -> (String)
+happyOut9 x = unsafeCoerce# x
+{-# INLINE happyOut9 #-}
+happyIn10 :: (Ast) -> (HappyAbsSyn )
+happyIn10 x = unsafeCoerce# x
+{-# INLINE happyIn10 #-}
+happyOut10 :: (HappyAbsSyn ) -> (Ast)
+happyOut10 x = unsafeCoerce# x
+{-# INLINE happyOut10 #-}
+happyIn11 :: (Ast) -> (HappyAbsSyn )
+happyIn11 x = unsafeCoerce# x
+{-# INLINE happyIn11 #-}
+happyOut11 :: (HappyAbsSyn ) -> (Ast)
+happyOut11 x = unsafeCoerce# x
+{-# INLINE happyOut11 #-}
+happyIn12 :: ([ Ast ]) -> (HappyAbsSyn )
+happyIn12 x = unsafeCoerce# x
+{-# INLINE happyIn12 #-}
+happyOut12 :: (HappyAbsSyn ) -> ([ Ast ])
+happyOut12 x = unsafeCoerce# x
+{-# INLINE happyOut12 #-}
+happyIn13 :: (Ast -> Ast) -> (HappyAbsSyn )
+happyIn13 x = unsafeCoerce# x
+{-# INLINE happyIn13 #-}
+happyOut13 :: (HappyAbsSyn ) -> (Ast -> Ast)
+happyOut13 x = unsafeCoerce# x
+{-# INLINE happyOut13 #-}
+happyIn14 :: (Ast -> Ast) -> (HappyAbsSyn )
+happyIn14 x = unsafeCoerce# x
+{-# INLINE happyIn14 #-}
+happyOut14 :: (HappyAbsSyn ) -> (Ast -> Ast)
+happyOut14 x = unsafeCoerce# x
+{-# INLINE happyOut14 #-}
+happyIn15 :: (Ast -> Ast) -> (HappyAbsSyn )
+happyIn15 x = unsafeCoerce# x
+{-# INLINE happyIn15 #-}
+happyOut15 :: (HappyAbsSyn ) -> (Ast -> Ast)
+happyOut15 x = unsafeCoerce# x
+{-# INLINE happyOut15 #-}
+happyIn16 :: (Ast -> Ast) -> (HappyAbsSyn )
+happyIn16 x = unsafeCoerce# x
+{-# INLINE happyIn16 #-}
+happyOut16 :: (HappyAbsSyn ) -> (Ast -> Ast)
+happyOut16 x = unsafeCoerce# x
+{-# INLINE happyOut16 #-}
+happyIn17 :: (( Ast -> Ast, Ast -> Ast )) -> (HappyAbsSyn )
+happyIn17 x = unsafeCoerce# x
+{-# INLINE happyIn17 #-}
+happyOut17 :: (HappyAbsSyn ) -> (( Ast -> Ast, Ast -> Ast ))
+happyOut17 x = unsafeCoerce# x
+{-# INLINE happyOut17 #-}
+happyIn18 :: (( [ Ast ], [ Ast ] )) -> (HappyAbsSyn )
+happyIn18 x = unsafeCoerce# x
+{-# INLINE happyIn18 #-}
+happyOut18 :: (HappyAbsSyn ) -> (( [ Ast ], [ Ast ] ))
+happyOut18 x = unsafeCoerce# x
+{-# INLINE happyOut18 #-}
+happyIn19 :: (Ast) -> (HappyAbsSyn )
+happyIn19 x = unsafeCoerce# x
+{-# INLINE happyIn19 #-}
+happyOut19 :: (HappyAbsSyn ) -> (Ast)
+happyOut19 x = unsafeCoerce# x
+{-# INLINE happyOut19 #-}
+happyIn20 :: (Ast) -> (HappyAbsSyn )
+happyIn20 x = unsafeCoerce# x
+{-# INLINE happyIn20 #-}
+happyOut20 :: (HappyAbsSyn ) -> (Ast)
+happyOut20 x = unsafeCoerce# x
+{-# INLINE happyOut20 #-}
+happyIn21 :: (Ast) -> (HappyAbsSyn )
+happyIn21 x = unsafeCoerce# x
+{-# INLINE happyIn21 #-}
+happyOut21 :: (HappyAbsSyn ) -> (Ast)
+happyOut21 x = unsafeCoerce# x
+{-# INLINE happyOut21 #-}
+happyIn22 :: ([ Ast ]) -> (HappyAbsSyn )
+happyIn22 x = unsafeCoerce# x
+{-# INLINE happyIn22 #-}
+happyOut22 :: (HappyAbsSyn ) -> ([ Ast ])
+happyOut22 x = unsafeCoerce# x
+{-# INLINE happyOut22 #-}
+happyIn23 :: ([ Ast ]) -> (HappyAbsSyn )
+happyIn23 x = unsafeCoerce# x
+{-# INLINE happyIn23 #-}
+happyOut23 :: (HappyAbsSyn ) -> ([ Ast ])
+happyOut23 x = unsafeCoerce# x
+{-# INLINE happyOut23 #-}
+happyIn24 :: (Ast) -> (HappyAbsSyn )
+happyIn24 x = unsafeCoerce# x
+{-# INLINE happyIn24 #-}
+happyOut24 :: (HappyAbsSyn ) -> (Ast)
+happyOut24 x = unsafeCoerce# x
+{-# INLINE happyOut24 #-}
+happyIn25 :: ([Ast]) -> (HappyAbsSyn )
+happyIn25 x = unsafeCoerce# x
+{-# INLINE happyIn25 #-}
+happyOut25 :: (HappyAbsSyn ) -> ([Ast])
+happyOut25 x = unsafeCoerce# x
+{-# INLINE happyOut25 #-}
+happyIn26 :: ([ Ast ]) -> (HappyAbsSyn )
+happyIn26 x = unsafeCoerce# x
+{-# INLINE happyIn26 #-}
+happyOut26 :: (HappyAbsSyn ) -> ([ Ast ])
+happyOut26 x = unsafeCoerce# x
+{-# INLINE happyOut26 #-}
+happyIn27 :: (Ast) -> (HappyAbsSyn )
+happyIn27 x = unsafeCoerce# x
+{-# INLINE happyIn27 #-}
+happyOut27 :: (HappyAbsSyn ) -> (Ast)
+happyOut27 x = unsafeCoerce# x
+{-# INLINE happyOut27 #-}
+happyIn28 :: (Ast -> Ast) -> (HappyAbsSyn )
+happyIn28 x = unsafeCoerce# x
+{-# INLINE happyIn28 #-}
+happyOut28 :: (HappyAbsSyn ) -> (Ast -> Ast)
+happyOut28 x = unsafeCoerce# x
+{-# INLINE happyOut28 #-}
+happyIn29 :: (Ast -> Ast) -> (HappyAbsSyn )
+happyIn29 x = unsafeCoerce# x
+{-# INLINE happyIn29 #-}
+happyOut29 :: (HappyAbsSyn ) -> (Ast -> Ast)
+happyOut29 x = unsafeCoerce# x
+{-# INLINE happyOut29 #-}
+happyIn30 :: ([ Ast ]) -> (HappyAbsSyn )
+happyIn30 x = unsafeCoerce# x
+{-# INLINE happyIn30 #-}
+happyOut30 :: (HappyAbsSyn ) -> ([ Ast ])
+happyOut30 x = unsafeCoerce# x
+{-# INLINE happyOut30 #-}
+happyIn31 :: (String -> Ast -> [ Ast ] -> Ast) -> (HappyAbsSyn )
+happyIn31 x = unsafeCoerce# x
+{-# INLINE happyIn31 #-}
+happyOut31 :: (HappyAbsSyn ) -> (String -> Ast -> [ Ast ] -> Ast)
+happyOut31 x = unsafeCoerce# x
+{-# INLINE happyOut31 #-}
+happyIn32 :: (String -> Ast -> Ast) -> (HappyAbsSyn )
+happyIn32 x = unsafeCoerce# x
+{-# INLINE happyIn32 #-}
+happyOut32 :: (HappyAbsSyn ) -> (String -> Ast -> Ast)
+happyOut32 x = unsafeCoerce# x
+{-# INLINE happyOut32 #-}
+happyInTok :: (Token) -> (HappyAbsSyn )
+happyInTok x = unsafeCoerce# x
+{-# INLINE happyInTok #-}
+happyOutTok :: (HappyAbsSyn ) -> (Token)
+happyOutTok x = unsafeCoerce# x
+{-# INLINE happyOutTok #-}
+
+
+happyActOffsets :: HappyAddr
+happyActOffsets = HappyA# "\xef\x00\xef\x00\xd5\xff\x1b\x02\x23\x02\x00\x00\x70\x03\x56\x00\x00\x00\x00\x00\xfe\xff\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\xde\x01\xde\x01\x3f\x01\x9f\x00\x3f\x01\x3f\x01\x3f\x01\x00\x00\xef\x01\x3f\x01\xa2\x01\xa2\x01\x62\x00\x21\x00\x57\x00\xab\x01\xf4\x00\x00\x00\x3f\x01\xa5\x01\x3f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x99\x01\xd8\x02\x3f\x01\xbc\x02\x92\x01\x7f\x01\xdd\xff\x00\x00\xc0\x01\x8f\x01\x3f\x01\x86\x01\xb8\x01\x8c\x01\x3f\x01\x96\x01\x95\x01\x6c\x00\x93\x01\x00\x00\x82\x01\x00\x00\x00\x00\x70\x03\x83\x00\x19\x00\x00\x00\x84\x01\x45\x00\xf5\xff\x05\x00\x3f\x01\x00\x00\x20\x00\x00\x00\x89\x01\x6a\x01\x6a\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x3f\x01\x6d\x01\x4f\x00\x00\x00\xff\xff\x00\x00\x68\x01\x10\x00\x00\x00\xea\xff\x6e\x09\x6e\x09\x6e\x09\xa0\x09\x6e\x09\x87\x09\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x00\xf6\x00\xb8\x09\x70\x03\x88\x01\x87\x01\x8a\x01\x7d\x01\x00\x00\xfa\xff\x3f\x01\x07\x00\x06\x00\x52\x01\x00\x00\x00\x00\x7f\x00\x75\x01\x00\x00\x3f\x01\x29\x00\x39\x01\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x00\x00\x76\x01\x4d\x01\x3f\x01\x35\x01\x35\x01\x3f\x01\x61\x02\x77\x01\x3f\x01\x4c\x01\x40\x02\x74\x01\x3f\x01\x05\x00\x00\x00\x03\x00\x51\x01\x72\x01\x3f\x01\x32\x03\x3f\x01\x32\x03\x32\x03\x2f\x01\x3f\x01\x00\x00\x00\x00\x43\x01\x7a\x00\x00\x00\x6e\x01\x6e\x00\x00\x00\x6c\x01\x16\x03\x42\x01\x47\x01\x16\x03\x53\x01\xf9\xff\x16\x03\xc2\x01\x16\x03\x16\x03\xf2\xff\x00\x00\x57\x00\x79\x00\x00\x00\xe3\x01\x00\x00\x00\x00\x4e\x01\x69\x00\x00\x00\x3f\x01\x32\x01\x00\x00\x00\x00\x3f\x01\x3f\x01\x5c\x01\x0b\x00\x59\x01\x00\x00\x00\x00\x55\x01\x00\x00\x00\x00\x00\x00\x54\x01\x16\x03\x7e\x02\x2e\x01\x41\x01\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x50\x01\x3f\x01\x0d\x01\x3f\x01\x00\x00\xf9\xff\x3f\x01\x3f\x01\x3f\x01\x00\x00\x3f\x01\x00\x00\x16\x03\x0a\x00\x2c\x01\xea\xff\x50\x00\x07\x01\x60\x00\x5a\x00\x16\x03\x16\x03\x00\x00\x8c\x03\x2b\x01\x16\x03\x4b\x01\x00\x00\x4b\x01\x00\x00\x00\x00\x3f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x02\x4b\x01\x3f\x01\x00\x00\x00\x00\x27\x01\x3f\x01\xea\xff\x0b\x00\xfb\xff\x22\x02\xea\xff\x16\x03\x00\x00\x0b\x00\x00\x00\x3f\x01\x01\x02\x00\x00\x00\x00"#
+
+happyGotoOffsets :: HappyAddr
+happyGotoOffsets = HappyA# "\x0a\x01\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x01\x00\x00\xd1\x00\xb8\x00\x5e\x09\x3f\x04\x28\x04\x47\x09\x30\x09\x00\x00\x49\x01\x19\x09\xad\x00\xab\x00\x48\x01\x46\x01\x29\x01\x00\x00\x00\x00\x00\x00\x02\x09\x00\x00\xeb\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x08\x00\x00\x44\x01\x40\x01\x00\x00\x23\x01\x00\x00\x26\x01\xbd\x08\x00\x00\x00\x00\x24\x01\xa6\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x01\x11\x04\x00\x00\x04\x01\x00\x00\xec\x00\x6d\x00\x16\x00\x8f\x08\x78\x08\x61\x08\x4a\x08\x33\x08\x1c\x08\x05\x08\xee\x07\xd7\x07\xc0\x07\xa9\x07\x92\x07\x7b\x07\x64\x07\x4d\x07\x36\x07\x1f\x07\x08\x07\xf1\x06\xda\x06\xc3\x06\xac\x06\x95\x06\x7e\x06\x67\x06\x50\x06\x39\x06\x22\x06\x0b\x06\x00\x00\xfa\x03\x00\x00\x5a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x00\xe3\x03\x1a\x01\x0f\x01\x0c\x01\x00\x00\x00\x00\x00\x00\xf5\x00\x00\x00\xf4\x05\xe7\x00\xe0\x00\xdd\x05\xc6\x05\xaf\x05\x00\x00\x98\x05\x00\x00\x00\x00\x01\x01\x81\x05\xdc\x00\xd7\x00\x6a\x05\x00\x00\x00\x00\xcc\x03\x00\x00\x00\x00\x00\x00\xb5\x03\xa0\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x53\x05\x00\x00\x3c\x05\x00\x00\x00\x00\xe3\x00\x25\x05\x00\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x00\xe5\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x03\x1c\x00\x00\x00\x00\x00\xfe\x02\x0e\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\xd9\x00\x55\x00\x00\x00\xf7\x04\x5b\x00\xe0\x04\x00\x00\x85\x00\xc9\x04\xb2\x04\xa6\x02\x00\x00\xaa\x01\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x00\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x9b\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x84\x04\x00\x00\x00\x00\x00\x00\x6d\x04\xc2\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x04\x00\x00\x00\x00\x00\x00"#
+
+happyDefActions :: HappyAddr
+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\xfd\xff\x7d\xff\x7a\xff\xf9\xff\xae\xff\xe2\xff\xe3\xff\x00\x00\xc1\xff\x93\xff\xe4\xff\x80\xff\x7f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\xff\x00\x00\x79\xff\x00\x00\x00\x00\x00\x00\xe9\xff\xc0\xff\xbf\xff\x92\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\x00\x00\x00\x00\x00\x00\xf5\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb8\xff\x00\x00\xb9\xff\xc2\xff\x9d\xff\xc3\xff\xc4\xff\xbb\xff\x00\x00\x00\x00\x77\xff\x00\x00\x00\x00\x00\x00\x8c\xff\x00\x00\x90\xff\x00\x00\xa2\xff\xac\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\xfe\xff\xfb\xff\x00\x00\x75\xff\x00\x00\xc6\xff\xc7\xff\xc8\xff\xc9\xff\xca\xff\xcb\xff\xcc\xff\xcd\xff\xce\xff\xcf\xff\xd0\xff\xd1\xff\xd2\xff\xd3\xff\xd4\xff\xd5\xff\xd6\xff\xd7\xff\xd8\xff\xd9\xff\xda\xff\xdb\xff\xdc\xff\xdd\xff\xde\xff\xdf\xff\xe0\xff\xe1\xff\xaf\xff\xb6\xff\xb7\xff\x00\x00\x00\x00\x98\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\xff\x9a\xff\x00\x00\x8a\xff\x88\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\xff\x00\x00\x91\xff\x00\x00\x9c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xff\xf4\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xff\x00\x00\xbc\xff\xbe\xff\x00\x00\x00\x00\x7c\xff\x7b\xff\x89\xff\x00\x00\xa5\xff\x00\x00\x00\x00\xa6\xff\x00\x00\xb1\xff\x00\x00\x00\x00\xb5\xff\x00\x00\x00\x00\xba\xff\x00\x00\xe6\xff\xe7\xff\x00\x00\x80\xff\x00\x00\x00\x00\x82\xff\x00\x00\x87\xff\x8f\xff\x00\x00\x00\x00\x94\xff\x00\x00\x00\x00\x95\xff\x96\xff\x00\x00\x00\x00\xef\xff\xc5\xff\x00\x00\x76\xff\xfa\xff\x00\x00\xec\xff\xeb\xff\xea\xff\x00\x00\xe8\xff\xa7\xff\xad\xff\x00\x00\x00\x00\x9b\xff\xa3\xff\x81\xff\x80\xff\x00\x00\x80\xff\x86\xff\x00\x00\x00\x00\x00\x00\x8e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9f\xff\x00\x00\x9e\xff\xf8\xff\x00\x00\xf3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xff\xb4\xff\x8d\xff\xe5\xff\x00\x00\xb3\xff\x85\xff\x80\xff\x84\xff\x97\xff\xa4\xff\x00\x00\xab\xff\xa9\xff\xa8\xff\xee\xff\xed\xff\xa7\xff\x83\xff\x00\x00\xa1\xff\xa0\xff\xf1\xff\x00\x00\x00\x00\xf2\xff\x00\x00\x00\x00\x00\x00\xb2\xff\xaa\xff\xf0\xff\xf7\xff\x00\x00\x00\x00\xf6\xff"#
+
+happyCheck :: HappyAddr
+happyCheck = HappyA# "\xff\xff\x02\x00\x03\x00\x04\x00\x0b\x00\x0b\x00\x0b\x00\x0b\x00\x09\x00\x0e\x00\x0b\x00\x10\x00\x07\x00\x0e\x00\x0f\x00\x10\x00\x16\x00\x0b\x00\x0b\x00\x10\x00\x0a\x00\x16\x00\x18\x00\x42\x00\x3b\x00\x0e\x00\x0a\x00\x10\x00\x06\x00\x2b\x00\x34\x00\x03\x00\x43\x00\x0b\x00\x2d\x00\x0a\x00\x25\x00\x3b\x00\x0f\x00\x52\x00\x29\x00\x2a\x00\x09\x00\x0b\x00\x0b\x00\x38\x00\x34\x00\x35\x00\x36\x00\x3f\x00\x09\x00\x34\x00\x35\x00\x37\x00\x16\x00\x2d\x00\x39\x00\x10\x00\x3b\x00\x3c\x00\x1a\x00\x2d\x00\x3b\x00\x3a\x00\x41\x00\x3b\x00\x3b\x00\x44\x00\x45\x00\x46\x00\x2d\x00\x4c\x00\x4e\x00\x06\x00\x51\x00\x51\x00\x4d\x00\x51\x00\x4f\x00\x50\x00\x51\x00\x02\x00\x03\x00\x04\x00\x34\x00\x35\x00\x36\x00\x4c\x00\x09\x00\x0a\x00\x0b\x00\x0b\x00\x3b\x00\x0e\x00\x0f\x00\x10\x00\x09\x00\x06\x00\x39\x00\x3a\x00\x3b\x00\x16\x00\x0c\x00\x10\x00\x03\x00\x40\x00\x41\x00\x09\x00\x0c\x00\x0b\x00\x4e\x00\x1a\x00\x0c\x00\x51\x00\x2d\x00\x06\x00\x25\x00\x0c\x00\x4d\x00\x0a\x00\x29\x00\x2a\x00\x0c\x00\x16\x00\x2c\x00\x38\x00\x0f\x00\x29\x00\x2a\x00\x1a\x00\x09\x00\x34\x00\x35\x00\x2f\x00\x0c\x00\x2d\x00\x39\x00\x10\x00\x3b\x00\x0c\x00\x03\x00\x2d\x00\x05\x00\x0c\x00\x41\x00\x2d\x00\x3b\x00\x44\x00\x45\x00\x46\x00\x2d\x00\x2b\x00\x41\x00\x14\x00\x15\x00\x2d\x00\x4d\x00\x3b\x00\x4f\x00\x50\x00\x51\x00\x02\x00\x03\x00\x04\x00\x4d\x00\x14\x00\x15\x00\x2d\x00\x09\x00\x0a\x00\x0b\x00\x3f\x00\x2d\x00\x0e\x00\x0f\x00\x10\x00\x2d\x00\x06\x00\x39\x00\x06\x00\x3b\x00\x16\x00\x0b\x00\x0a\x00\x18\x00\x19\x00\x41\x00\x01\x00\x02\x00\x03\x00\x06\x00\x1a\x00\x06\x00\x07\x00\x0a\x00\x09\x00\x25\x00\x03\x00\x4d\x00\x05\x00\x29\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x03\x00\x17\x00\x05\x00\x34\x00\x35\x00\x1b\x00\x1c\x00\x06\x00\x39\x00\x03\x00\x3b\x00\x0a\x00\x03\x00\x06\x00\x03\x00\x06\x00\x41\x00\x06\x00\x06\x00\x44\x00\x45\x00\x46\x00\x06\x00\x04\x00\x03\x00\x06\x00\x03\x00\x06\x00\x4d\x00\x06\x00\x4f\x00\x50\x00\x51\x00\x02\x00\x03\x00\x04\x00\x1b\x00\x1c\x00\x1b\x00\x1c\x00\x09\x00\x0d\x00\x0b\x00\x11\x00\x12\x00\x0e\x00\x0f\x00\x10\x00\x1b\x00\x1c\x00\x1b\x00\x1c\x00\x03\x00\x16\x00\x10\x00\x11\x00\x12\x00\x13\x00\x00\x00\x01\x00\x02\x00\x03\x00\x19\x00\x03\x00\x06\x00\x07\x00\x03\x00\x09\x00\x25\x00\x11\x00\x12\x00\x13\x00\x29\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x03\x00\x14\x00\x15\x00\x03\x00\x17\x00\x05\x00\x34\x00\x35\x00\x1b\x00\x1c\x00\x03\x00\x39\x00\x03\x00\x3b\x00\x3c\x00\x03\x00\x18\x00\x19\x00\x06\x00\x41\x00\x3d\x00\x3e\x00\x44\x00\x45\x00\x46\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x4d\x00\x1a\x00\x4f\x00\x50\x00\x51\x00\x02\x00\x03\x00\x04\x00\x1b\x00\x1c\x00\x06\x00\x03\x00\x09\x00\x03\x00\x0b\x00\x03\x00\x03\x00\x0e\x00\x0f\x00\x10\x00\x1a\x00\x0c\x00\x07\x00\x2c\x00\x4d\x00\x16\x00\x2b\x00\x07\x00\x2c\x00\x18\x00\x4d\x00\x2d\x00\x02\x00\x03\x00\x0a\x00\x0a\x00\x06\x00\x07\x00\x09\x00\x09\x00\x25\x00\x09\x00\x18\x00\x14\x00\x29\x00\x2a\x00\x10\x00\x11\x00\x12\x00\x3b\x00\x14\x00\x15\x00\x2e\x00\x17\x00\x2b\x00\x34\x00\x35\x00\x1b\x00\x1c\x00\x0b\x00\x39\x00\x0b\x00\x3b\x00\x09\x00\x4d\x00\x3a\x00\x0a\x00\x2e\x00\x41\x00\x0a\x00\x4d\x00\x44\x00\x45\x00\x46\x00\x4d\x00\x3b\x00\x3b\x00\x05\x00\x14\x00\x01\x00\x4d\x00\x3b\x00\x4f\x00\x50\x00\x51\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x03\x00\x31\x00\x3a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x2d\x00\x2d\x00\x4e\x00\x4d\x00\x4b\x00\x30\x00\x10\x00\x11\x00\x12\x00\x3b\x00\x14\x00\x15\x00\x2d\x00\x17\x00\x2d\x00\x0b\x00\x2e\x00\x1b\x00\x1c\x00\x3b\x00\x06\x00\x43\x00\x3b\x00\x0b\x00\x4d\x00\x3b\x00\x4a\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x08\x00\x53\x00\x48\x00\x43\x00\x4d\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x4a\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x3b\x00\x4d\x00\x09\x00\x4a\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x4a\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x4e\x00\xff\xff\xff\xff\x4a\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x4a\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x03\x00\xff\xff\x4a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x03\x00\xff\xff\x47\x00\x06\x00\x07\x00\x4a\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\x03\x00\xff\xff\x4a\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\x03\x00\xff\xff\x4a\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\x03\x00\x1b\x00\x1c\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\xff\xff\x14\x00\x15\x00\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x25\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+happyTable :: HappyAddr
+happyTable = HappyA# "\x00\x00\x11\x00\x12\x00\x13\x00\x15\x00\xe2\x00\x32\x01\x49\x00\x14\x00\xee\x00\x15\x00\xef\x00\xa2\x00\x16\x00\x17\x00\x18\x00\x19\x00\x34\x00\x38\x00\xc5\x00\x0d\x01\x19\x00\x4b\x00\x70\x00\xb9\x00\xee\x00\xeb\x00\xef\x00\x38\x00\xfe\x00\xea\x00\xf4\x00\xba\x00\x92\x00\xa4\x00\xa8\x00\x1a\x00\x35\x00\x2e\x01\x71\x00\x1b\x00\x1c\x00\x33\x00\x99\x00\x34\x00\xa5\x00\x9a\x00\x9b\x00\xe3\x00\xff\x00\x14\x00\x1d\x00\x1e\x00\x4c\x00\x19\x00\x0e\x01\x1f\x00\x18\x00\x20\x00\x21\x00\x22\x01\xa9\x00\x35\x00\xa3\x00\x22\x00\x35\x00\x35\x00\x23\x00\x24\x00\x25\x00\xa9\x00\xf0\x00\xe4\x00\x26\x01\x29\x00\xe5\x00\x26\x00\x4a\x00\x27\x00\x28\x00\x29\x00\x11\x00\x12\x00\x13\x00\x9a\x00\x9b\x00\x9c\x00\xf0\x00\x14\x00\x74\x00\x15\x00\x28\x01\x35\x00\x16\x00\x17\x00\x18\x00\x14\x00\x14\x01\xd9\x00\xda\x00\x20\x00\x19\x00\x25\x01\x18\x00\xaa\x00\xdb\x00\x22\x00\x37\x00\x26\x01\x38\x00\x9d\x00\x16\x01\x1a\x01\x9e\x00\xa4\x00\x3a\x00\x1a\x00\xf7\x00\x26\x00\x93\x00\x1b\x00\x1c\x00\x06\x01\xab\x00\x29\x01\xa6\x00\x1c\x01\x4e\x00\x4f\x00\x18\x01\x14\x00\x1d\x00\x1e\x00\x50\x00\x08\x01\xa9\x00\x1f\x00\x18\x00\x20\x00\xde\x00\xe7\x00\xa9\x00\x2f\x01\xaa\x00\x22\x00\xa9\x00\x20\x00\x23\x00\x24\x00\x25\x00\xa9\x00\xad\x00\x22\x00\x12\x01\x0c\x00\xa9\x00\x26\x00\x35\x00\x27\x00\x28\x00\x29\x00\x11\x00\x12\x00\x13\x00\x26\x00\x00\x01\x0c\x00\xa9\x00\x14\x00\x44\x00\x15\x00\xae\x00\xa9\x00\x16\x00\x17\x00\x18\x00\xa9\x00\x38\x00\xfb\x00\x3a\x00\x20\x00\x19\x00\x39\x00\x3b\x00\xc5\x00\xa0\x00\x22\x00\x02\x00\x03\x00\x04\x00\x3a\x00\xfc\x00\x05\x00\x06\x00\x45\x00\x07\x00\x1a\x00\xe7\x00\x26\x00\x2a\x01\x1b\x00\x1c\x00\x08\x00\x09\x00\x0a\x00\xdc\x00\x0b\x00\x0c\x00\xe7\x00\x0d\x00\x29\x01\x1d\x00\x1e\x00\x0e\x00\x0f\x00\x3a\x00\x1f\x00\xc3\x00\x20\x00\x46\x00\x04\x00\xcd\x00\x04\x00\x05\x00\x22\x00\x05\x00\xce\x00\x23\x00\x24\x00\x25\x00\xd6\x00\x09\x01\x04\x00\x0a\x01\x04\x00\x05\x00\x26\x00\x05\x00\x27\x00\x28\x00\x29\x00\x11\x00\x12\x00\x13\x00\x17\x01\x0f\x00\xf9\x00\x0f\x00\x14\x00\x94\x00\x15\x00\xe0\x00\x0a\x00\x16\x00\x17\x00\x18\x00\xfb\x00\x0f\x00\xd7\x00\x0f\x00\xd0\x00\x19\x00\x54\x00\x55\x00\x56\x00\x57\x00\x29\x00\x02\x00\x03\x00\x04\x00\xdc\x00\xde\x00\x05\x00\x06\x00\x31\x00\x07\x00\x1a\x00\x96\x00\x0a\x00\x97\x00\x1b\x00\x1c\x00\x08\x00\x09\x00\x0a\x00\x35\x00\x0b\x00\x0c\x00\xe7\x00\x0d\x00\xe8\x00\x1d\x00\x1e\x00\x0e\x00\x0f\x00\xb1\x00\x1f\x00\xb5\x00\x20\x00\x21\x00\x04\x00\x9f\x00\xa0\x00\x05\x00\x22\x00\x2e\x00\x2f\x00\x23\x00\x24\x00\x25\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x26\x00\xb7\x00\x27\x00\x28\x00\x29\x00\x11\x00\x12\x00\x13\x00\x30\x00\x0f\x00\xba\x00\xbb\x00\x14\x00\x31\x00\x15\x00\x35\x00\x3d\x00\x16\x00\x17\x00\x18\x00\x47\x00\x4c\x00\xa2\x00\x2d\x01\x26\x00\x19\x00\x24\x01\xa2\x00\x0c\x01\x1b\x01\x26\x00\x1c\x01\x71\x00\x04\x00\x20\x01\x21\x01\x05\x00\x06\x00\xed\x00\x07\x00\x1a\x00\xf1\x00\xf8\x00\x02\x01\x1b\x00\x1c\x00\x08\x00\x09\x00\x0a\x00\x35\x00\x0b\x00\x0c\x00\x04\x01\x0d\x00\x03\x01\x1d\x00\x1e\x00\x0e\x00\x0f\x00\x05\x01\x1f\x00\x07\x01\x20\x00\xc2\x00\x26\x00\xa3\x00\xc8\x00\xc3\x00\x22\x00\xcb\x00\x26\x00\x23\x00\x24\x00\x25\x00\x26\x00\xb9\x00\x35\x00\xa7\x00\xd2\x00\xe7\x00\x26\x00\x35\x00\x27\x00\x28\x00\x29\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x04\x00\xe6\x00\xa3\x00\x05\x00\x40\x00\x0e\x01\x07\x00\xa4\x00\xaf\x00\xec\x00\x26\x00\x75\x00\x96\x00\x08\x00\x09\x00\x0a\x00\x35\x00\x0b\x00\x0c\x00\xa4\x00\x0d\x00\xaf\x00\xb3\x00\xb0\x00\x0e\x00\x0f\x00\x35\x00\x00\x01\xb4\x00\x35\x00\xb7\x00\x26\x00\x35\x00\x6d\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\xf9\x00\xff\xff\x2c\x00\x30\x00\x26\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x34\x01\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x35\x00\x26\x00\x6e\x00\x6d\x00\x31\x01\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\xc9\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6f\x00\x00\x00\x00\x00\x6d\x00\xcc\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x00\x00\x00\x00\x04\x00\x00\x00\x6d\x00\x05\x00\x40\x00\x0f\x01\x07\x00\x1e\x01\x1f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x04\x00\x00\x00\xbd\x00\x05\x00\xf2\x00\x6d\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x6d\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x6d\x00\x05\x00\x40\x00\xf5\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x6d\x00\x05\x00\x40\x00\xc6\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x40\x00\xc9\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x40\x00\xdf\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x40\x00\x72\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x40\x00\x9e\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x40\x00\x41\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x40\x00\x42\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x32\x01\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x2b\x01\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x2d\x01\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x21\x01\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x10\x01\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x11\x01\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x13\x01\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x15\x01\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xf1\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x08\x01\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xbf\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xc0\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xcc\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xcf\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xd2\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xd3\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xd4\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xd5\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xdb\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x75\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x76\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x77\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x78\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x79\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x7a\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x7b\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x7c\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x7d\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x7e\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x7f\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x80\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x81\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x82\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x83\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x84\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x85\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x86\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x87\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x88\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x89\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x8a\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x8b\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x8c\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x8d\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x8e\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x8f\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x90\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x91\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xb0\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xb4\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\xbd\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x2a\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x2c\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x3c\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x3e\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x3f\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x04\x00\x0e\x00\x0f\x00\x05\x00\x44\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x0f\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x69\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyReduceArr = array (1, 138) [
+	(1 , happyReduce_1),
+	(2 , happyReduce_2),
+	(3 , happyReduce_3),
+	(4 , happyReduce_4),
+	(5 , happyReduce_5),
+	(6 , happyReduce_6),
+	(7 , happyReduce_7),
+	(8 , happyReduce_8),
+	(9 , happyReduce_9),
+	(10 , happyReduce_10),
+	(11 , happyReduce_11),
+	(12 , happyReduce_12),
+	(13 , happyReduce_13),
+	(14 , happyReduce_14),
+	(15 , happyReduce_15),
+	(16 , happyReduce_16),
+	(17 , happyReduce_17),
+	(18 , happyReduce_18),
+	(19 , happyReduce_19),
+	(20 , happyReduce_20),
+	(21 , happyReduce_21),
+	(22 , happyReduce_22),
+	(23 , happyReduce_23),
+	(24 , happyReduce_24),
+	(25 , happyReduce_25),
+	(26 , happyReduce_26),
+	(27 , happyReduce_27),
+	(28 , happyReduce_28),
+	(29 , happyReduce_29),
+	(30 , happyReduce_30),
+	(31 , happyReduce_31),
+	(32 , happyReduce_32),
+	(33 , happyReduce_33),
+	(34 , happyReduce_34),
+	(35 , happyReduce_35),
+	(36 , happyReduce_36),
+	(37 , happyReduce_37),
+	(38 , happyReduce_38),
+	(39 , happyReduce_39),
+	(40 , happyReduce_40),
+	(41 , happyReduce_41),
+	(42 , happyReduce_42),
+	(43 , happyReduce_43),
+	(44 , happyReduce_44),
+	(45 , happyReduce_45),
+	(46 , happyReduce_46),
+	(47 , happyReduce_47),
+	(48 , happyReduce_48),
+	(49 , happyReduce_49),
+	(50 , happyReduce_50),
+	(51 , happyReduce_51),
+	(52 , happyReduce_52),
+	(53 , happyReduce_53),
+	(54 , happyReduce_54),
+	(55 , happyReduce_55),
+	(56 , happyReduce_56),
+	(57 , happyReduce_57),
+	(58 , happyReduce_58),
+	(59 , happyReduce_59),
+	(60 , happyReduce_60),
+	(61 , happyReduce_61),
+	(62 , happyReduce_62),
+	(63 , happyReduce_63),
+	(64 , happyReduce_64),
+	(65 , happyReduce_65),
+	(66 , happyReduce_66),
+	(67 , happyReduce_67),
+	(68 , happyReduce_68),
+	(69 , happyReduce_69),
+	(70 , happyReduce_70),
+	(71 , happyReduce_71),
+	(72 , happyReduce_72),
+	(73 , happyReduce_73),
+	(74 , happyReduce_74),
+	(75 , happyReduce_75),
+	(76 , happyReduce_76),
+	(77 , happyReduce_77),
+	(78 , happyReduce_78),
+	(79 , happyReduce_79),
+	(80 , happyReduce_80),
+	(81 , happyReduce_81),
+	(82 , happyReduce_82),
+	(83 , happyReduce_83),
+	(84 , happyReduce_84),
+	(85 , happyReduce_85),
+	(86 , happyReduce_86),
+	(87 , happyReduce_87),
+	(88 , happyReduce_88),
+	(89 , happyReduce_89),
+	(90 , happyReduce_90),
+	(91 , happyReduce_91),
+	(92 , happyReduce_92),
+	(93 , happyReduce_93),
+	(94 , happyReduce_94),
+	(95 , happyReduce_95),
+	(96 , happyReduce_96),
+	(97 , happyReduce_97),
+	(98 , happyReduce_98),
+	(99 , happyReduce_99),
+	(100 , happyReduce_100),
+	(101 , happyReduce_101),
+	(102 , happyReduce_102),
+	(103 , happyReduce_103),
+	(104 , happyReduce_104),
+	(105 , happyReduce_105),
+	(106 , happyReduce_106),
+	(107 , happyReduce_107),
+	(108 , happyReduce_108),
+	(109 , happyReduce_109),
+	(110 , happyReduce_110),
+	(111 , happyReduce_111),
+	(112 , happyReduce_112),
+	(113 , happyReduce_113),
+	(114 , happyReduce_114),
+	(115 , happyReduce_115),
+	(116 , happyReduce_116),
+	(117 , happyReduce_117),
+	(118 , happyReduce_118),
+	(119 , happyReduce_119),
+	(120 , happyReduce_120),
+	(121 , happyReduce_121),
+	(122 , happyReduce_122),
+	(123 , happyReduce_123),
+	(124 , happyReduce_124),
+	(125 , happyReduce_125),
+	(126 , happyReduce_126),
+	(127 , happyReduce_127),
+	(128 , happyReduce_128),
+	(129 , happyReduce_129),
+	(130 , happyReduce_130),
+	(131 , happyReduce_131),
+	(132 , happyReduce_132),
+	(133 , happyReduce_133),
+	(134 , happyReduce_134),
+	(135 , happyReduce_135),
+	(136 , happyReduce_136),
+	(137 , happyReduce_137),
+	(138 , happyReduce_138)
+	]
+
+happy_n_terms = 84 :: Int
+happy_n_nonterms = 29 :: Int
+
+happyReduce_1 = happySpecReduce_2  0# happyReduction_1
+happyReduction_1 happy_x_2
+	happy_x_1
+	 =  case happyOut5 happy_x_1 of { happy_var_1 -> 
+	happyIn4
+		 (happy_var_1
+	)}
+
+happyReduce_2 = happySpecReduce_1  1# happyReduction_2
+happyReduction_2 happy_x_1
+	 =  case happyOut6 happy_x_1 of { happy_var_1 -> 
+	happyIn5
+		 ([happy_var_1]
+	)}
+
+happyReduce_3 = happySpecReduce_2  1# happyReduction_3
+happyReduction_3 happy_x_2
+	happy_x_1
+	 =  case happyOut6 happy_x_1 of { happy_var_1 -> 
+	happyIn5
+		 ([happy_var_1]
+	)}
+
+happyReduce_4 = happySpecReduce_3  1# happyReduction_4
+happyReduction_4 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut5 happy_x_1 of { happy_var_1 -> 
+	case happyOut6 happy_x_3 of { happy_var_3 -> 
+	happyIn5
+		 (happy_var_1++[happy_var_3]
+	)}}
+
+happyReduce_5 = happyReduce 4# 1# happyReduction_5
+happyReduction_5 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut5 happy_x_1 of { happy_var_1 -> 
+	case happyOut6 happy_x_3 of { happy_var_3 -> 
+	happyIn5
+		 (happy_var_1++[happy_var_3]
+	) `HappyStk` happyRest}}
+
+happyReduce_6 = happySpecReduce_1  2# happyReduction_6
+happyReduction_6 happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	happyIn6
+		 (happy_var_1
+	)}
+
+happyReduce_7 = happyReduce 5# 2# happyReduction_7
+happyReduction_7 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut10 happy_x_3 of { happy_var_3 -> 
+	case happyOut11 happy_x_5 of { happy_var_5 -> 
+	happyIn6
+		 (Ast "variable" [happy_var_3,happy_var_5]
+	) `HappyStk` happyRest}}
+
+happyReduce_8 = happyReduce 9# 2# happyReduction_8
+happyReduction_8 (happy_x_9 `HappyStk`
+	happy_x_8 `HappyStk`
+	happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_3 of { happy_var_3 -> 
+	case happyOut8 happy_x_5 of { happy_var_5 -> 
+	case happyOut11 happy_x_8 of { happy_var_8 -> 
+	happyIn6
+		 (Ast "function" ([Avar happy_var_3,happy_var_8]++happy_var_5)
+	) `HappyStk` happyRest}}}
+
+happyReduce_9 = happyReduce 11# 2# happyReduction_9
+happyReduction_9 (happy_x_11 `HappyStk`
+	happy_x_10 `HappyStk`
+	happy_x_9 `HappyStk`
+	happy_x_8 `HappyStk`
+	happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_3 of { happy_var_3 -> 
+	case happyOut8 happy_x_5 of { happy_var_5 -> 
+	case happyOut11 happy_x_10 of { happy_var_10 -> 
+	happyIn6
+		 (Ast "function" ([Avar happy_var_3,happy_var_10]++happy_var_5)
+	) `HappyStk` happyRest}}}
+
+happyReduce_10 = happySpecReduce_1  3# happyReduction_10
+happyReduction_10 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (QName happy_var_1) -> 
+	happyIn7
+		 (happy_var_1
+	)}
+
+happyReduce_11 = happySpecReduce_3  3# happyReduction_11
+happyReduction_11 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (QName happy_var_1) -> 
+	case happyOutTok happy_x_3 of { (QName happy_var_3) -> 
+	happyIn7
+		 (happy_var_1++":"++happy_var_3
+	)}}
+
+happyReduce_12 = happySpecReduce_1  4# happyReduction_12
+happyReduction_12 happy_x_1
+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
+	happyIn8
+		 ([happy_var_1]
+	)}
+
+happyReduce_13 = happySpecReduce_3  4# happyReduction_13
+happyReduction_13 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
+	happyIn8
+		 ([happy_var_1]
+	)}
+
+happyReduce_14 = happySpecReduce_3  4# happyReduction_14
+happyReduction_14 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
+	case happyOut10 happy_x_3 of { happy_var_3 -> 
+	happyIn8
+		 (happy_var_1++[happy_var_3]
+	)}}
+
+happyReduce_15 = happyReduce 5# 4# happyReduction_15
+happyReduction_15 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut8 happy_x_1 of { happy_var_1 -> 
+	case happyOut10 happy_x_3 of { happy_var_3 -> 
+	happyIn8
+		 (happy_var_1++[happy_var_3]
+	) `HappyStk` happyRest}}
+
+happyReduce_16 = happySpecReduce_1  5# happyReduction_16
+happyReduction_16 happy_x_1
+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
+	happyIn9
+		 (happy_var_1
+	)}
+
+happyReduce_17 = happySpecReduce_3  5# happyReduction_17
+happyReduction_17 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
+	happyIn9
+		 (happy_var_1
+	)}
+
+happyReduce_18 = happySpecReduce_3  5# happyReduction_18
+happyReduction_18 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  happyIn9
+		 ("element"
+	)
+
+happyReduce_19 = happySpecReduce_2  5# happyReduction_19
+happyReduction_19 happy_x_2
+	happy_x_1
+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
+	happyIn9
+		 (happy_var_1
+	)}
+
+happyReduce_20 = happySpecReduce_2  5# happyReduction_20
+happyReduction_20 happy_x_2
+	happy_x_1
+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
+	happyIn9
+		 (happy_var_1
+	)}
+
+happyReduce_21 = happySpecReduce_2  5# happyReduction_21
+happyReduction_21 happy_x_2
+	happy_x_1
+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
+	happyIn9
+		 (happy_var_1
+	)}
+
+happyReduce_22 = happySpecReduce_1  6# happyReduction_22
+happyReduction_22 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Variable happy_var_1) -> 
+	happyIn10
+		 (Avar happy_var_1
+	)}
+
+happyReduce_23 = happyReduce 5# 7# happyReduction_23
+happyReduction_23 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut13 happy_x_1 of { happy_var_1 -> 
+	case happyOut16 happy_x_2 of { happy_var_2 -> 
+	case happyOut17 happy_x_3 of { happy_var_3 -> 
+	case happyOut11 happy_x_5 of { happy_var_5 -> 
+	happyIn11
+		 ((snd happy_var_3) (happy_var_1 (happy_var_2 ((fst happy_var_3) happy_var_5)))
+	) `HappyStk` happyRest}}}}
+
+happyReduce_24 = happyReduce 4# 7# happyReduction_24
+happyReduction_24 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut14 happy_x_2 of { happy_var_2 -> 
+	case happyOut11 happy_x_4 of { happy_var_4 -> 
+	happyIn11
+		 (call "some" [happy_var_2 happy_var_4]
+	) `HappyStk` happyRest}}
+
+happyReduce_25 = happyReduce 4# 7# happyReduction_25
+happyReduction_25 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut14 happy_x_2 of { happy_var_2 -> 
+	case happyOut11 happy_x_4 of { happy_var_4 -> 
+	happyIn11
+		 (call "not" [call "some" [happy_var_2 (call "not" [happy_var_4])]]
+	) `HappyStk` happyRest}}
+
+happyReduce_26 = happyReduce 6# 7# happyReduction_26
+happyReduction_26 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut11 happy_x_2 of { happy_var_2 -> 
+	case happyOut11 happy_x_4 of { happy_var_4 -> 
+	case happyOut11 happy_x_6 of { happy_var_6 -> 
+	happyIn11
+		 (Ast "if" [happy_var_2,happy_var_4,happy_var_6]
+	) `HappyStk` happyRest}}}
+
+happyReduce_27 = happySpecReduce_1  7# happyReduction_27
+happyReduction_27 happy_x_1
+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
+	happyIn11
+		 (happy_var_1
+	)}
+
+happyReduce_28 = happySpecReduce_1  7# happyReduction_28
+happyReduction_28 happy_x_1
+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
+	happyIn11
+		 (happy_var_1
+	)}
+
+happyReduce_29 = happySpecReduce_1  7# happyReduction_29
+happyReduction_29 happy_x_1
+	 =  case happyOut20 happy_x_1 of { happy_var_1 -> 
+	happyIn11
+		 (happy_var_1
+	)}
+
+happyReduce_30 = happySpecReduce_3  7# happyReduction_30
+happyReduction_30 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "to" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_31 = happySpecReduce_3  7# happyReduction_31
+happyReduction_31 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "+" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_32 = happySpecReduce_3  7# happyReduction_32
+happyReduction_32 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "-" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_33 = happySpecReduce_3  7# happyReduction_33
+happyReduction_33 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "*" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_34 = happySpecReduce_3  7# happyReduction_34
+happyReduction_34 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "div" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_35 = happySpecReduce_3  7# happyReduction_35
+happyReduction_35 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "idiv" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_36 = happySpecReduce_3  7# happyReduction_36
+happyReduction_36 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "mod" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_37 = happySpecReduce_3  7# happyReduction_37
+happyReduction_37 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "=" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_38 = happySpecReduce_3  7# happyReduction_38
+happyReduction_38 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "!=" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_39 = happySpecReduce_3  7# happyReduction_39
+happyReduction_39 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "<" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_40 = happySpecReduce_3  7# happyReduction_40
+happyReduction_40 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "<=" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_41 = happySpecReduce_3  7# happyReduction_41
+happyReduction_41 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call ">" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_42 = happySpecReduce_3  7# happyReduction_42
+happyReduction_42 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call ">=" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_43 = happySpecReduce_3  7# happyReduction_43
+happyReduction_43 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "<<" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_44 = happySpecReduce_3  7# happyReduction_44
+happyReduction_44 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call ">>" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_45 = happySpecReduce_3  7# happyReduction_45
+happyReduction_45 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "is" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_46 = happySpecReduce_3  7# happyReduction_46
+happyReduction_46 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "eq" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_47 = happySpecReduce_3  7# happyReduction_47
+happyReduction_47 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "ne" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_48 = happySpecReduce_3  7# happyReduction_48
+happyReduction_48 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "lt" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_49 = happySpecReduce_3  7# happyReduction_49
+happyReduction_49 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "le" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_50 = happySpecReduce_3  7# happyReduction_50
+happyReduction_50 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "gt" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_51 = happySpecReduce_3  7# happyReduction_51
+happyReduction_51 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "ge" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_52 = happySpecReduce_3  7# happyReduction_52
+happyReduction_52 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "and" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_53 = happySpecReduce_3  7# happyReduction_53
+happyReduction_53 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "or" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_54 = happySpecReduce_3  7# happyReduction_54
+happyReduction_54 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "not" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_55 = happySpecReduce_3  7# happyReduction_55
+happyReduction_55 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "union" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_56 = happySpecReduce_3  7# happyReduction_56
+happyReduction_56 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "intersect" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_57 = happySpecReduce_3  7# happyReduction_57
+happyReduction_57 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (call "except" [happy_var_1,happy_var_3]
+	)}}
+
+happyReduce_58 = happyReduce 4# 7# happyReduction_58
+happyReduction_58 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut9 happy_x_4 of { happy_var_4 -> 
+	happyIn11
+		 (call "instance-of" [happy_var_1,Astring happy_var_4]
+	) `HappyStk` happyRest}}
+
+happyReduce_59 = happySpecReduce_2  7# happyReduction_59
+happyReduction_59 happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_2 of { happy_var_2 -> 
+	happyIn11
+		 (call "uplus" [happy_var_2]
+	)}
+
+happyReduce_60 = happySpecReduce_2  7# happyReduction_60
+happyReduction_60 happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_2 of { happy_var_2 -> 
+	happyIn11
+		 (call "uminus" [happy_var_2]
+	)}
+
+happyReduce_61 = happySpecReduce_2  7# happyReduction_61
+happyReduction_61 happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_2 of { happy_var_2 -> 
+	happyIn11
+		 (call "not" [happy_var_2]
+	)}
+
+happyReduce_62 = happySpecReduce_1  7# happyReduction_62
+happyReduction_62 happy_x_1
+	 =  case happyOut24 happy_x_1 of { happy_var_1 -> 
+	happyIn11
+		 (happy_var_1
+	)}
+
+happyReduce_63 = happySpecReduce_1  7# happyReduction_63
+happyReduction_63 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TInteger happy_var_1) -> 
+	happyIn11
+		 (Aint happy_var_1
+	)}
+
+happyReduce_64 = happySpecReduce_1  7# happyReduction_64
+happyReduction_64 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TFloat happy_var_1) -> 
+	happyIn11
+		 (Afloat happy_var_1
+	)}
+
+happyReduce_65 = happyReduce 4# 7# happyReduction_65
+happyReduction_65 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut11 happy_x_2 of { happy_var_2 -> 
+	case happyOut11 happy_x_4 of { happy_var_4 -> 
+	happyIn11
+		 (Ast "insert" [happy_var_2,Ast "destination" [happy_var_4]]
+	) `HappyStk` happyRest}}
+
+happyReduce_66 = happySpecReduce_3  7# happyReduction_66
+happyReduction_66 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn11
+		 (Ast "delete" [happy_var_3]
+	)}
+
+happyReduce_67 = happyReduce 4# 7# happyReduction_67
+happyReduction_67 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut11 happy_x_2 of { happy_var_2 -> 
+	case happyOut11 happy_x_4 of { happy_var_4 -> 
+	happyIn11
+		 (Ast "replace" [happy_var_2,happy_var_4]
+	) `HappyStk` happyRest}}
+
+happyReduce_68 = happySpecReduce_1  8# happyReduction_68
+happyReduction_68 happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	happyIn12
+		 ([happy_var_1]
+	)}
+
+happyReduce_69 = happySpecReduce_3  8# happyReduction_69
+happyReduction_69 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn12
+		 (happy_var_1++[happy_var_3]
+	)}}
+
+happyReduce_70 = happySpecReduce_2  9# happyReduction_70
+happyReduction_70 happy_x_2
+	happy_x_1
+	 =  case happyOut14 happy_x_2 of { happy_var_2 -> 
+	happyIn13
+		 (happy_var_2
+	)}
+
+happyReduce_71 = happySpecReduce_2  9# happyReduction_71
+happyReduction_71 happy_x_2
+	happy_x_1
+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
+	happyIn13
+		 (happy_var_2
+	)}
+
+happyReduce_72 = happySpecReduce_3  9# happyReduction_72
+happyReduction_72 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut13 happy_x_1 of { happy_var_1 -> 
+	case happyOut14 happy_x_3 of { happy_var_3 -> 
+	happyIn13
+		 (happy_var_1 . happy_var_3
+	)}}
+
+happyReduce_73 = happySpecReduce_3  9# happyReduction_73
+happyReduction_73 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut13 happy_x_1 of { happy_var_1 -> 
+	case happyOut15 happy_x_3 of { happy_var_3 -> 
+	happyIn13
+		 (happy_var_1 . happy_var_3
+	)}}
+
+happyReduce_74 = happySpecReduce_3  10# happyReduction_74
+happyReduction_74 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn14
+		 (\x -> Ast "for" [happy_var_1,Avar "$",happy_var_3,x]
+	)}}
+
+happyReduce_75 = happyReduce 5# 10# happyReduction_75
+happyReduction_75 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut10 happy_x_1 of { happy_var_1 -> 
+	case happyOut10 happy_x_3 of { happy_var_3 -> 
+	case happyOut11 happy_x_5 of { happy_var_5 -> 
+	happyIn14
+		 (\x -> Ast "for" [happy_var_1,happy_var_3,happy_var_5,x]
+	) `HappyStk` happyRest}}}
+
+happyReduce_76 = happyReduce 5# 10# happyReduction_76
+happyReduction_76 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut14 happy_x_1 of { happy_var_1 -> 
+	case happyOut10 happy_x_3 of { happy_var_3 -> 
+	case happyOut11 happy_x_5 of { happy_var_5 -> 
+	happyIn14
+		 (\x -> happy_var_1(Ast "for" [happy_var_3,Avar "$",happy_var_5,x])
+	) `HappyStk` happyRest}}}
+
+happyReduce_77 = happyReduce 7# 10# happyReduction_77
+happyReduction_77 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut14 happy_x_1 of { happy_var_1 -> 
+	case happyOut10 happy_x_3 of { happy_var_3 -> 
+	case happyOut10 happy_x_5 of { happy_var_5 -> 
+	case happyOut11 happy_x_7 of { happy_var_7 -> 
+	happyIn14
+		 (\x -> happy_var_1(Ast "for" [happy_var_3,happy_var_5,happy_var_7,x])
+	) `HappyStk` happyRest}}}}
+
+happyReduce_78 = happySpecReduce_3  11# happyReduction_78
+happyReduction_78 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn15
+		 (\x -> Ast "let" [happy_var_1,happy_var_3,x]
+	)}}
+
+happyReduce_79 = happyReduce 5# 11# happyReduction_79
+happyReduction_79 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut15 happy_x_1 of { happy_var_1 -> 
+	case happyOut10 happy_x_3 of { happy_var_3 -> 
+	case happyOut11 happy_x_5 of { happy_var_5 -> 
+	happyIn15
+		 (\x -> happy_var_1(Ast "let" [happy_var_3,happy_var_5,x])
+	) `HappyStk` happyRest}}}
+
+happyReduce_80 = happySpecReduce_2  12# happyReduction_80
+happyReduction_80 happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (\x -> Ast "predicate" [happy_var_2,x]
+	)}
+
+happyReduce_81 = happySpecReduce_0  12# happyReduction_81
+happyReduction_81  =  happyIn16
+		 (id
+	)
+
+happyReduce_82 = happySpecReduce_3  13# happyReduction_82
+happyReduction_82 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut18 happy_x_3 of { happy_var_3 -> 
+	happyIn17
+		 ((\x -> Ast "sortTuple" (x:(fst happy_var_3)),
+                                                           \x -> Ast "sort" (x:(snd happy_var_3)))
+	)}
+
+happyReduce_83 = happySpecReduce_0  13# happyReduction_83
+happyReduction_83  =  happyIn17
+		 ((id,id)
+	)
+
+happyReduce_84 = happySpecReduce_2  14# happyReduction_84
+happyReduction_84 happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut19 happy_x_2 of { happy_var_2 -> 
+	happyIn18
+		 (([happy_var_1],[happy_var_2])
+	)}}
+
+happyReduce_85 = happyReduce 4# 14# happyReduction_85
+happyReduction_85 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut18 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	case happyOut19 happy_x_4 of { happy_var_4 -> 
+	happyIn18
+		 (((fst happy_var_1)++[happy_var_3],(snd happy_var_1)++[happy_var_4])
+	) `HappyStk` happyRest}}}
+
+happyReduce_86 = happySpecReduce_1  15# happyReduction_86
+happyReduction_86 happy_x_1
+	 =  happyIn19
+		 (Avar "ascending"
+	)
+
+happyReduce_87 = happySpecReduce_1  15# happyReduction_87
+happyReduction_87 happy_x_1
+	 =  happyIn19
+		 (Avar "descending"
+	)
+
+happyReduce_88 = happySpecReduce_0  15# happyReduction_88
+happyReduction_88  =  happyIn19
+		 (Avar "ascending"
+	)
+
+happyReduce_89 = happyReduce 4# 16# happyReduction_89
+happyReduction_89 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_3 of { happy_var_3 -> 
+	happyIn20
+		 (call "element" [Avar happy_var_3]
+	) `HappyStk` happyRest}
+
+happyReduce_90 = happyReduce 4# 16# happyReduction_90
+happyReduction_90 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_3 of { happy_var_3 -> 
+	happyIn20
+		 (call "attribute" [Avar happy_var_3]
+	) `HappyStk` happyRest}
+
+happyReduce_91 = happyReduce 6# 17# happyReduction_91
+happyReduction_91 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut22 happy_x_1 of { happy_var_1 -> 
+	case happyOut23 happy_x_3 of { happy_var_3 -> 
+	case happyOut7 happy_x_5 of { happy_var_5 -> 
+	happyIn21
+		 (if head happy_var_1 == Astring happy_var_5
+                                                             then Ast "element_construction" (happy_var_1++[Ast "append" happy_var_3])
+                                                          else parseError [TError ("Unmatched tags in element construction: "
+                                                                                   ++(show (head happy_var_1))++" '"++happy_var_5++"'")]
+	) `HappyStk` happyRest}}}
+
+happyReduce_92 = happyReduce 5# 17# happyReduction_92
+happyReduction_92 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut22 happy_x_1 of { happy_var_1 -> 
+	case happyOut7 happy_x_4 of { happy_var_4 -> 
+	happyIn21
+		 (if head happy_var_1 == Astring happy_var_4
+                                                             then Ast "element_construction" (happy_var_1++[Ast "append" []])
+                                                          else parseError [TError ("Unmatched tags in element construction: "
+                                                                                   ++(show (head happy_var_1))++" '"++happy_var_4++"'")]
+	) `HappyStk` happyRest}}
+
+happyReduce_93 = happySpecReduce_2  17# happyReduction_93
+happyReduction_93 happy_x_2
+	happy_x_1
+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> 
+	happyIn21
+		 (Ast "element_construction" (happy_var_1++[Ast "append" []])
+	)}
+
+happyReduce_94 = happyReduce 7# 17# happyReduction_94
+happyReduction_94 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut11 happy_x_3 of { happy_var_3 -> 
+	case happyOut12 happy_x_6 of { happy_var_6 -> 
+	happyIn21
+		 (Ast "element_construction" [happy_var_3,Ast "attributes" [],concatenateAll happy_var_6]
+	) `HappyStk` happyRest}}
+
+happyReduce_95 = happyReduce 7# 17# happyReduction_95
+happyReduction_95 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut11 happy_x_3 of { happy_var_3 -> 
+	case happyOut12 happy_x_6 of { happy_var_6 -> 
+	happyIn21
+		 (Ast "attribute_construction" [happy_var_3,concatenateAll happy_var_6]
+	) `HappyStk` happyRest}}
+
+happyReduce_96 = happyReduce 5# 17# happyReduction_96
+happyReduction_96 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut12 happy_x_4 of { happy_var_4 -> 
+	happyIn21
+		 (Ast "element_construction" [Astring happy_var_2,Ast "attributes" [],concatenateAll happy_var_4]
+	) `HappyStk` happyRest}}
+
+happyReduce_97 = happyReduce 5# 17# happyReduction_97
+happyReduction_97 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut12 happy_x_4 of { happy_var_4 -> 
+	happyIn21
+		 (Ast "attribute_construction" [Astring happy_var_2,concatenateAll happy_var_4]
+	) `HappyStk` happyRest}}
+
+happyReduce_98 = happySpecReduce_2  18# happyReduction_98
+happyReduction_98 happy_x_2
+	happy_x_1
+	 =  case happyOut7 happy_x_2 of { happy_var_2 -> 
+	happyIn22
+		 ([Astring happy_var_2,Ast "attributes" []]
+	)}
+
+happyReduce_99 = happySpecReduce_3  18# happyReduction_99
+happyReduction_99 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut26 happy_x_3 of { happy_var_3 -> 
+	happyIn22
+		 ([Astring happy_var_2,Ast "attributes" happy_var_3]
+	)}}
+
+happyReduce_100 = happySpecReduce_3  19# happyReduction_100
+happyReduction_100 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut12 happy_x_2 of { happy_var_2 -> 
+	happyIn23
+		 ([concatenateAll happy_var_2]
+	)}
+
+happyReduce_101 = happySpecReduce_1  19# happyReduction_101
+happyReduction_101 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TString happy_var_1) -> 
+	happyIn23
+		 ([Astring happy_var_1]
+	)}
+
+happyReduce_102 = happySpecReduce_1  19# happyReduction_102
+happyReduction_102 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (XMLtext happy_var_1) -> 
+	happyIn23
+		 ([Astring happy_var_1]
+	)}
+
+happyReduce_103 = happySpecReduce_1  19# happyReduction_103
+happyReduction_103 happy_x_1
+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
+	happyIn23
+		 ([happy_var_1]
+	)}
+
+happyReduce_104 = happyReduce 4# 19# happyReduction_104
+happyReduction_104 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut23 happy_x_1 of { happy_var_1 -> 
+	case happyOut12 happy_x_3 of { happy_var_3 -> 
+	happyIn23
+		 (happy_var_1++[concatenateAll happy_var_3]
+	) `HappyStk` happyRest}}
+
+happyReduce_105 = happySpecReduce_2  19# happyReduction_105
+happyReduction_105 happy_x_2
+	happy_x_1
+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TString happy_var_2) -> 
+	happyIn23
+		 (happy_var_1++[Astring happy_var_2]
+	)}}
+
+happyReduce_106 = happySpecReduce_2  19# happyReduction_106
+happyReduction_106 happy_x_2
+	happy_x_1
+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (XMLtext happy_var_2) -> 
+	happyIn23
+		 (happy_var_1++[Astring happy_var_2]
+	)}}
+
+happyReduce_107 = happySpecReduce_2  19# happyReduction_107
+happyReduction_107 happy_x_2
+	happy_x_1
+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
+	case happyOut21 happy_x_2 of { happy_var_2 -> 
+	happyIn23
+		 (happy_var_1++[happy_var_2]
+	)}}
+
+happyReduce_108 = happySpecReduce_1  20# happyReduction_108
+happyReduction_108 happy_x_1
+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> 
+	happyIn24
+		 (if length happy_var_1 == 0 then Astring ""
+                                                          else if length happy_var_1 == 1 then head happy_var_1 else Ast "append" happy_var_1
+	)}
+
+happyReduce_109 = happySpecReduce_1  21# happyReduction_109
+happyReduction_109 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TString happy_var_1) -> 
+	happyIn25
+		 (if happy_var_1=="" then [] else [Astring happy_var_1]
+	)}
+
+happyReduce_110 = happySpecReduce_3  21# happyReduction_110
+happyReduction_110 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut12 happy_x_2 of { happy_var_2 -> 
+	happyIn25
+		 ([concatenateAll happy_var_2]
+	)}
+
+happyReduce_111 = happySpecReduce_2  21# happyReduction_111
+happyReduction_111 happy_x_2
+	happy_x_1
+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TString happy_var_2) -> 
+	happyIn25
+		 (if happy_var_2=="" then happy_var_1 else happy_var_1++[Astring happy_var_2]
+	)}}
+
+happyReduce_112 = happyReduce 4# 21# happyReduction_112
+happyReduction_112 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut25 happy_x_1 of { happy_var_1 -> 
+	case happyOut12 happy_x_3 of { happy_var_3 -> 
+	happyIn25
+		 (happy_var_1++[concatenateAll happy_var_3]
+	) `HappyStk` happyRest}}
+
+happyReduce_113 = happySpecReduce_3  22# happyReduction_113
+happyReduction_113 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
+	case happyOut24 happy_x_3 of { happy_var_3 -> 
+	happyIn26
+		 ([Ast "pair" [Astring happy_var_1,happy_var_3]]
+	)}}
+
+happyReduce_114 = happyReduce 4# 22# happyReduction_114
+happyReduction_114 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut26 happy_x_1 of { happy_var_1 -> 
+	case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut24 happy_x_4 of { happy_var_4 -> 
+	happyIn26
+		 (happy_var_1++[Ast "pair" [Astring happy_var_2,happy_var_4]]
+	) `HappyStk` happyRest}}}
+
+happyReduce_115 = happySpecReduce_2  23# happyReduction_115
+happyReduction_115 happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_1 of { happy_var_1 -> 
+	case happyOut30 happy_x_2 of { happy_var_2 -> 
+	happyIn27
+		 (happy_var_1 "child" (Avar ".") happy_var_2
+	)}}
+
+happyReduce_116 = happySpecReduce_3  23# happyReduction_116
+happyReduction_116 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_2 of { happy_var_2 -> 
+	case happyOut30 happy_x_3 of { happy_var_3 -> 
+	happyIn27
+		 (happy_var_2 "attribute" (Avar ".") happy_var_3
+	)}}
+
+happyReduce_117 = happySpecReduce_3  23# happyReduction_117
+happyReduction_117 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_1 of { happy_var_1 -> 
+	case happyOut30 happy_x_2 of { happy_var_2 -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	happyIn27
+		 (happy_var_3 (happy_var_1 "child" (Avar ".") happy_var_2)
+	)}}}
+
+happyReduce_118 = happyReduce 4# 23# happyReduction_118
+happyReduction_118 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut31 happy_x_2 of { happy_var_2 -> 
+	case happyOut30 happy_x_3 of { happy_var_3 -> 
+	case happyOut28 happy_x_4 of { happy_var_4 -> 
+	happyIn27
+		 (happy_var_4 (happy_var_2 "attribute" (Avar ".") happy_var_3)
+	) `HappyStk` happyRest}}}
+
+happyReduce_119 = happySpecReduce_1  24# happyReduction_119
+happyReduction_119 happy_x_1
+	 =  case happyOut29 happy_x_1 of { happy_var_1 -> 
+	happyIn28
+		 (happy_var_1
+	)}
+
+happyReduce_120 = happySpecReduce_2  24# happyReduction_120
+happyReduction_120 happy_x_2
+	happy_x_1
+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> 
+	case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn28
+		 (happy_var_2 . happy_var_1
+	)}}
+
+happyReduce_121 = happySpecReduce_3  25# happyReduction_121
+happyReduction_121 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_2 of { happy_var_2 -> 
+	case happyOut30 happy_x_3 of { happy_var_3 -> 
+	happyIn29
+		 (\e -> happy_var_2 "child" e happy_var_3
+	)}}
+
+happyReduce_122 = happyReduce 4# 25# happyReduction_122
+happyReduction_122 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut31 happy_x_3 of { happy_var_3 -> 
+	case happyOut30 happy_x_4 of { happy_var_4 -> 
+	happyIn29
+		 (\e -> happy_var_3 "attribute" e happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_123 = happyReduce 4# 25# happyReduction_123
+happyReduction_123 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut31 happy_x_3 of { happy_var_3 -> 
+	case happyOut30 happy_x_4 of { happy_var_4 -> 
+	happyIn29
+		 (\e -> happy_var_3 "descendant" e happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_124 = happyReduce 5# 25# happyReduction_124
+happyReduction_124 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut31 happy_x_4 of { happy_var_4 -> 
+	case happyOut30 happy_x_5 of { happy_var_5 -> 
+	happyIn29
+		 (\e -> happy_var_4 "attribute-descendant" e happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_125 = happySpecReduce_2  25# happyReduction_125
+happyReduction_125 happy_x_2
+	happy_x_1
+	 =  happyIn29
+		 (\e -> Ast "step" [Avar "parent",Astring "*",e]
+	)
+
+happyReduce_126 = happyReduce 4# 26# happyReduction_126
+happyReduction_126 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut30 happy_x_1 of { happy_var_1 -> 
+	case happyOut11 happy_x_3 of { happy_var_3 -> 
+	happyIn30
+		 (happy_var_1 ++ [happy_var_3]
+	) `HappyStk` happyRest}}
+
+happyReduce_127 = happySpecReduce_0  26# happyReduction_127
+happyReduction_127  =  happyIn30
+		 ([]
+	)
+
+happyReduce_128 = happySpecReduce_1  27# happyReduction_128
+happyReduction_128 happy_x_1
+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
+	happyIn31
+		 (\t e ps -> if null ps
+								     then happy_var_1 t e
+                                                                     else Ast "filter" (happy_var_1 t e:ps)
+	)}
+
+happyReduce_129 = happySpecReduce_1  27# happyReduction_129
+happyReduction_129 happy_x_1
+	 =  happyIn31
+		 (\t e ps -> Ast "step" ((Avar t):(Astring "*"):e:ps)
+	)
+
+happyReduce_130 = happySpecReduce_1  27# happyReduction_130
+happyReduction_130 happy_x_1
+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
+	happyIn31
+		 (\t e ps -> if elem happy_var_1 path_steps
+                                                                     then parseError [TError ("Axis "++happy_var_1++" is missing a node step")]
+                                                                     else Ast "step" ((Avar t):(Astring happy_var_1):e:ps)
+	)}
+
+happyReduce_131 = happyReduce 4# 27# happyReduction_131
+happyReduction_131 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (QName happy_var_1) -> 
+	case happyOut7 happy_x_4 of { happy_var_4 -> 
+	happyIn31
+		 (\t e ps -> if elem happy_var_1 path_steps
+                                                                     then if t == "child"
+                                                                          then Ast "step" ((Avar happy_var_1):(Astring happy_var_4):e:ps)
+                                                                          else parseError [TError ("The navigation step must be /"++happy_var_1++"::"++happy_var_4)]
+                                                                     else parseError [TError ("Not a valid axis name: "++happy_var_1)]
+	) `HappyStk` happyRest}}
+
+happyReduce_132 = happyReduce 4# 27# happyReduction_132
+happyReduction_132 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (QName happy_var_1) -> 
+	happyIn31
+		 (\t e ps -> if elem happy_var_1 path_steps
+                                                                     then if t == "child"
+                                                                          then Ast "step" ((Avar happy_var_1):(Astring "*"):e:ps)
+                                                                          else parseError [TError ("The navigation step must be /"++happy_var_1++"::*")]
+                                                                     else parseError [TError ("Not a valid axis name: "++happy_var_1)]
+	) `HappyStk` happyRest}
+
+happyReduce_133 = happySpecReduce_1  28# happyReduction_133
+happyReduction_133 happy_x_1
+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
+	happyIn32
+		 (\_ _ -> happy_var_1
+	)}
+
+happyReduce_134 = happySpecReduce_1  28# happyReduction_134
+happyReduction_134 happy_x_1
+	 =  happyIn32
+		 (\_ e -> e
+	)
+
+happyReduce_135 = happySpecReduce_3  28# happyReduction_135
+happyReduction_135 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut12 happy_x_2 of { happy_var_2 -> 
+	happyIn32
+		 (\t e -> if e == Avar "."
+                                                                  then concatenateAll happy_var_2
+	                                                          else Ast "context" [e,Astring t,concatenateAll happy_var_2]
+	)}
+
+happyReduce_136 = happySpecReduce_2  28# happyReduction_136
+happyReduction_136 happy_x_2
+	happy_x_1
+	 =  happyIn32
+		 (\_ _ -> call "empty" []
+	)
+
+happyReduce_137 = happyReduce 4# 28# happyReduction_137
+happyReduction_137 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_1 of { happy_var_1 -> 
+	case happyOut12 happy_x_3 of { happy_var_3 -> 
+	happyIn32
+		 (\t e -> if e == Avar "."
+                                                                     then call happy_var_1 happy_var_3
+                                                                  else Ast "context" [e,Astring t,call happy_var_1 happy_var_3]
+	) `HappyStk` happyRest}}
+
+happyReduce_138 = happySpecReduce_3  28# happyReduction_138
+happyReduction_138 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
+	happyIn32
+		 (\_ e -> if elem happy_var_1 ["last","position","true","false","empty","select"]
+                                                                  then call happy_var_1 []
+                                                                  else call happy_var_1 [e]
+	)}
+
+happyNewToken action sts stk [] =
+	happyDoAction 83# notHappyAtAll action sts stk []
+
+happyNewToken action sts stk (tk:tks) =
+	let cont i = happyDoAction i tk action sts stk tks in
+	case tk of {
+	RETURN -> cont 1#;
+	SOME -> cont 2#;
+	EVERY -> cont 3#;
+	IF -> cont 4#;
+	THEN -> cont 5#;
+	ELSE -> cont 6#;
+	LB -> cont 7#;
+	RB -> cont 8#;
+	LP -> cont 9#;
+	RP -> cont 10#;
+	LSB -> cont 11#;
+	RSB -> cont 12#;
+	TO -> cont 13#;
+	PLUS -> cont 14#;
+	MINUS -> cont 15#;
+	TIMES -> cont 16#;
+	DIV -> cont 17#;
+	IDIV -> cont 18#;
+	MOD -> cont 19#;
+	TEQ -> cont 20#;
+	TNE -> cont 21#;
+	TLT -> cont 22#;
+	TLE -> cont 23#;
+	TGT -> cont 24#;
+	TGE -> cont 25#;
+	PRE -> cont 26#;
+	POST -> cont 27#;
+	IS -> cont 28#;
+	SEQ -> cont 29#;
+	SNE -> cont 30#;
+	SLT -> cont 31#;
+	SLE -> cont 32#;
+	SGT -> cont 33#;
+	SGE -> cont 34#;
+	AND -> cont 35#;
+	OR -> cont 36#;
+	NOT -> cont 37#;
+	UNION -> cont 38#;
+	INTERSECT -> cont 39#;
+	EXCEPT -> cont 40#;
+	FOR -> cont 41#;
+	LET -> cont 42#;
+	IN -> cont 43#;
+	AS -> cont 44#;
+	COMMA -> cont 45#;
+	ASSIGN -> cont 46#;
+	WHERE -> cont 47#;
+	ORDER -> cont 48#;
+	BY -> cont 49#;
+	ASCENDING -> cont 50#;
+	DESCENDING -> cont 51#;
+	ELEMENT -> cont 52#;
+	ATTRIBUTE -> cont 53#;
+	STAG -> cont 54#;
+	ETAG -> cont 55#;
+	SATISFIES -> cont 56#;
+	ATSIGN -> cont 57#;
+	SLASH -> cont 58#;
+	QName happy_dollar_dollar -> cont 59#;
+	DECLARE -> cont 60#;
+	FUNCTION -> cont 61#;
+	VARIABLE -> cont 62#;
+	AT -> cont 63#;
+	DOTS -> cont 64#;
+	DOT -> cont 65#;
+	SEMI -> cont 66#;
+	COLON -> cont 67#;
+	INSERT -> cont 68#;
+	DELETE -> cont 69#;
+	REPLACE -> cont 70#;
+	INTO -> cont 71#;
+	FROM -> cont 72#;
+	WITH -> cont 73#;
+	INSTANCE -> cont 74#;
+	OF -> cont 75#;
+	QMARK -> cont 76#;
+	Variable happy_dollar_dollar -> cont 77#;
+	XMLtext happy_dollar_dollar -> cont 78#;
+	TInteger happy_dollar_dollar -> cont 79#;
+	TFloat happy_dollar_dollar -> cont 80#;
+	TString happy_dollar_dollar -> cont 81#;
+	TokenEOF -> cont 82#;
+	_ -> happyError' (tk:tks)
+	}
+
+happyError_ tk tks = happyError' (tk:tks)
+
+newtype HappyIdentity a = HappyIdentity a
+happyIdentity = HappyIdentity
+happyRunIdentity (HappyIdentity a) = a
+
+instance Monad HappyIdentity where
+    return = HappyIdentity
+    (HappyIdentity p) >>= q = q p
+
+happyThen :: () => HappyIdentity a -> (a -> HappyIdentity b) -> HappyIdentity b
+happyThen = (>>=)
+happyReturn :: () => a -> HappyIdentity a
+happyReturn = (return)
+happyThen1 m k tks = (>>=) m (\a -> k a tks)
+happyReturn1 :: () => a -> b -> HappyIdentity a
+happyReturn1 = \a tks -> (return) a
+happyError' :: () => [(Token)] -> HappyIdentity a
+happyError' = HappyIdentity . parseError
+
+parse tks = happyRunIdentity happySomeParser where
+  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut4 x))
+
+happySeq = happyDontSeq
+
+
+-- Abstract Syntax Tree for XQueries
+data Ast = Ast String [Ast]
+         | Avar String
+         | Aint Int
+         | Afloat Float
+         | Astring String
+         deriving Eq
+
+
+instance Show Ast
+  where show (Ast s []) = s ++ "()"
+        show (Ast s (x:xs)) = s ++ "(" ++ show x
+                              ++ foldr (\a r -> ","++show a++r) "" xs
+                              ++ ")"
+        show (Avar s) = s
+        show (Aint n) = show n
+        show (Afloat n) = show n
+        show (Astring s) = "\'" ++ s ++ "\'"
+
+
+screenSize = 80::Int
+
+prettyAst :: Ast -> Int -> (String,Int)
+prettyAst (Avar s) p = (s,(length s)+p)
+prettyAst (Aint n) p = let s = show n in (s,(length s)+p)
+prettyAst (Afloat n) p = let s = show n in (s,(length s)+p)
+prettyAst (Astring s) p = ("\'" ++ s ++ "\'",(length s)+p+2)
+prettyAst (Ast s args) p
+    = let (ps,np) = prettyArgs args
+      in (s++"("++ps++")",np+1)
+    where prettyArgs [] = ("",p+1)
+          prettyArgs xs = let ss = show (head xs) ++ foldr (\a r -> ","++show a++r) "" (tail xs)
+                              np = (length s)+p+1
+                          in if (length ss)+p < screenSize
+                             then (ss,(length ss)+p)
+                             else let ds = map (\x -> let (s,ep) = prettyAst x np
+                                                      in (s ++ ",\n" ++ space np,ep)) (init xs)
+                                      (ls,lp) = prettyAst (last xs) np
+                                  in (concatMap fst ds ++ ls,lp)
+          space n = replicate n ' '
+
+
+ppAst :: Ast -> String
+ppAst e = let (s,_) = prettyAst e 0 in s
+
+
+call :: String -> [Ast] -> Ast
+call name args = Ast "call" ((Avar name):args)
+
+
+concatenateAll :: [Ast] -> Ast
+concatenateAll [x] = x
+concatenateAll (x:xs) = foldl (\a r -> call "concatenate" [a,r]) x xs
+concatenateAll _ = call "empty" []
+
+
+path_steps = ["child", "descendant", "attribute", "self", "descendant-or-self", "following-sibling", "following",
+              "attribute-descendant", "parent", "ancestor", "preceding-sibling", "preceding", "ancestor-or-self" ]
+
+
+data Token
+  = RETURN | SOME | EVERY | IF | THEN | ELSE | LB | RB | LP | RP | LSB | RSB
+  | TO | PLUS | MINUS | TIMES | DIV | IDIV | MOD | AS | QMARK
+  | TEQ | TNE | TLT | TLE | TGT | TGE | SEQ | SNE | SLT | SLE | SGT | SGE
+  | AND | OR | NOT | UNION | INTERSECT | EXCEPT | FOR | LET | IN | COMMA
+  | ASSIGN | WHERE | ORDER | BY | ASCENDING | DESCENDING | ELEMENT
+  | ATTRIBUTE | STAG | ETAG | SATISFIES | ATSIGN | SLASH | DECLARE | SEMI | COLON
+  | FUNCTION | VARIABLE | AT | DOT | DOTS | TokenEOF | PRE | POST | IS
+  | INSERT | INTO | DELETE | FROM | REPLACE | WITH | INSTANCE | OF
+  | QName String | Variable String | XMLtext String | TInteger Int
+  | TFloat Float | TString String | TError String
+    deriving Eq
+
+
+instance Show Token
+    where show (QName s) = "QName("++s++")"
+	  show (Variable s) = "Variable("++s++")"
+	  show (XMLtext s) = "XMLtext("++s++")"
+	  show (TInteger n) = "Integer("++(show n)++")"
+	  show (TFloat n) = "Double("++(show n)++")"
+	  show (TString s) = "String("++s++")"
+	  show (TError s) = "'"++s++"'"
+          show t = case filter (\(n,_) -> n==t) tokenList of
+                     (_,b):_ -> b
+                     _ -> "Illegal token"
+
+
+printToken (QName s) = s
+printToken (Variable s) = "$"++s
+printToken (XMLtext s) = "'"++s++"'"
+printToken (TInteger n) = show n
+printToken (TFloat n) = show n
+printToken (TString s) = "\""++s++"\""
+printToken (TError s) = "error("++s++")"
+printToken t = case filter (\(n,_) -> n==t) tokenList of
+           (_,b):_ -> b
+           _ -> "Illegal token"
+
+
+tokenList :: [(Token,String)]
+tokenList = [(TokenEOF,"EOF"),(RETURN,"return"),(SOME,"some"),(EVERY,"every"),(IF,"if"),(THEN,"then"),(ELSE,"else"),
+             (LB,"["),(RB,"]"),(LP,"("),(RP,")"),(LSB,"{"),(RSB,"}"),(QMARK,"?"),
+             (TO,"to"),(PLUS,"+"),(MINUS,"-"),(TIMES,"*"),(DIV,"div"),(IDIV,"idiv"),(MOD,"mod"),
+             (TEQ,"="),(TNE,"!="),(TLT,"<"),(TLE,"<="),(TGT,">"),(TGE,">="),(PRE,"<<"),(POST,">>"),
+             (IS,"is"),(SEQ,"eq"),(SNE,"ne"),(SLT,"lt"),(SLE,"le"),(SGT,"gt"),(SGE,"ge"),(AND,"and"),
+             (OR,"or"),(NOT,"not"),(UNION,"union"),(INTERSECT,"intersect"),(EXCEPT,"except"),
+             (FOR,"for"),(LET,"let"),(IN,"in"),(AS,"as"),(COMMA,"','"),(ASSIGN,":="),(WHERE,"where"),(ORDER,"order"),
+             (BY,"by"),(ASCENDING,"ascending"),(DESCENDING,"descending"),(ELEMENT,"element"),
+             (ATTRIBUTE,"attribute"),(STAG,"</"),(ETAG,"/>"),(SATISFIES,"satisfies"),(ATSIGN,"@"),
+             (SLASH,"/"),(DECLARE,"declare"),(FUNCTION,"function"),(VARIABLE,"variable"),
+  	     (INSERT,"insert"),(INTO,"into"),(DELETE,"delete"),(FROM,"from"),(REPLACE,"replace"),(WITH,"with"),
+             (AT,"at"),(DOTS,".."),(DOT,"."),(SEMI,";"),(COLON,":"),(INSTANCE,"instance"),(OF,"of")]
+
+
+parseError tk = error (case tk of
+                         ((TError s):_) -> "Parse error: "++s
+                         (TokenEOF:_) -> "Parse error: Unexpected end of file"
+		         _ -> "Parse error: "++(foldr (\a r -> (printToken a)++" "++r) "" (init (take 11 tk))))
+
+
+scan :: String -> [Token]
+scan cs = lexer cs ""
+
+
+xmlText :: String -> [Token]
+xmlText "" = []
+xmlText text = [XMLtext text]
+
+
+-- scans XML syntax and returns an XMLtext token with the text
+xml :: String -> String -> String -> [Token]
+xml ('{':cs) text n = (xmlText text)++(LSB : lexer cs ('{':n))
+xml ('<':'/':cs) text n = (xmlText text)++(STAG : lexer cs ('<':'/':n))
+xml ('<':'!':'-':cs) text n = xmlComment cs (text++"<!-") n
+xml ('<':cs) text n = (xmlText text)++(TLT : lexer cs ('<':n))
+xml ('(':':':cs) text n = xqComment cs text n
+xml (c:cs) text n = xml cs (text++[c]) n
+xml [] text _ = xmlText text
+
+
+xqComment :: String -> String -> String -> [Token]
+xqComment (':':')':cs) text n = xml cs text n
+xqComment (_:cs) text n = xqComment cs text n
+xqComment [] text _ = xmlText text
+
+
+xmlComment :: String -> String -> String -> [Token]
+xmlComment ('-':'>':cs) text n = xml cs (text++"->") n
+xmlComment (c:cs) text n = xmlComment cs (text++[c]) n
+xmlComment [] text _ = xmlText text
+
+
+isQN :: Char -> Bool
+isQN c = elem c "_-" || isDigit c || isAlpha c
+
+
+isVar :: Char -> Bool
+isVar c = elem c "_" || isDigit c || isAlpha c
+
+
+inXML :: String -> Bool
+inXML ('>':'<':_) = True
+inXML _ = False
+
+
+-- the XQuery scanner
+lexer :: String -> String -> [Token]
+lexer [] "" = [ TokenEOF ]
+lexer [] _ = [ TError "Unexpected end of input" ]
+lexer (' ':'>':' ':cs) n = TGT : lexer cs n
+lexer (c:cs) n
+      | isSpace c = lexer cs n
+      | isAlpha c = lexVar (c:cs) n
+      | isDigit c = lexNum (c:cs) n
+lexer ('$':c:cs) n | isAlpha c
+      = let (var,rest) = span isVar (c:cs)
+        in (Variable var) : lexer rest n
+lexer (':':'=':cs) n = ASSIGN : lexer cs n
+lexer ('<':'/':cs) n = STAG : lexer cs ('<':'/':n)
+lexer ('<':'=':cs) n = TLE : lexer cs n
+lexer ('>':'=':cs) n = TGE : lexer cs n
+lexer ('<':'<':cs) n = PRE : lexer cs n
+lexer ('>':'>':cs) n = POST : lexer cs n
+lexer ('/':'>':cs) m = case m of
+                         '<':n -> ETAG : (if inXML n then xml cs "" n else lexer cs n)
+                         _ -> [ TError "Unexpected token: '/>'" ]
+lexer ('(':':':cs) n = lexComment cs n
+lexer ('<':'!':'-':cs) n = lexXmlComment cs "<!-" n
+lexer ('.':'.':cs) n = DOTS : lexer cs n
+lexer ('.':cs) n = DOT : lexer cs n
+lexer ('!':'=':cs) n = TNE : lexer cs n
+lexer ('\'':cs) n = lexString cs "" ('\'':n)
+lexer ('\"':cs) n = lexString cs "" ('\"': n)
+lexer ('[':cs) n = LB : lexer cs n
+lexer (']':cs) n = RB : lexer cs n
+lexer ('(':cs) n = LP : lexer cs n
+lexer (')':cs) n = RP : lexer cs n
+lexer ('}':cs) m = case m of
+                     '{':'\"':n -> RSB : lexString cs "" ('\"':n)
+                     '{':'\'':n -> RSB : lexString cs "" ('\'':n)
+                     '{':n -> RSB : (if inXML n then xml cs "" n else lexer cs n)
+                     _ -> [ TError "Unexpected token: '}'" ]
+lexer ('+':cs) n = PLUS : lexer cs n
+lexer ('-':cs) n = MINUS : lexer cs n
+lexer ('*':cs) n = TIMES : lexer cs n
+lexer ('=':cs) n = TEQ : lexer cs n
+lexer ('<':c:cs) n = TLT : (lexer (c:cs) (if isAlpha c then ('<':n) else n))
+lexer ('>':cs) m = case m of
+                     '<':'/':'>':'<':n -> TGT : (if inXML n then xml cs "" n else lexer cs n)
+                     '<':n -> TGT : xml cs "" ('>':m) 
+                     _ -> TGT : lexer cs m
+lexer (',':cs) n = COMMA : lexer cs n
+lexer ('@':cs) n = ATSIGN : lexer cs n
+lexer ('?':cs) n = QMARK : lexer cs n
+lexer ('/':cs) n = SLASH : lexer cs n
+lexer ('{':cs) n = LSB : lexer cs ('{':n)
+lexer ('|':cs) n = UNION : lexer cs n
+lexer (';':cs) n = SEMI : lexer cs n
+lexer (':':cs) n = COLON : lexer cs n
+lexer (c:cs) n = TError ("Illegal character: '"++[c,'\'']) : lexer cs n
+
+
+lexNum :: String -> String -> [Token]
+lexNum cs n = if null rest || head rest /= '.'
+                 then TInteger (read k) : lexer rest n
+              else let (m,rest2) = span isDigit (tail rest)
+                       val::Float = read (k++('.':m))
+                   in case rest2 of
+                        ('e':rest3) -> let (exp,rest4) = span isDigit rest3
+                                       in (TFloat (val*10^(read exp))) : lexer rest4 n
+                        _ -> (TFloat val) : lexer rest2 n
+      where (k,rest) = span isDigit cs
+
+
+lexString :: String -> String -> String -> [Token]
+lexString ('\"':cs) s m = case m of
+                            '\"':n -> (TString s) : (lexer cs n)
+                            _ -> lexString cs (s++"\"") m
+lexString ('\'':cs) s m = case m of
+                            '\'':n -> (TString s) : (lexer cs n)
+                            _ -> lexString cs (s++"\'") m
+-- a string in an attribute value must evaluate between {}
+lexString ('{':cs) s (c:'<':n) = (TString s) : LSB : (lexer cs ('{':c:'<':n))
+lexString ('\\':'n':cs) s n = lexString cs (s++['\n']) n
+lexString ('\\':'r':cs) s n = lexString cs (s++['\r']) n
+lexString (c:cs) s n = lexString cs (s++[c]) n
+lexString [] s n = [ TError "End of input while in string" ]
+
+
+lexComment :: String -> String -> [Token]
+lexComment (':':')':cs) n = lexer cs n
+lexComment (_:cs) n = lexComment cs n
+lexComment [] n = [ TError "End of input while in comment" ]
+
+
+lexXmlComment :: String -> String -> String -> [Token]
+lexXmlComment ('-':'>':cs) text n = (xmlText (text++"->"))++(lexer cs n)
+lexXmlComment (c:cs) text n = lexXmlComment cs (text++[c]) n
+lexXmlComment [] text _ = xmlText text
+
+
+lexVar :: String -> String -> [Token]
+lexVar cs n =
+    let (nm,rest) = span isQN cs
+    in (case nm of
+          "return" -> RETURN
+          "some" -> SOME
+          "every" -> EVERY
+          "if" -> IF
+          "then" -> THEN
+          "else" -> ELSE
+          "to" -> TO
+          "div" -> DIV
+          "idiv" -> IDIV
+          "mod" -> MOD
+          "and" -> AND
+          "or" -> OR
+          "not" -> NOT
+          "union" -> UNION
+          "intersect" -> INTERSECT
+          "except" -> EXCEPT
+          "for" -> FOR
+          "let" -> LET
+          "in" -> IN
+          "as" -> AS
+          "where" -> WHERE
+          "order" -> ORDER
+          "by" -> BY
+          "ascending" -> ASCENDING
+          "descending" -> DESCENDING
+          "element" -> ELEMENT
+          "attribute" -> ATTRIBUTE
+          "satisfies" -> SATISFIES
+          "declare" -> DECLARE
+          "function" -> FUNCTION
+          "variable" -> VARIABLE
+          "at" -> AT
+          "eq" -> SEQ
+          "ne" -> SNE
+          "lt" -> SLT
+          "le" -> SLE
+          "gt" -> SGT
+          "ge" -> SGE
+          "is" -> IS
+	  "insert" -> INSERT
+	  "into" -> INTO
+	  "delete" -> DELETE
+	  "from" -> FROM
+	  "replace" -> REPLACE
+	  "with" -> WITH
+          "instance" -> INSTANCE
+          "of" -> OF
+          var -> QName var
+       ) : lexer rest n
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "<built-in>" #-}
+{-# LINE 1 "<command-line>" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 -- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
 
diff --git a/src/Text/XML/HXQ/XQuery.hs b/src/Text/XML/HXQ/XQuery.hs
--- a/src/Text/XML/HXQ/XQuery.hs
+++ b/src/Text/XML/HXQ/XQuery.hs
@@ -14,9 +14,6 @@
 --------------------------------------------------------------------------------------}
 
 
-{-# OPTIONS -cpp #-}
-
-
 -- | HXQ is a fast and space-efficient compiler from XQuery (the standard
 -- query language for XML) to embedded Haskell code. The translation is
 -- based on Haskell templates. It also provides an interpreter for
diff --git a/src/Text/XML/HXQ/XTree.hs b/src/Text/XML/HXQ/XTree.hs
--- a/src/Text/XML/HXQ/XTree.hs
+++ b/src/Text/XML/HXQ/XTree.hs
@@ -4,7 +4,7 @@
 - Programmer: Leonidas Fegaras
 - Email: fegaras@cse.uta.edu
 - Web: http://lambda.uta.edu/
-- Creation: 05/01/08, last update: 11/14/08
+- Creation: 05/01/08, last update: 01/04/09
 - 
 - Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved.
 - This material is provided as is, with absolutely no warranty expressed or implied.
@@ -35,6 +35,7 @@
 -- The preorder numbering is the document order of elements.
 -- The parent is a cyclic reference to the parent element.
 data XTree =  XElem    !Tag !AttList !Int XTree [XTree]   -- ^ an XML tree node (element)
+           |  XAttr    !Tag !String     -- ^ attribute construction
            |  XText    !String          -- ^ an XML tree leaf (PCDATA)
            |  XInt     !Int             -- ^ an XML tree leaf (int)
            |  XFloat   !Float           -- ^ an XML tree leaf (float)
@@ -55,7 +56,7 @@
 emptyElem e
     = case e of
         XElem _ al _ _ xs
-              -> emptyAL al && all emptyElem xs
+              -> emptyAL al && all emptyElem xs && not (null xs)
         XText text -> all isSpace text
         XNull -> True
         XNoPad -> True
@@ -64,7 +65,7 @@
 
 
 showAL :: AttList -> String
-showAL = foldr (\(a,v) r -> case (a,v) of (_,"") -> r; ('_':_,_) -> r; _ -> " "++a++"=\""++v++"\""++r) []
+showAL = foldr (\(a,v) r -> case (a,v) of ('_':_,_) -> r; _ -> " "++a++"=\""++v++"\""++r) []
 
 showXT :: XTree -> Bool -> String
 showXT e pad
@@ -73,6 +74,7 @@
         XElem _ _ _ _ _ | emptyElem e -> ""
         XElem tag al _ _ xs | all emptyElem xs -> "<"++tag++showAL al++"/>"
         XElem tag al _ _ xs -> "<"++tag++showAL al++">"++showXS xs++"</"++tag++">"
+        XAttr tag val -> p++tag++"=\""++val++"\""
         XText text -> p++text
         XInt n -> p++show n
         XFloat n -> p++show n
diff --git a/src/withDB/Text/XML/HXQ/DB.hs b/src/withDB/Text/XML/HXQ/DB.hs
--- a/src/withDB/Text/XML/HXQ/DB.hs
+++ b/src/withDB/Text/XML/HXQ/DB.hs
@@ -4,7 +4,7 @@
 - Programmer: Leonidas Fegaras
 - Email: fegaras@cse.uta.edu
 - Web: http://lambda.uta.edu/
-- Creation: 05/12/08, last update: 12/06/08
+- Creation: 05/12/08, last update: 01/06/09
 - 
 - Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved.
 - This material is provided as is, with absolutely no warranty expressed or implied.
@@ -202,13 +202,14 @@
 
 relationalSchema :: Table -> String -> [String]
 relationalSchema (Table n path b ts) parent
-    = ("\ncreate table "++n++" (      /* "++printPath path
+    = ["\ncreate table "++n++" (      /* "++printPath path
        ++(if b then " (mixed content)" else "")++" */\n"
        ++n++"_id integer primary key not null"
        ++",\n"++n++"_parent integer"++(if parent /= "" then (" references "++parent++"("++parent++"_id)") else "")
        ++(concat [ ",\n"++m++" varchar("++show size++")    /* "++printPath p++" */" | Column m p size <- ts ])
-       ++")\n")
-      :[ s | t@(Table _ _ _ _) <- ts, s <- relationalSchema t n ]
+       ++")\n"]
+      ++ (if parent /= "" then ["create index "++n++"_parent_index on "++n++" ("++n++"_parent)\n"] else [])
+      ++ [ s | t@(Table _ _ _ _) <- ts, s <- relationalSchema t n ]
 
 
 getTableNames :: Table -> [String]
