packages feed

CCA (empty) → 0.1

raw patch · 21 files changed

+8214/−0 lines, 21 filesdep +arraydep +basedep +containerssetup-changed

Dependencies added: array, base, containers, ghc-prim, haskell-src, syb, template-haskell

Files

+ CCA.cabal view
@@ -0,0 +1,39 @@+Name:           CCA+Version:        0.1+Cabal-Version:  >= 1.2+Build-Type:     Simple+License:        BSD3+License-File:   LICENSE+Author:         Paul H Liu <paul@thev.net>, Eric Cheng <eric.cheng@yale.edu>+Maintainer:     Paul H Liu <paul@thev.net>+Homepage:       not available+Category:       Development+Stability:      Experimental+Synopsis:       preprocessor and library for Causal Communtative Arrows (CCA)+Description:    A library that provides normalization support via Template +                Haskell for CCAs, and a modified preprocessor based on+                Ross Patterson's arrowp that reads Haskell with arrow notation +                and outputs Haskell 98 + Template Haskell sources for+                use with CCA library.+Extra-Source-Files: +                README, LICENSE.arrowp, README.arrowp, +                test/Makefile+                test/Main.hs+                test/Sample.as+++library+  build-depends:   base >= 3 && < 5, template-haskell+  exposed-modules: Control.CCA Control.CCA.Types Control.CCA.CCNF Language.Haskell.TH.Instances+  ghc-options:     -O2 +  Hs-Source-Dirs:  src +  if (impl(ghc >= 6.10))+    build-depends: base >= 4 && < 5, syb, ghc-prim++Executable ccap+    Main-is:        Main.lhs+    Other-Modules:  ArrCode ArrSyn Lexer Parser Parser State Utils+    Build-Depends:  base >= 3 && < 5, array, containers, haskell-src+    Hs-Source-Dirs: preprocessor++
+ LICENSE view
@@ -0,0 +1,19 @@+Copyright (c) 2009 Paul H. Liu <paul@thev.net>++This software is provided 'as-is', without any express or implied+warranty. In no event will the authors be held liable for any damages+arising from the use of this software.++Permission is granted to anyone to use this software for any purpose,+including commercial applications, and to alter it and redistribute it+freely, subject to the following restrictions:++1. The origin of this software must not be misrepresented; you must not+   claim that you wrote the original software. If you use this software+   in a product, an acknowledgment in the product documentation would+   be appreciated but is not required.++2. Altered source versions must be plainly marked as such, and must not+   be misrepresented as being the original software.++3. This notice may not be removed or altered from any source distribution.
+ LICENSE.arrowp view
@@ -0,0 +1,5 @@+LICENSE++ArrSyn and ArrCode are released under the GNU General Public License.+The rest is licenced under the BSD-style license of the base package+in the Haskell hierarchical libraries.
+ README view
@@ -0,0 +1,20 @@+A Library and Preprocessor for Causal Commutative Arrows (CCA)+==============================================================++This library implements the CCA normalization described in the paper [1].+It uses Template Haskell as a staged compilation for arrow programs written+in arrow syntax. A modified arrow preprocesor based on Paterson's arrowp+program, now called ccap, is provided to help preparing proper input to +Template Haskell. ++Note that this is a preliminary release, and still very experiment. Please+send your feedbacks directly to Paul H. Liu <paul@thev.net>, as well as+Eric Cheng <eric.cheng@yale.edu>. All suggestions are welcome.++----+Last Modified: Wed Sep 09 EDT 2009++[1]: Hai Liu, Eric Cheng, and Paul Hudak. Causal Commutative Arrows and Their+Optimization. Proceedings of the 14th ACM SIGPLAN International Conference on+Functional Programming (ICFP 2009). Edinburgh, Scotland. August 2009 +
+ README.arrowp view
@@ -0,0 +1,97 @@+A prototype preprocessor for arrow notation.++Ross Paterson <ross@soi.city.ac.uk>++Note that recent versions of GHC support this notation directly, and+give better error messages to boot.++RUNNING THE ARROW PREPROCESSOR++The program supports the following options:++	--pretty=STYLE	pretty print in STYLE+			[offside|semicolon|inline|none] (default = offside)+	--help		display usage information++Typically you create a Haskell module using the extended syntax, and+call it Foo.as (for arrow script).  To convert this into a corresponding+Haskell module, you say++	arrowp Foo.as >Foo.hs+or+	arrowp Foo.as Foo.hs++and then use Foo.hs with your favourite Haskell implementation.+You can also run it with no arguments at all:++	arrowp <Foo.as >Foo.hs++but then it won't have a file name to put in the error messages.+Sometimes the input has already been preprocessed, e.g. with unlit+(from the GHC distribution).  For this situation, you can specify both+the original file name (for error messages) and the input file name, as+well as the output file name (which is obligatory in this situation), e.g.++	unlit Foo.las Foo.as+	arrowp Foo.las Foo.as Foo.hs++or equivalently as++	unlit Foo.las - | arrowp Foo.las - Foo.hs++(both unlit and arrowp allow filename arguments of "-", meaning standard+input or output as appropriate.)++WARNING: if you give the program 2 (or 3) arguments, the last one will+be overwritten.++DIAGNOSING ERRORS IN YOUR CODE++Syntax errors will be detected by the preprocessor, and the position in+the source where they were detected is reported.  (As usual, the actual+error may occur earlier.)  The preprocessor understands Haskell 98 plus+multiparameter type classes and the arrow extensions, but not some of+the other extensions supported by various Haskell implementations.+The preprocessor doesn't handle operator precedence, so it may copy+some erroneous expressions like `x == y == z'.  Otherwise, the output+of the preprocessor should not generate any syntax errors -- if it does,+please report it.++Semantic errors are more difficult for simple preprocessors like this one.+They will be detected by your Haskell implementation, whether they occur+in the Haskell part or the arrows part, and are thus rather hard to+trace back to the original source.  If you use --pretty=none and feed+the output to GHC, the error it reports will refer to the first line+of the declaration containing the error.  But if you need to read the+preprocessor output to find the problem, omit the --pretty option.++You can reduce the above problems by putting the parts of your program+that need arrow syntax (and thus the preprocessor) in separate modules.++BUGS++- there is no type checking until the output is compiled,+  resulting in incomprehensible error messages.+- failable patterns are not handled as promised yet.+  (And I'm starting to think they shouldn't be.)++SOURCE NOTES++This is based on hsparser, by Sven Panne, Simon Marlow and Noel Winstanley.+It is now the haskell-src package distributed with GHC.++My changes are++	Lexer -- a few lines adding extra symbols (all marked)+	Parser -- a few marked lines and several rules at the end,+		mostly modified versions of existing rules.+	ArrSyn, ArrCode, Utils -- new modules for arrow syntax.++The parser gives 2 shift/reduce conflicts, inherited from the original.++There was a reduce/reduce conflict:++	qual -> 'let' declist .+	qualA -> 'let' declist .++but I've kludged the grammar (see stmtA) to avoid it.
+ Setup.hs view
@@ -0,0 +1,5 @@+module Main (main) where+import Distribution.Simple+main :: IO ()+main = defaultMain +
+ dist/build/ccap/ccap-tmp/Parser.hs view
@@ -0,0 +1,4834 @@+{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}+{-# OPTIONS -fglasgow-exts -cpp #-}+-----------------------------------------------------------------------------+-- |+-- Module      :  Parser+-- Copyright   :  (c) Simon Marlow, Sven Panne 1997-2000+-- License     :  BSD-style (see the file libraries/base/LICENSE)+--+-- Maintainer  :  libraries@haskell.org+-- Stability   :  experimental+-- Portability :  portable+--+-- Haskell parser.+--+-----------------------------------------------------------------------------+module Parser (+		parseModule, parseModuleWithMode,+		ParseMode(..), defaultParseMode, ParseResult(..), hsQuote) where++import Language.Haskell.Syntax+import Language.Haskell.ParseMonad+import Lexer+import Utils (hsQuote, hsSplice) +import Language.Haskell.ParseUtils++import qualified ArrSyn		-- added for arrows+#if __GLASGOW_HASKELL__ >= 503+import qualified Data.Array as Happy_Data_Array+#else+import qualified Array as Happy_Data_Array+#endif+#if __GLASGOW_HASKELL__ >= 503+import qualified GHC.Exts as Happy_GHC_Exts+#else+import qualified GlaExts as Happy_GHC_Exts+#endif++-- parser produced by Happy Version 1.18.4++newtype HappyAbsSyn  = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn4 :: (HsModule) -> (HappyAbsSyn )+happyIn4 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn4 #-}+happyOut4 :: (HappyAbsSyn ) -> (HsModule)+happyOut4 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut4 #-}+happyIn5 :: (([HsImportDecl],[HsDecl])) -> (HappyAbsSyn )+happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn5 #-}+happyOut5 :: (HappyAbsSyn ) -> (([HsImportDecl],[HsDecl]))+happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut5 #-}+happyIn6 :: (([HsImportDecl],[HsDecl])) -> (HappyAbsSyn )+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn ) -> (([HsImportDecl],[HsDecl]))+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: (()) -> (HappyAbsSyn )+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn ) -> (())+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: (()) -> (HappyAbsSyn )+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn ) -> (())+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: (Maybe [HsExportSpec]) -> (HappyAbsSyn )+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn ) -> (Maybe [HsExportSpec])+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: ([HsExportSpec]) -> (HappyAbsSyn )+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn ) -> ([HsExportSpec])+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: (()) -> (HappyAbsSyn )+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn ) -> (())+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: ([HsExportSpec]) -> (HappyAbsSyn )+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn ) -> ([HsExportSpec])+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: (HsExportSpec) -> (HappyAbsSyn )+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn ) -> (HsExportSpec)+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: ([HsImportDecl]) -> (HappyAbsSyn )+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn ) -> ([HsImportDecl])+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: (HsImportDecl) -> (HappyAbsSyn )+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn ) -> (HsImportDecl)+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: (Bool) -> (HappyAbsSyn )+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn ) -> (Bool)+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: (Maybe Module) -> (HappyAbsSyn )+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn ) -> (Maybe Module)+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (Maybe (Bool, [HsImportSpec])) -> (HappyAbsSyn )+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn ) -> (Maybe (Bool, [HsImportSpec]))+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: ((Bool, [HsImportSpec])) -> (HappyAbsSyn )+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn ) -> ((Bool, [HsImportSpec]))+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: (Bool) -> (HappyAbsSyn )+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn ) -> (Bool)+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: ([HsImportSpec]) -> (HappyAbsSyn )+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn ) -> ([HsImportSpec])+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: (HsImportSpec) -> (HappyAbsSyn )+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn ) -> (HsImportSpec)+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: ([HsCName]) -> (HappyAbsSyn )+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn ) -> ([HsCName])+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: (HsCName) -> (HappyAbsSyn )+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn ) -> (HsCName)+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: (HsDecl) -> (HappyAbsSyn )+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn ) -> (HsDecl)+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: (Int) -> (HappyAbsSyn )+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn ) -> (Int)+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: (HsAssoc) -> (HappyAbsSyn )+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn ) -> (HsAssoc)+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyIn28 :: ([HsOp]) -> (HappyAbsSyn )+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn ) -> ([HsOp])+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut28 #-}+happyIn29 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut29 #-}+happyIn30 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut30 #-}+happyIn31 :: (HsDecl) -> (HappyAbsSyn )+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn ) -> (HsDecl)+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut31 #-}+happyIn32 :: ([HsType]) -> (HappyAbsSyn )+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn ) -> ([HsType])+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut32 #-}+happyIn33 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut33 #-}+happyIn34 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: (HsDecl) -> (HappyAbsSyn )+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn ) -> (HsDecl)+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: (HsDecl) -> (HappyAbsSyn )+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn ) -> (HsDecl)+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: ([HsName]) -> (HappyAbsSyn )+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn ) -> ([HsName])+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: (HsDecl) -> (HappyAbsSyn )+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn ) -> (HsDecl)+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: (HsSafety) -> (HappyAbsSyn )+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn ) -> (HsSafety)+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: (String) -> (HappyAbsSyn )+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn ) -> (String)+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: (HsName) -> (HappyAbsSyn )+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn ) -> (HsName)+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: (HsType) -> (HappyAbsSyn )+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn ) -> (HsType)+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: (HsType) -> (HappyAbsSyn )+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn ) -> (HsType)+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: (HsType) -> (HappyAbsSyn )+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn ) -> (HsType)+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: (HsQName) -> (HappyAbsSyn )+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn ) -> (HsQName)+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: (HsQualType) -> (HappyAbsSyn )+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn ) -> (HsQualType)+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: (HsContext) -> (HappyAbsSyn )+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn ) -> (HsContext)+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: ([HsType]) -> (HappyAbsSyn )+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn ) -> ([HsType])+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: ((HsName, [HsName])) -> (HappyAbsSyn )+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn ) -> ((HsName, [HsName]))+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: ([HsName]) -> (HappyAbsSyn )+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn ) -> ([HsName])+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: ([HsConDecl]) -> (HappyAbsSyn )+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn ) -> ([HsConDecl])+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: (HsConDecl) -> (HappyAbsSyn )+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn ) -> (HsConDecl)+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: ((HsName, [HsBangType])) -> (HappyAbsSyn )+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn ) -> ((HsName, [HsBangType]))+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: ((HsName, [HsBangType])) -> (HappyAbsSyn )+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn ) -> ((HsName, [HsBangType]))+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: (HsBangType) -> (HappyAbsSyn )+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn ) -> (HsBangType)+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: (HsBangType) -> (HappyAbsSyn )+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn ) -> (HsBangType)+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: ([([HsName],HsBangType)]) -> (HappyAbsSyn )+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn ) -> ([([HsName],HsBangType)])+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: (([HsName],HsBangType)) -> (HappyAbsSyn )+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn ) -> (([HsName],HsBangType))+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: (HsBangType) -> (HappyAbsSyn )+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn ) -> (HsBangType)+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: ([HsQName]) -> (HappyAbsSyn )+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn ) -> ([HsQName])+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: ([HsQName]) -> (HappyAbsSyn )+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn ) -> ([HsQName])+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyIn67 :: (HsDecl) -> (HappyAbsSyn )+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn ) -> (HsDecl)+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut67 #-}+happyIn68 :: ([HsDecl]) -> (HappyAbsSyn )+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn ) -> ([HsDecl])+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut68 #-}+happyIn69 :: (HsRhs) -> (HappyAbsSyn )+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn ) -> (HsRhs)+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut69 #-}+happyIn70 :: ([HsGuardedRhs]) -> (HappyAbsSyn )+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn ) -> ([HsGuardedRhs])+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut70 #-}+happyIn71 :: (HsGuardedRhs) -> (HappyAbsSyn )+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn ) -> (HsGuardedRhs)+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut71 #-}+happyIn72 :: (HsExp) -> (HappyAbsSyn )+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn ) -> (HsExp)+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut72 #-}+happyIn73 :: (HsExp) -> (HappyAbsSyn )+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn ) -> (HsExp)+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut73 #-}+happyIn74 :: (HsExp) -> (HappyAbsSyn )+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn ) -> (HsExp)+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyIn75 :: (HsExp) -> (HappyAbsSyn )+happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn75 #-}+happyOut75 :: (HappyAbsSyn ) -> (HsExp)+happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut75 #-}+happyIn76 :: (HsExp) -> (HappyAbsSyn )+happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn76 #-}+happyOut76 :: (HappyAbsSyn ) -> (HsExp)+happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut76 #-}+happyIn77 :: (HsExp) -> (HappyAbsSyn )+happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn77 #-}+happyOut77 :: (HappyAbsSyn ) -> (HsExp)+happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut77 #-}+happyIn78 :: (HsExp) -> (HappyAbsSyn )+happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn78 #-}+happyOut78 :: (HappyAbsSyn ) -> (HsExp)+happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut78 #-}+happyIn79 :: ([HsPat]) -> (HappyAbsSyn )+happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn79 #-}+happyOut79 :: (HappyAbsSyn ) -> ([HsPat])+happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut79 #-}+happyIn80 :: (HsPat) -> (HappyAbsSyn )+happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn80 #-}+happyOut80 :: (HappyAbsSyn ) -> (HsPat)+happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut80 #-}+happyIn81 :: (HsExp) -> (HappyAbsSyn )+happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn81 #-}+happyOut81 :: (HappyAbsSyn ) -> (HsExp)+happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut81 #-}+happyIn82 :: (HsExp) -> (HappyAbsSyn )+happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn82 #-}+happyOut82 :: (HappyAbsSyn ) -> (HsExp)+happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut82 #-}+happyIn83 :: (HsExp) -> (HappyAbsSyn )+happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn83 #-}+happyOut83 :: (HappyAbsSyn ) -> (HsExp)+happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut83 #-}+happyIn84 :: (Int) -> (HappyAbsSyn )+happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn84 #-}+happyOut84 :: (HappyAbsSyn ) -> (Int)+happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut84 #-}+happyIn85 :: ([HsExp]) -> (HappyAbsSyn )+happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn85 #-}+happyOut85 :: (HappyAbsSyn ) -> ([HsExp])+happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut85 #-}+happyIn86 :: (HsExp) -> (HappyAbsSyn )+happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn86 #-}+happyOut86 :: (HappyAbsSyn ) -> (HsExp)+happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut86 #-}+happyIn87 :: ([HsExp]) -> (HappyAbsSyn )+happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn87 #-}+happyOut87 :: (HappyAbsSyn ) -> ([HsExp])+happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut87 #-}+happyIn88 :: ([HsStmt]) -> (HappyAbsSyn )+happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn88 #-}+happyOut88 :: (HappyAbsSyn ) -> ([HsStmt])+happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut88 #-}+happyIn89 :: (HsStmt) -> (HappyAbsSyn )+happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn89 #-}+happyOut89 :: (HappyAbsSyn ) -> (HsStmt)+happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut89 #-}+happyIn90 :: ([HsAlt]) -> (HappyAbsSyn )+happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn90 #-}+happyOut90 :: (HappyAbsSyn ) -> ([HsAlt])+happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut90 #-}+happyIn91 :: ([HsAlt]) -> (HappyAbsSyn )+happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn91 #-}+happyOut91 :: (HappyAbsSyn ) -> ([HsAlt])+happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut91 #-}+happyIn92 :: ([HsAlt]) -> (HappyAbsSyn )+happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn92 #-}+happyOut92 :: (HappyAbsSyn ) -> ([HsAlt])+happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut92 #-}+happyIn93 :: (HsAlt) -> (HappyAbsSyn )+happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn93 #-}+happyOut93 :: (HappyAbsSyn ) -> (HsAlt)+happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut93 #-}+happyIn94 :: (HsGuardedAlts) -> (HappyAbsSyn )+happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn94 #-}+happyOut94 :: (HappyAbsSyn ) -> (HsGuardedAlts)+happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut94 #-}+happyIn95 :: ([HsGuardedAlt]) -> (HappyAbsSyn )+happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn95 #-}+happyOut95 :: (HappyAbsSyn ) -> ([HsGuardedAlt])+happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut95 #-}+happyIn96 :: (HsGuardedAlt) -> (HappyAbsSyn )+happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn96 #-}+happyOut96 :: (HappyAbsSyn ) -> (HsGuardedAlt)+happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut96 #-}+happyIn97 :: (HsPat) -> (HappyAbsSyn )+happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn97 #-}+happyOut97 :: (HappyAbsSyn ) -> (HsPat)+happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut97 #-}+happyIn98 :: ([HsStmt]) -> (HappyAbsSyn )+happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn98 #-}+happyOut98 :: (HappyAbsSyn ) -> ([HsStmt])+happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut98 #-}+happyIn99 :: ([HsStmt]) -> (HappyAbsSyn )+happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn99 #-}+happyOut99 :: (HappyAbsSyn ) -> ([HsStmt])+happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut99 #-}+happyIn100 :: ([HsFieldUpdate]) -> (HappyAbsSyn )+happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn100 #-}+happyOut100 :: (HappyAbsSyn ) -> ([HsFieldUpdate])+happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut100 #-}+happyIn101 :: (HsFieldUpdate) -> (HappyAbsSyn )+happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn101 #-}+happyOut101 :: (HappyAbsSyn ) -> (HsFieldUpdate)+happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut101 #-}+happyIn102 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn102 #-}+happyOut102 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut102 #-}+happyIn103 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn103 #-}+happyOut103 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut103 #-}+happyIn104 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn104 #-}+happyOut104 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut104 #-}+happyIn105 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn105 #-}+happyOut105 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut105 #-}+happyIn106 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn106 #-}+happyOut106 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut106 #-}+happyIn107 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn107 #-}+happyOut107 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut107 #-}+happyIn108 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn108 #-}+happyOut108 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut108 #-}+happyIn109 :: (ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn109 #-}+happyOut109 :: (HappyAbsSyn ) -> (ArrSyn.Cmd)+happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut109 #-}+happyIn110 :: ([ArrSyn.Cmd]) -> (HappyAbsSyn )+happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn110 #-}+happyOut110 :: (HappyAbsSyn ) -> ([ArrSyn.Cmd])+happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut110 #-}+happyIn111 :: ([ArrSyn.Alt]) -> (HappyAbsSyn )+happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn111 #-}+happyOut111 :: (HappyAbsSyn ) -> ([ArrSyn.Alt])+happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut111 #-}+happyIn112 :: ([ArrSyn.Alt]) -> (HappyAbsSyn )+happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn112 #-}+happyOut112 :: (HappyAbsSyn ) -> ([ArrSyn.Alt])+happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut112 #-}+happyIn113 :: ([ArrSyn.Alt]) -> (HappyAbsSyn )+happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn113 #-}+happyOut113 :: (HappyAbsSyn ) -> ([ArrSyn.Alt])+happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut113 #-}+happyIn114 :: (ArrSyn.Alt) -> (HappyAbsSyn )+happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn114 #-}+happyOut114 :: (HappyAbsSyn ) -> (ArrSyn.Alt)+happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut114 #-}+happyIn115 :: (ArrSyn.GuardedAlts) -> (HappyAbsSyn )+happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn115 #-}+happyOut115 :: (HappyAbsSyn ) -> (ArrSyn.GuardedAlts)+happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut115 #-}+happyIn116 :: ([ArrSyn.GuardedAlt]) -> (HappyAbsSyn )+happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn116 #-}+happyOut116 :: (HappyAbsSyn ) -> ([ArrSyn.GuardedAlt])+happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut116 #-}+happyIn117 :: (ArrSyn.GuardedAlt) -> (HappyAbsSyn )+happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn117 #-}+happyOut117 :: (HappyAbsSyn ) -> (ArrSyn.GuardedAlt)+happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut117 #-}+happyIn118 :: (ArrSyn.Stmts) -> (HappyAbsSyn )+happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn118 #-}+happyOut118 :: (HappyAbsSyn ) -> (ArrSyn.Stmts)+happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut118 #-}+happyIn119 :: (ArrSyn.Stmts) -> (HappyAbsSyn )+happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn119 #-}+happyOut119 :: (HappyAbsSyn ) -> (ArrSyn.Stmts)+happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut119 #-}+happyIn120 :: (ArrSyn.Stmt) -> (HappyAbsSyn )+happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn120 #-}+happyOut120 :: (HappyAbsSyn ) -> (ArrSyn.Stmt)+happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut120 #-}+happyIn121 :: (ArrSyn.VarDecl ArrSyn.Cmd) -> (HappyAbsSyn )+happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn121 #-}+happyOut121 :: (HappyAbsSyn ) -> (ArrSyn.VarDecl ArrSyn.Cmd)+happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut121 #-}+happyIn122 :: ([ArrSyn.Stmt]) -> (HappyAbsSyn )+happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn122 #-}+happyOut122 :: (HappyAbsSyn ) -> ([ArrSyn.Stmt])+happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut122 #-}+happyIn123 :: ([ArrSyn.Stmt]) -> (HappyAbsSyn )+happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn123 #-}+happyOut123 :: (HappyAbsSyn ) -> ([ArrSyn.Stmt])+happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut123 #-}+happyIn124 :: (ArrSyn.Stmt) -> (HappyAbsSyn )+happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn124 #-}+happyOut124 :: (HappyAbsSyn ) -> (ArrSyn.Stmt)+happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut124 #-}+happyIn125 :: (HsExp) -> (HappyAbsSyn )+happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn125 #-}+happyOut125 :: (HappyAbsSyn ) -> (HsExp)+happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut125 #-}+happyIn126 :: (HsName) -> (HappyAbsSyn )+happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn126 #-}+happyOut126 :: (HappyAbsSyn ) -> (HsName)+happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut126 #-}+happyIn127 :: (HsQName) -> (HappyAbsSyn )+happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn127 #-}+happyOut127 :: (HappyAbsSyn ) -> (HsQName)+happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut127 #-}+happyIn128 :: (HsName) -> (HappyAbsSyn )+happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn128 #-}+happyOut128 :: (HappyAbsSyn ) -> (HsName)+happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut128 #-}+happyIn129 :: (HsQName) -> (HappyAbsSyn )+happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn129 #-}+happyOut129 :: (HappyAbsSyn ) -> (HsQName)+happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut129 #-}+happyIn130 :: (HsName) -> (HappyAbsSyn )+happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn130 #-}+happyOut130 :: (HappyAbsSyn ) -> (HsName)+happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut130 #-}+happyIn131 :: (HsQName) -> (HappyAbsSyn )+happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn131 #-}+happyOut131 :: (HappyAbsSyn ) -> (HsQName)+happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut131 #-}+happyIn132 :: (HsQName) -> (HappyAbsSyn )+happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn132 #-}+happyOut132 :: (HappyAbsSyn ) -> (HsQName)+happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut132 #-}+happyIn133 :: (HsName) -> (HappyAbsSyn )+happyIn133 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn133 #-}+happyOut133 :: (HappyAbsSyn ) -> (HsName)+happyOut133 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut133 #-}+happyIn134 :: (HsQName) -> (HappyAbsSyn )+happyIn134 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn134 #-}+happyOut134 :: (HappyAbsSyn ) -> (HsQName)+happyOut134 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut134 #-}+happyIn135 :: (HsOp) -> (HappyAbsSyn )+happyIn135 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn135 #-}+happyOut135 :: (HappyAbsSyn ) -> (HsOp)+happyOut135 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut135 #-}+happyIn136 :: (HsQOp) -> (HappyAbsSyn )+happyIn136 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn136 #-}+happyOut136 :: (HappyAbsSyn ) -> (HsQOp)+happyOut136 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut136 #-}+happyIn137 :: (HsQOp) -> (HappyAbsSyn )+happyIn137 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn137 #-}+happyOut137 :: (HappyAbsSyn ) -> (HsQOp)+happyOut137 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut137 #-}+happyIn138 :: (HsQName) -> (HappyAbsSyn )+happyIn138 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn138 #-}+happyOut138 :: (HappyAbsSyn ) -> (HsQName)+happyOut138 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut138 #-}+happyIn139 :: (HsQName) -> (HappyAbsSyn )+happyIn139 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn139 #-}+happyOut139 :: (HappyAbsSyn ) -> (HsQName)+happyOut139 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut139 #-}+happyIn140 :: (HsName) -> (HappyAbsSyn )+happyIn140 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn140 #-}+happyOut140 :: (HappyAbsSyn ) -> (HsName)+happyOut140 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut140 #-}+happyIn141 :: (HsQName) -> (HappyAbsSyn )+happyIn141 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn141 #-}+happyOut141 :: (HappyAbsSyn ) -> (HsQName)+happyOut141 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut141 #-}+happyIn142 :: (HsName) -> (HappyAbsSyn )+happyIn142 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn142 #-}+happyOut142 :: (HappyAbsSyn ) -> (HsName)+happyOut142 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut142 #-}+happyIn143 :: (HsQName) -> (HappyAbsSyn )+happyIn143 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn143 #-}+happyOut143 :: (HappyAbsSyn ) -> (HsQName)+happyOut143 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut143 #-}+happyIn144 :: (HsName) -> (HappyAbsSyn )+happyIn144 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn144 #-}+happyOut144 :: (HappyAbsSyn ) -> (HsName)+happyOut144 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut144 #-}+happyIn145 :: (HsQName) -> (HappyAbsSyn )+happyIn145 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn145 #-}+happyOut145 :: (HappyAbsSyn ) -> (HsQName)+happyOut145 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut145 #-}+happyIn146 :: (HsQName) -> (HappyAbsSyn )+happyIn146 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn146 #-}+happyOut146 :: (HappyAbsSyn ) -> (HsQName)+happyOut146 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut146 #-}+happyIn147 :: (HsName) -> (HappyAbsSyn )+happyIn147 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn147 #-}+happyOut147 :: (HappyAbsSyn ) -> (HsName)+happyOut147 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut147 #-}+happyIn148 :: (HsName) -> (HappyAbsSyn )+happyIn148 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn148 #-}+happyOut148 :: (HappyAbsSyn ) -> (HsName)+happyOut148 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut148 #-}+happyIn149 :: (HsQName) -> (HappyAbsSyn )+happyIn149 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn149 #-}+happyOut149 :: (HappyAbsSyn ) -> (HsQName)+happyOut149 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut149 #-}+happyIn150 :: (HsLiteral) -> (HappyAbsSyn )+happyIn150 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn150 #-}+happyOut150 :: (HappyAbsSyn ) -> (HsLiteral)+happyOut150 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut150 #-}+happyIn151 :: (SrcLoc) -> (HappyAbsSyn )+happyIn151 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn151 #-}+happyOut151 :: (HappyAbsSyn ) -> (SrcLoc)+happyOut151 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut151 #-}+happyIn152 :: (()) -> (HappyAbsSyn )+happyIn152 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn152 #-}+happyOut152 :: (HappyAbsSyn ) -> (())+happyOut152 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut152 #-}+happyIn153 :: (()) -> (HappyAbsSyn )+happyIn153 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn153 #-}+happyOut153 :: (HappyAbsSyn ) -> (())+happyOut153 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut153 #-}+happyIn154 :: (Module) -> (HappyAbsSyn )+happyIn154 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn154 #-}+happyOut154 :: (HappyAbsSyn ) -> (Module)+happyOut154 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut154 #-}+happyIn155 :: (HsName) -> (HappyAbsSyn )+happyIn155 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn155 #-}+happyOut155 :: (HappyAbsSyn ) -> (HsName)+happyOut155 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut155 #-}+happyIn156 :: (HsName) -> (HappyAbsSyn )+happyIn156 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn156 #-}+happyOut156 :: (HappyAbsSyn ) -> (HsName)+happyOut156 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut156 #-}+happyIn157 :: (HsQName) -> (HappyAbsSyn )+happyIn157 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn157 #-}+happyOut157 :: (HappyAbsSyn ) -> (HsQName)+happyOut157 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut157 #-}+happyIn158 :: (HsQName) -> (HappyAbsSyn )+happyIn158 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn158 #-}+happyOut158 :: (HappyAbsSyn ) -> (HsQName)+happyOut158 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut158 #-}+happyIn159 :: (HsName) -> (HappyAbsSyn )+happyIn159 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn159 #-}+happyOut159 :: (HappyAbsSyn ) -> (HsName)+happyOut159 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut159 #-}+happyInTok :: (Token) -> (HappyAbsSyn )+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn ) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x00\x00\x00\x00\x5d\x05\x40\x05\x3b\x00\x00\x00\x00\x00\x00\x00\xfe\x03\x7e\x05\x00\x00\x00\x00\x7d\x05\x00\x00\x60\x15\xe6\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\xf2\x15\x00\x00\x00\x00\x47\x05\x00\x00\xb1\x04\x7a\x05\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x05\x00\x00\x00\x00\x00\x00\x00\x00\x89\x02\x00\x00\xfe\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x05\x7b\x05\xed\x02\x25\x08\x00\x00\xdf\x19\x00\x00\x72\x05\x00\x00\x00\x00\x2c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x12\xa4\x13\x16\x15\x16\x15\x00\x00\xdf\x19\xdf\x19\x16\x15\xb9\x0f\xb9\x0f\x73\x05\x6c\x05\x28\x02\x38\x05\x00\x00\x00\x00\x00\x00\xb9\x0f\xb9\x0f\x78\x05\x84\x16\x6b\x05\xa9\x15\x6b\x05\x00\x00\x00\x00\x00\x00\x3b\x16\x5b\x05\x00\x00\x00\x00\x00\x00\x23\x04\x00\x00\x00\x00\x57\x05\x3f\x05\x00\x00\x00\x00\x00\x00\x95\x03\x71\x0e\x25\x05\xfe\x03\x00\x00\x62\x05\x61\x05\x00\x00\x5a\x13\x5a\x13\xb9\x0f\x42\x05\x23\x05\x21\x05\x00\x00\x00\x00\xde\x07\x00\x00\x3b\x05\x00\x00\x16\x15\x4c\x05\xdf\x19\xdf\x19\x00\x00\x43\x05\x4b\x05\xc9\x02\x44\x05\x3c\x05\x00\x00\xec\x02\xde\x07\xca\x02\xc7\x02\x00\x00\x00\x00\x16\x15\x45\x05\x00\x00\x00\x00\x35\x05\x00\x00\x00\x00\x00\x00\x34\x05\x31\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x02\x00\x00\xdf\x19\x30\x05\xdf\x19\xc9\x04\x00\x00\xfe\x04\x20\x05\x00\x00\x00\x00\x00\x00\x15\x19\x00\x00\x00\x00\x00\x00\x1d\x05\x00\x00\xba\x02\x16\x15\x00\x00\x00\x00\x98\x06\xb9\x0f\x15\x03\x00\x00\x00\x00\x00\x00\xd2\x03\x2e\x05\x01\x12\x00\x00\x00\x00\x00\x00\xac\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x01\x00\x00\x2d\x05\x22\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x03\x00\x00\x00\x00\xc8\x01\x00\x00\x1f\x05\x18\x05\x16\x15\x00\x00\x00\x00\x00\x00\x1e\x05\x4b\x03\x00\x00\x03\x05\x00\x00\x00\x00\x06\x05\x00\x00\x00\x00\x11\x05\x6c\x08\x00\x00\x16\x15\x00\x00\x00\x00\x10\x13\x00\x00\x00\x00\x16\x15\x16\x15\x00\x00\x16\x15\x16\x15\xcc\x14\x00\x00\x00\x00\xfc\x04\x00\x00\xe5\x04\x00\x00\x00\x00\xdb\x04\xdf\x19\x82\x14\x0b\x05\x00\x00\x0a\x05\x00\x00\x09\x05\x01\x05\x03\x0e\xfd\x04\x04\x05\x97\x07\x00\x00\xfb\x04\xc6\x12\xeb\x04\xe6\x01\xff\x04\xb7\x03\xb0\x04\x00\x00\xe3\x04\xdd\x04\x00\x00\xa9\x02\x7b\x02\x0b\x02\x00\x00\xde\x04\x4d\x0f\x00\x00\x00\x00\x4d\x0f\x3f\x02\x4d\x0f\x00\x00\x00\x00\x00\x00\xbb\x04\x79\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x0f\x00\x00\x4d\x0f\x00\x00\x00\x00\x00\x00\x20\x00\xfa\x03\xdf\x04\x00\x00\x00\x00\x2d\x02\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\xc6\x04\xc6\x12\x00\x00\xb9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x19\x00\x00\x82\x14\xcd\x16\xc8\x04\xcc\x01\x82\x14\x7e\x0d\x00\x00\xc0\x04\x00\x00\x00\x00\xc5\x04\x00\x00\xbc\x04\x00\x00\x00\x00\x4d\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x82\x14\x00\x00\xc5\x05\x00\x00\xb5\x04\x00\x00\x00\x00\xbe\x04\xb8\x04\xb6\x04\x15\x03\x00\x00\xba\x04\x00\x00\xef\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x14\x00\x00\x00\x00\x00\x00\x82\x14\x8f\x04\xa5\x04\x38\x14\x51\x07\x00\x00\x00\x00\x00\x00\x6c\x08\x00\x00\x00\x00\xdf\x19\x00\x00\x6a\x0b\x00\x00\xdf\x19\xee\x13\xb3\x04\xee\x13\x5f\x00\x3f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x17\x8c\x04\x00\x00\xee\x13\xb2\x04\xae\x04\xcc\x01\x00\x00\x00\x00\xcc\x02\x00\x00\xee\x13\xc6\x12\x94\x04\x00\x00\xc8\x01\x2d\x02\x00\x00\x00\x00\x00\x00\xa2\x04\x00\x00\xa8\x17\x9f\x04\xcc\x01\x00\x00\x00\x00\x38\x15\x00\x00\xc1\x04\x16\x02\x9e\x04\x9d\x04\xed\x19\x4d\x0f\x00\x00\x00\x00\xad\x03\x37\x04\xa9\x04\x00\x00\x00\x00\x4d\x0f\x4d\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x15\x19\xfe\x01\x8e\x04\x9c\x04\x4d\x0f\x00\x00\x91\x04\x00\x00\x00\x00\xb5\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x19\x00\x00\xee\x13\x16\x17\x83\x04\x00\x00\x59\x04\x57\x04\x41\x04\x4b\x04\x00\x00\xb6\x0b\xb6\x0b\x4e\x04\x5e\x01\xdf\x19\x0a\x07\x7d\x04\x00\x00\xee\x13\x5f\x00\x00\x00\x21\x12\xee\x13\xee\x13\xee\x13\xee\x13\x00\x00\xee\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x0d\xee\x13\x79\x04\x4c\x04\x42\x04\xdf\x19\x00\x00\x7a\x19\x00\x00\xe1\x00\x71\x04\x1f\x17\x00\x00\x42\x01\x69\x04\x6a\x04\xb6\x0b\x5f\x00\x67\x04\xcc\x01\x7e\x0d\x3f\x02\x7e\x0d\x7e\x0d\x00\x00\x00\x00\x6c\x08\x56\x04\xcc\x18\x5f\x04\x47\x01\x00\x00\x00\x00\xc6\x12\x00\x00\x00\x00\x4d\x0f\x58\x04\x4d\x04\x00\x00\x00\x00\x00\x00\x55\x04\xcc\x18\x51\x04\x00\x00\x00\x00\x4d\x0f\x00\x00\xde\x02\x35\x03\x00\x00\x00\x00\x00\x00\x00\x00\x04\x02\xd0\x02\x00\x00\x44\x03\x50\x04\x60\x04\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x03\x00\x00\x1c\x04\x3d\x04\x00\x00\x39\x04\xee\x13\x00\x00\x00\x00\x2b\x04\x18\x04\x00\x00\x00\x00\x32\x0d\x32\x0d\xa2\x00\x13\x04\x00\x00\x02\x0c\x00\x00\x02\x0c\x00\x00\x26\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x0d\x31\x19\xe6\x0c\xe6\x0c\x02\x0c\x02\x0c\x06\x04\x32\x04\x51\x07\x00\x00\x02\x0c\x5f\x00\x0a\x07\xe6\x0c\x00\x00\x31\x04\x2d\x04\xcc\x01\xe6\x0c\x83\x18\x00\x00\x00\x00\xb6\x0b\x1b\x04\x00\x00\x13\x03\x00\x00\x5f\x00\x60\x02\x7e\x0d\x7e\x0d\x00\x00\xee\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x00\x2e\x04\x00\x00\x00\x00\xdf\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x15\x04\x00\x00\x00\x00\x00\x00\x9a\x0c\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x18\x76\x00\x14\x04\x00\x00\x00\x00\x25\x04\x7e\x0d\x02\x0c\x10\x04\x3a\x18\x24\x04\x00\x00\xee\x13\x00\x00\x00\x00\xf1\x17\xdd\x03\x11\x04\x00\x00\x05\x04\x4e\x0c\x00\x00\xee\x13\x00\x00\x03\x04\x00\x00\x00\x04\x7e\x0d\xee\x13\xff\x03\x4e\x0c\xfd\x03\x7e\x0d\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x04\x00\x8a\x03\x00\x00\x00\x00\x02\x00\x00\x00\xb9\x03\x90\x03\x88\x03\xe9\x03\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x87\x03\x00\x00\x00\x00\x00\x00\xe6\x03\x00\x00\x00\x00\x00\x00\xd3\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x0b\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x01\x00\x00\x6f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xee\x03\x00\x00\x9e\x01\x00\x00\x2a\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x02\x45\x06\x27\x0a\x06\x0a\x00\x00\xe0\x13\xa1\x0b\xe0\x09\xde\x00\xd8\x00\x00\x00\x64\x00\x00\x00\xf7\x03\x00\x00\x00\x00\x00\x00\xd2\x00\xca\x00\xdf\xff\x1a\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\xcc\x03\x00\x00\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x24\x01\x8f\x03\x63\x03\x00\x00\x00\x00\x00\x00\x00\x00\xfe\x05\xdd\x05\x0a\x00\x00\x00\xbc\x03\x00\x00\x00\x00\x00\x00\xea\x0b\x00\x00\x00\x00\x5d\x03\xbf\x09\x23\x00\x6e\x12\x96\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x0a\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x03\x00\x00\xa1\x0b\x00\x00\x4c\x13\x53\x02\x00\x00\x72\x03\xd5\xff\x00\x00\x00\x00\x00\x00\xba\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x03\x99\x09\x00\x00\x00\x00\x9d\x01\xb4\x00\xf2\xff\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x02\x00\x00\x00\x00\x27\x03\x00\x00\x00\x00\x00\x00\xb3\x0a\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x09\x00\x00\x78\x09\x00\x00\x00\x00\xea\x11\x45\x03\x00\x00\x52\x09\x31\x09\x00\x00\x0b\x09\xea\x08\x29\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x02\xcd\x01\x00\x00\x8e\x0c\xea\x11\xb3\xff\x00\x00\xfc\xff\xe5\xff\x00\x00\x00\x00\x8b\x01\x00\x00\x00\x00\xb3\x09\x41\x03\x00\x00\xb7\x05\xf7\xff\x1f\x03\x8b\x03\x60\x03\x6a\x03\x00\x00\xd2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x01\x0d\x00\x00\x00\x10\x01\xb9\xff\x0c\x01\x00\x00\x00\x00\x00\x00\x24\x03\x69\x01\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\xf2\x00\x00\x00\xbd\x01\x7d\x01\x3c\x03\xcb\x02\x23\x03\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x05\x00\x00\x04\x03\x00\x00\x00\x00\x00\x00\x4f\x00\x4b\x00\x00\x00\xda\x0c\x00\x00\xc4\x08\x21\x00\x00\x00\x87\x02\xa3\x08\x6e\x11\x00\x00\x00\x00\x00\x00\x78\x02\xef\xff\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x08\x00\x00\x10\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x04\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x08\x00\x00\x00\x00\x00\x00\x36\x08\x00\x00\x00\x00\x70\x05\x6c\x09\x00\x00\x00\x00\x00\x00\x25\x09\x00\x00\x00\x00\x02\x13\x00\x00\xee\x01\x69\x02\xb8\x12\x15\x08\xba\x01\xef\x07\x30\x01\x4a\x02\x00\x00\x00\x00\x00\x00\xb5\x03\x00\x00\x5a\x00\x00\x00\x00\x00\xce\x07\xd6\x00\x00\x00\x38\x02\x00\x00\xec\xff\x25\x02\x00\x00\xa8\x07\x4f\x05\x00\x00\x00\x00\xfd\x01\x29\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\xff\x00\x00\xd7\x01\x00\x00\x00\x00\x8b\x01\x00\x00\x4e\x01\x09\x02\x00\x00\x00\x00\xa0\x00\x86\x01\x00\x00\x00\x00\x7b\x01\x2e\x01\xaf\x01\x00\x00\x00\x00\x7f\x01\x65\x01\x00\x00\x00\x00\xa6\x03\x00\x00\x55\x0b\xfa\xff\x00\x00\x00\x00\xec\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\x00\x00\x00\x00\x00\x00\x6c\x03\x00\x00\xd8\x11\x00\x00\x87\x07\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x03\xf1\x02\x00\x00\x05\x01\x42\x0c\xde\x08\x00\x00\x77\x01\x61\x07\xf7\x00\x00\x00\x28\x03\x40\x07\x1a\x07\xf9\x06\xd3\x06\x00\x00\xb2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x11\x8c\x06\x49\x01\x00\x00\x00\x00\xf6\x0b\x00\x00\xda\x0c\x00\x00\x94\x01\x44\x00\x97\x08\x66\x01\x00\x00\x00\x00\x00\x00\xaa\x02\xb6\x00\x63\x00\x57\x01\x04\x11\x17\x01\xcf\x10\x9a\x10\x00\x00\x00\x00\x50\x08\x88\x01\xd7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x08\x05\x00\x00\x00\x00\xa8\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xff\x00\x00\x00\x00\x00\x00\x34\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x01\xe8\x00\x00\x00\x36\x00\x00\x00\xf3\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x01\x00\x00\x5d\x00\xb1\x00\x00\x00\x00\x00\x6b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x0d\x6f\x0d\x00\x00\x00\x00\x00\x00\x27\x0f\x00\x00\xf0\x0e\x2f\x01\x00\x00\x00\x00\xa0\x01\x53\x00\x00\x00\x00\x00\x65\x10\xda\x0c\xe2\x04\x9b\x04\xb9\x0e\x82\x0e\x00\x00\xd1\xff\x50\x08\x32\x00\x4b\x0e\x56\x00\xdc\x02\x54\x04\x00\x00\x7a\x01\x00\x00\xc0\xff\x0d\x04\x92\x11\x00\x00\x00\x00\x63\x02\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\xaf\xff\x30\x10\xfb\x0f\x00\x00\x92\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x01\x00\x00\x80\x11\x00\x00\x00\x00\x68\x00\x60\x00\x5d\x01\xc6\x0f\xdd\x0d\x6b\x01\xd7\x00\x00\x00\x00\x00\x24\x06\x00\x00\x00\x00\x52\x0d\x11\x00\x35\x01\x00\x00\x00\x00\xc6\x03\x00\x00\x6d\x0a\x00\x00\x00\x00\x00\x00\xb0\x02\x91\x0f\x4c\x0a\x00\x00\x7f\x03\x00\x00\x5c\x0f\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xa1\xfe\x00\x00\x00\x00\x00\x00\xa0\xfe\xfd\xff\xf4\xff\xf4\xff\x00\x00\xf2\xff\x9d\xfe\x9c\xfe\x00\x00\xf5\xff\xf7\xff\x00\x00\xfb\xff\x9e\xfe\x9f\xfe\xf4\xff\xe4\xff\xb2\xff\xf9\xff\xf4\xff\xc3\xff\xbb\xff\xb3\xff\xbc\xff\xb1\xff\x00\x00\xf6\xff\xfc\xff\x00\x00\xf3\xff\xee\xff\x00\x00\xee\xff\xec\xff\xeb\xff\xd6\xfe\xbe\xfe\x99\xfe\xb5\xfe\xea\xff\xbc\xfe\xbd\xfe\xb3\xfe\xb4\xfe\x00\x00\xef\xff\x00\x00\xbb\xfe\xba\xfe\xb9\xfe\xb8\xfe\xb7\xfe\xb6\xfe\xa0\xfe\xcc\xff\x00\x00\xa1\xfe\x5b\xff\x53\xff\x51\xff\x4b\xff\x48\xff\x46\xff\x47\xff\xd9\xfe\xd2\xfe\x45\xff\xa5\xfe\xa3\xfe\xa4\xfe\xa2\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x3d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\xfe\x00\x00\xe1\xff\xca\xff\xc9\xff\xc8\xff\x00\x00\x00\x00\x00\x00\xf5\xff\xc5\xff\xf5\xff\xf8\xff\xe5\xff\xfa\xff\xc4\xff\x00\x00\x00\x00\x9a\xfe\x8d\xff\x93\xff\xa1\xff\x9f\xff\x9e\xff\x00\x00\x00\x00\x97\xfe\x99\xff\x9d\xff\x00\x00\x00\x00\x6f\xff\x00\x00\xe2\xff\x00\x00\x00\x00\x54\xff\x00\x00\x00\x00\xb8\xff\x00\x00\x72\xff\x00\x00\x61\xff\x60\xff\x5f\xff\x5d\xff\x47\xff\xa1\xfe\x00\x00\xa0\xfe\x00\x00\x55\xff\x4c\xff\x00\x00\x00\x00\x38\xff\x00\x00\x37\xff\xdb\xfe\x00\x00\x5f\xff\x00\x00\x00\x00\xc2\xfe\xc1\xfe\x00\x00\xc8\xfe\xbf\xfe\xb2\xfe\x00\x00\xcc\xfe\xaf\xfe\xad\xfe\xac\xfe\xa8\xfe\xb0\xfe\xa6\xfe\xb1\xfe\xdc\xfe\x3b\xff\x00\x00\xc0\xfe\xaa\xfe\xa7\xfe\x00\x00\x00\x00\x52\xff\x68\xff\x66\xff\x64\xff\xc4\xfe\xc3\xfe\x00\x00\xc8\xfe\xce\xfe\xae\xfe\x00\x00\xab\xfe\x00\x00\x00\x00\xaa\xfe\xa9\xfe\x00\x00\x00\x00\x00\x00\xcb\xff\xfe\xff\xe6\xff\x00\x00\x00\x00\xef\xff\xf0\xff\xed\xff\xf1\xff\x00\x00\xd0\xff\xcf\xff\xce\xff\xd8\xfe\xd4\xfe\x00\x00\xe8\xff\x00\x00\xcd\xff\xc6\xfe\xc5\xfe\xc6\xff\xca\xfe\xd0\xfe\x00\x00\xae\xff\xad\xff\x00\x00\x67\xff\x00\x00\x00\x00\x00\x00\x5c\xff\x65\xff\x6a\xff\xa0\xfe\x00\x00\x15\xff\x00\x00\x4a\xff\x4d\xff\x00\x00\xd5\xfe\xd1\xfe\x00\x00\x5f\xff\x41\xff\x00\x00\xda\xfe\x3c\xff\x00\x00\xa1\xfe\x42\xff\x00\x00\x00\x00\x40\xff\x00\x00\x36\xff\x00\x00\x43\xff\x44\xff\x00\x00\x4e\xff\x00\x00\xf4\xff\xf4\xff\x00\x00\x00\x00\x00\x00\xa0\xfe\xbf\xff\xa0\xfe\xa1\xfe\x00\x00\xb9\xff\xa1\xff\xba\xff\x17\xff\x5f\xff\xa1\xfe\x00\x00\x00\x00\xa0\xfe\x00\x00\xa5\xff\xa7\xff\xdf\xff\xbe\xff\xa0\xfe\x00\x00\x96\xff\x00\x00\x00\x00\x00\x00\x98\xff\x00\x00\x00\x00\xa1\xfe\xa0\xff\x00\x00\x8f\xff\x00\x00\xc2\xff\x8e\xff\xa2\xff\x79\xff\x00\x00\x94\xff\x97\xff\x95\xff\x9c\xff\x00\x00\x9a\xff\x00\x00\x9b\xff\xf4\xff\xf4\xff\xdd\xff\x00\x00\xa5\xff\xa9\xff\xa8\xff\x00\x00\xa6\xff\x1d\xff\x00\x00\x19\xff\x1e\xff\x00\x00\x18\xff\xbd\xff\x79\xff\x8b\xff\x73\xff\x56\xff\xf4\xff\xf4\xff\x5e\xff\x00\x00\x4f\xff\x00\x00\xb6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x2c\xff\x32\xff\x2e\xff\xa1\xfe\xa0\xfe\x34\xff\x30\xff\x31\xff\x39\xff\x00\x00\x3f\xff\x3a\xff\x3e\xff\xcb\xfe\x00\x00\x49\xff\x00\x00\x69\xff\x00\x00\xc7\xfe\xcd\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xff\x00\x00\xe7\xff\x00\x00\xd1\xff\xd3\xfe\xc7\xff\xc9\xfe\xcf\xfe\xd7\xfe\x00\x00\x16\xff\x14\xff\x62\xff\x35\xff\x2b\xff\x00\x00\x00\x00\x00\x00\x57\xff\x0f\xff\x0e\xff\x0d\xff\x0b\xff\x09\xff\x02\xff\x00\xff\x00\x00\xa1\xfe\x00\x00\x00\x00\xa0\xfe\x00\x00\xa0\xfe\x00\x00\x59\xff\xaf\xff\xb0\xff\xf4\xff\xb4\xff\x00\x00\x00\x00\x50\xff\x00\x00\xa1\xfe\x00\x00\x00\x00\xc1\xff\xa1\xfe\x00\x00\x1a\xff\x00\x00\x00\x00\x00\x00\xa4\xff\x00\x00\x00\x00\xe0\xff\xe3\xff\xde\xff\x00\x00\xda\xff\x6d\xff\x00\x00\x00\x00\x90\xff\x91\xff\x86\xff\x8a\xff\x85\xff\x00\x00\x00\x00\xb5\xfe\x00\x00\x00\x00\xc0\xff\x7f\xff\x00\x00\x00\x00\x00\x00\x82\xff\x83\xff\x00\x00\x00\x00\x70\xff\x71\xff\xf4\xff\x6b\xff\x00\x00\xee\xff\x00\x00\x00\x00\x00\x00\x1c\xff\x00\x00\x98\xfe\x78\xff\x00\x00\x8c\xff\x29\xff\x2a\xff\xf4\xff\x26\xff\x00\x00\x5a\xff\x00\x00\xf5\xff\xb7\xff\xfd\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x03\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\xff\x00\x00\xa1\xfe\x00\x00\xa0\xfe\x01\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\xff\x00\x00\x33\xff\x63\xff\x2d\xff\x10\xff\x12\xff\x11\xff\x13\xff\x0c\xff\x0a\xff\x00\x00\x00\x00\xa0\xfe\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\xfb\xfe\x00\x00\xa0\xfe\x5f\xff\xa1\xfe\xe8\xfe\x00\x00\x00\x00\x00\x00\xa0\xfe\xa0\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xff\x58\xff\x1f\xff\xa1\xfe\xf5\xff\x28\xff\x00\x00\x74\xff\x77\xff\x00\x00\xaa\xff\xa3\xff\x00\x00\x00\x00\xee\xff\xd7\xff\xd6\xff\x9b\xfe\xd5\xff\xf5\xff\x6e\xff\x84\xff\x81\xff\x80\xff\x89\xff\x00\x00\x00\x00\x7d\xff\xac\xff\x88\xff\x87\xff\x00\x00\x00\x00\x6c\xff\x00\x00\x00\x00\xef\xff\xdb\xff\xab\xff\x1b\xff\x76\xff\x00\x00\x27\xff\x68\xff\x23\xff\x21\xff\x00\x00\x00\x00\x07\xff\x06\xff\x00\x00\x00\x00\xee\xfe\xe5\xfe\x00\x00\x00\x00\x00\x00\xe4\xfe\xea\xfe\x00\x00\xef\xfe\xe9\xfe\xa1\xfe\x00\x00\x04\xff\xf4\xff\xf4\xff\xfc\xfe\xfe\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\xfe\x1f\xff\xa1\xfe\x00\x00\xa0\xfe\x5f\xff\x00\x00\x08\xff\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xec\xfe\xed\xfe\x00\x00\x00\x00\xde\xfe\x00\x00\xdf\xfe\xa0\xfe\x00\x00\x00\x00\x00\x00\x24\xff\x00\x00\x22\xff\x25\xff\x75\xff\xd8\xff\xdc\xff\x00\x00\xd3\xff\x00\x00\x7b\xff\x7c\xff\x00\x00\x7e\xff\x7a\xff\xd4\xff\xd2\xff\x00\x00\xe3\xfe\x05\xff\xe1\xfe\x00\x00\xdd\xfe\xe2\xfe\xeb\xfe\xe6\xfe\xe7\xfe\xf9\xfe\xfa\xfe\xf4\xff\xf6\xfe\x00\x00\x00\x00\x00\x00\xf4\xff\xf4\xff\xa1\xfe\x00\x00\x00\x00\xa1\xfe\xf5\xff\xf8\xfe\xe0\xfe\x00\x00\x20\xff\xf7\xfe\x00\x00\x68\xff\xf3\xfe\xf1\xfe\x00\x00\x00\x00\xf4\xfe\x00\x00\xf2\xfe\x00\x00\xf5\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xfe"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x07\x00\x01\x00\x01\x00\x00\x00\x12\x00\x07\x00\x08\x00\x09\x00\x56\x00\x18\x00\x11\x00\x12\x00\x2e\x00\x09\x00\x20\x00\x0a\x00\x0b\x00\x3a\x00\x3f\x00\x0b\x00\x30\x00\x31\x00\x20\x00\x43\x00\x3e\x00\x3f\x00\x15\x00\x20\x00\x31\x00\x15\x00\x19\x00\x1a\x00\x1b\x00\x19\x00\x1a\x00\x1b\x00\x1f\x00\x1c\x00\x21\x00\x1f\x00\x23\x00\x21\x00\x20\x00\x23\x00\x0d\x00\x15\x00\x15\x00\x59\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x1b\x00\x15\x00\x2d\x00\x1f\x00\x1f\x00\x21\x00\x21\x00\x6b\x00\x23\x00\x31\x00\x1e\x00\x1f\x00\x88\x00\x21\x00\x20\x00\x95\x00\x3f\x00\x20\x00\x94\x00\x3f\x00\x13\x00\x14\x00\x10\x00\x13\x00\x14\x00\x03\x00\x04\x00\x14\x00\x40\x00\x03\x00\x04\x00\x9b\x00\x95\x00\x03\x00\x04\x00\x3f\x00\x3f\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x3f\x00\x89\x00\x8a\x00\x03\x00\x04\x00\x94\x00\x46\x00\x93\x00\x93\x00\x8a\x00\x93\x00\x03\x00\x04\x00\x7a\x00\x93\x00\x10\x00\x7e\x00\x17\x00\x9a\x00\x81\x00\x7a\x00\x83\x00\x20\x00\x98\x00\x93\x00\x3e\x00\x7b\x00\x88\x00\x22\x00\x8a\x00\x8c\x00\x93\x00\x7b\x00\x8f\x00\x88\x00\x94\x00\x8a\x00\x0f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x97\x00\x94\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x94\x00\x97\x00\x88\x00\x89\x00\x8a\x00\x94\x00\x94\x00\x93\x00\x99\x00\x93\x00\x56\x00\x75\x00\x93\x00\x40\x00\x99\x00\x94\x00\x93\x00\x47\x00\x57\x00\x49\x00\x4a\x00\x9b\x00\x57\x00\x4d\x00\x4e\x00\x4f\x00\x57\x00\x4c\x00\x93\x00\x93\x00\x38\x00\x6b\x00\x7a\x00\x0f\x00\x7c\x00\x7a\x00\x93\x00\x7c\x00\x7a\x00\x94\x00\x7c\x00\x93\x00\x94\x00\x88\x00\x89\x00\x8a\x00\x88\x00\x6c\x00\x8a\x00\x88\x00\x5e\x00\x8a\x00\x88\x00\x93\x00\x8a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x75\x00\x6c\x00\x2d\x00\x9b\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x79\x00\x6c\x00\x7b\x00\x20\x00\x7d\x00\x94\x00\x76\x00\x38\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x93\x00\x94\x00\x2d\x00\x92\x00\x07\x00\x0d\x00\x0f\x00\x50\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x94\x00\x94\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2a\x00\x2b\x00\x5c\x00\x50\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x20\x00\x38\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0e\x00\x29\x00\x2a\x00\x38\x00\x03\x00\x04\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x18\x00\x88\x00\x89\x00\x8a\x00\x75\x00\x8c\x00\x4c\x00\x58\x00\x59\x00\x88\x00\x89\x00\x8a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x9b\x00\x93\x00\x6e\x00\x88\x00\x89\x00\x8a\x00\x93\x00\x94\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x9b\x00\x20\x00\x0f\x00\x88\x00\x89\x00\x8a\x00\x0e\x00\x28\x00\x29\x00\x2a\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x29\x00\x2a\x00\x18\x00\x88\x00\x89\x00\x8a\x00\x35\x00\x22\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x93\x00\x93\x00\x0d\x00\x75\x00\x9b\x00\x69\x00\x6a\x00\x88\x00\x89\x00\x8a\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x29\x00\x2a\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x88\x00\x89\x00\x8a\x00\x03\x00\x04\x00\x34\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x9b\x00\x2a\x00\x8c\x00\x93\x00\x94\x00\x8f\x00\x9b\x00\x29\x00\x2a\x00\x9b\x00\x28\x00\x29\x00\x2a\x00\x88\x00\x89\x00\x8a\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x32\x00\x33\x00\x22\x00\x35\x00\x88\x00\x88\x00\x89\x00\x8a\x00\x03\x00\x04\x00\x75\x00\x71\x00\x9b\x00\x29\x00\x2a\x00\x4c\x00\x9b\x00\x88\x00\x89\x00\x8a\x00\x29\x00\x2a\x00\x36\x00\x37\x00\x9b\x00\x29\x00\x2a\x00\x88\x00\x89\x00\x8a\x00\x22\x00\x3d\x00\x72\x00\x88\x00\x89\x00\x8a\x00\x9b\x00\x03\x00\x04\x00\x93\x00\x93\x00\x94\x00\x5a\x00\x5b\x00\x5c\x00\x93\x00\x9b\x00\x6d\x00\x6e\x00\x00\x00\x05\x00\x37\x00\x9b\x00\x03\x00\x04\x00\x58\x00\x59\x00\x05\x00\x06\x00\x88\x00\x89\x00\x8a\x00\x20\x00\x6f\x00\x70\x00\x71\x00\x94\x00\x12\x00\x41\x00\x42\x00\x43\x00\x5a\x00\x5b\x00\x5c\x00\x7c\x00\x00\x00\x6d\x00\x6e\x00\x9b\x00\x1d\x00\x32\x00\x95\x00\x88\x00\x89\x00\x8a\x00\x93\x00\x88\x00\x89\x00\x8a\x00\x2c\x00\x2d\x00\x7b\x00\x57\x00\x12\x00\x93\x00\x3d\x00\x2c\x00\x2d\x00\x69\x00\x93\x00\x01\x00\x9b\x00\x03\x00\x87\x00\x88\x00\x9b\x00\x01\x00\x02\x00\x88\x00\x89\x00\x8a\x00\x93\x00\x0d\x00\x6c\x00\x93\x00\x88\x00\x89\x00\x8a\x00\x0d\x00\x7b\x00\x88\x00\x89\x00\x8a\x00\x18\x00\x7a\x00\x5e\x00\x0e\x00\x9b\x00\x93\x00\x06\x00\x7f\x00\x87\x00\x88\x00\x82\x00\x9b\x00\x84\x00\x18\x00\x86\x00\x88\x00\x9b\x00\x03\x00\x04\x00\x8b\x00\x8c\x00\x8d\x00\x72\x00\x8f\x00\x01\x00\x91\x00\x1a\x00\x93\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x8a\x00\x0d\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x01\x00\x1d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x94\x00\x26\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x37\x00\x00\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x8d\x00\x79\x00\x8f\x00\x7b\x00\x91\x00\x7d\x00\x95\x00\x45\x00\x80\x00\x0f\x00\x82\x00\x61\x00\x12\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0e\x00\x81\x00\x7b\x00\x8f\x00\x79\x00\x05\x00\x7b\x00\x07\x00\x7d\x00\x9a\x00\x18\x00\x80\x00\x8c\x00\x82\x00\x87\x00\x88\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x89\x00\x8a\x00\x4d\x00\x4e\x00\x4f\x00\x60\x00\x61\x00\x2c\x00\x2d\x00\x0e\x00\x03\x00\x04\x00\x0e\x00\x01\x00\x02\x00\x03\x00\x04\x00\x9a\x00\x5d\x00\x18\x00\x5f\x00\x0e\x00\x18\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x95\x00\x7b\x00\x03\x00\x04\x00\x01\x00\x88\x00\x03\x00\x04\x00\x0e\x00\x73\x00\x74\x00\x0e\x00\x0d\x00\x87\x00\x88\x00\x79\x00\x0d\x00\x7b\x00\x18\x00\x7d\x00\x18\x00\x18\x00\x13\x00\x1b\x00\x01\x00\x02\x00\x03\x00\x04\x00\x20\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x18\x00\x4d\x00\x4e\x00\x4f\x00\x0e\x00\x1d\x00\x93\x00\x2d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x18\x00\x18\x00\x88\x00\x5d\x00\x8a\x00\x5f\x00\x1d\x00\x93\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x05\x00\x06\x00\x95\x00\x73\x00\x74\x00\x6f\x00\x70\x00\x71\x00\x0f\x00\x79\x00\x11\x00\x7b\x00\x26\x00\x7d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x1a\x00\x03\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x39\x00\x4d\x00\x4e\x00\x4f\x00\x2c\x00\x2d\x00\x93\x00\x18\x00\x01\x00\x11\x00\x03\x00\x25\x00\x1d\x00\x0e\x00\x0f\x00\x10\x00\x18\x00\x5d\x00\x23\x00\x5f\x00\x0d\x00\x0e\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x7f\x00\x11\x00\x39\x00\x82\x00\x1b\x00\x84\x00\x96\x00\x86\x00\x18\x00\x73\x00\x74\x00\x94\x00\x8b\x00\x8c\x00\x8d\x00\x79\x00\x8f\x00\x7b\x00\x91\x00\x7d\x00\x03\x00\x04\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0d\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x24\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x66\x00\x67\x00\x68\x00\x69\x00\x02\x00\x03\x00\x04\x00\x5d\x00\x01\x00\x5f\x00\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\x0e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x13\x00\x03\x00\x04\x00\x73\x00\x74\x00\x18\x00\x01\x00\x02\x00\x25\x00\x79\x00\x40\x00\x7b\x00\x95\x00\x7d\x00\x8f\x00\x22\x00\x03\x00\x04\x00\x0d\x00\x02\x00\x03\x00\x04\x00\x11\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x3c\x00\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x01\x00\x93\x00\x03\x00\x03\x00\x04\x00\x93\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0d\x00\x0e\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x03\x00\x04\x00\x03\x00\x04\x00\x1b\x00\x05\x00\x06\x00\x93\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3b\x00\x79\x00\x96\x00\x7b\x00\x2f\x00\x7d\x00\x03\x00\x04\x00\x48\x00\x49\x00\x03\x00\x04\x00\x0c\x00\x16\x00\x96\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x07\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x95\x00\x93\x00\x96\x00\x22\x00\x43\x00\x22\x00\x22\x00\x20\x00\x01\x00\x20\x00\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\x20\x00\x22\x00\x0f\x00\x0f\x00\x21\x00\x13\x00\x22\x00\x01\x00\x38\x00\x03\x00\x04\x00\x0e\x00\x22\x00\x11\x00\x79\x00\x0f\x00\x7b\x00\x10\x00\x7d\x00\x0d\x00\x22\x00\x40\x00\x21\x00\x25\x00\x1e\x00\x13\x00\x38\x00\x34\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x20\x00\x4d\x00\x4e\x00\x4f\x00\x20\x00\x0e\x00\x43\x00\x0f\x00\x01\x00\x0d\x00\x03\x00\x2d\x00\x18\x00\x0e\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0d\x00\x0f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x10\x00\x22\x00\x0f\x00\x11\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x10\x00\x7e\x00\x41\x00\x38\x00\x81\x00\x79\x00\x83\x00\x7b\x00\x10\x00\x7d\x00\x0e\x00\x41\x00\x4c\x00\x40\x00\x38\x00\x8c\x00\x38\x00\x0f\x00\x8f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x0f\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0e\x00\x1d\x00\x03\x00\x10\x00\x10\x00\x0d\x00\x11\x00\x1d\x00\x01\x00\x02\x00\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\x11\x00\x34\x00\x0f\x00\x01\x00\x10\x00\x03\x00\x04\x00\x21\x00\x38\x00\x0e\x00\x18\x00\x01\x00\x02\x00\x0e\x00\x79\x00\x0d\x00\x7b\x00\x1a\x00\x7d\x00\x1a\x00\x1e\x00\x13\x00\x10\x00\x0d\x00\x1b\x00\x18\x00\x11\x00\x11\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x21\x00\x4d\x00\x4e\x00\x4f\x00\x0c\x00\x0e\x00\x32\x00\x2d\x00\x3e\x00\x01\x00\x14\x00\x03\x00\x10\x00\x44\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x10\x00\x0d\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0c\x00\x11\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x0f\x00\x79\x00\x18\x00\x7b\x00\x0e\x00\x7d\x00\x18\x00\x10\x00\x10\x00\x41\x00\x38\x00\x22\x00\x0e\x00\x1a\x00\x1e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x10\x00\x4d\x00\x4e\x00\x4f\x00\x1a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x1a\x00\x18\x00\x0e\x00\x0e\x00\x20\x00\x0e\x00\x0e\x00\x20\x00\x43\x00\x0e\x00\x0e\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x0e\x00\x18\x00\x4d\x00\x4e\x00\x4f\x00\x14\x00\x0e\x00\x17\x00\x79\x00\x10\x00\x7b\x00\x23\x00\x7d\x00\x1e\x00\x40\x00\x01\x00\x01\x00\x25\x00\x5d\x00\x43\x00\x5f\x00\x43\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x1e\x00\x4d\x00\x4e\x00\x4f\x00\x1e\x00\x0f\x00\x03\x00\x10\x00\x54\x00\x55\x00\x47\x00\x0d\x00\x79\x00\x10\x00\x7b\x00\x09\x00\x7d\x00\x5d\x00\x10\x00\x0e\x00\x0d\x00\x43\x00\x0d\x00\x18\x00\x4d\x00\x11\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\x3e\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x01\x00\x02\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x5d\x00\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x5d\x00\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x52\x00\x53\x00\x01\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\x1a\x00\xff\xff\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x26\x00\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\x1a\x00\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x26\x00\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x1a\x00\xff\xff\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\x21\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x1a\x00\xff\xff\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x1a\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x1a\x00\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x03\x00\x04\x00\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x92\x00\xff\xff\x82\x00\xff\xff\x84\x00\x79\x00\x86\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\x18\x00\x19\x00\x1a\x00\xff\xff\x1c\x00\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x47\x00\x33\x00\x49\x00\x4a\x00\x36\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\x79\x00\x19\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\x92\x00\xff\xff\x33\x00\xff\xff\x4a\x00\x36\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\x79\x00\x19\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\x92\x00\xff\xff\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\xff\xff\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\x4b\x00\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\x7f\x00\xff\xff\xff\xff\x82\x00\x1f\x00\x84\x00\x79\x00\x86\x00\x7b\x00\x24\x00\x7d\x00\xff\xff\x8b\x00\x8c\x00\x8d\x00\x2a\x00\x8f\x00\x2c\x00\x91\x00\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\x4b\x00\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\x4b\x00\x4c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\x47\x00\xff\xff\x49\x00\x4a\x00\x1f\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\x3d\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\x4c\x00\x79\x00\x5d\x00\x7b\x00\xff\xff\x7d\x00\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x92\x00\xff\xff\x77\x00\x78\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\x01\x00\xff\xff\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x77\x00\x78\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\x22\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\x01\x00\xff\xff\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\x78\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\x01\x00\xff\xff\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\x01\x00\xff\xff\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\x73\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\x01\x00\xff\xff\x03\x00\x04\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\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\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\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\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\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\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\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\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\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\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\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\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\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\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\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\x79\x00\xff\xff\x7b\x00\x47\x00\x7d\x00\x49\x00\x4a\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\x49\x00\x4a\x00\x92\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\xff\xff\x47\x00\xff\xff\x49\x00\x4a\x00\x5d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x92\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x79\x00\xff\xff\x7b\x00\x0d\x00\x7d\x00\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\x92\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\x4a\x00\x5d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x33\x00\x7d\x00\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x79\x00\xff\xff\x7b\x00\xff\xff\x7d\x00\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x92\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\x18\x00\x19\x00\x1a\x00\xff\xff\x1c\x00\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\x79\x00\xff\xff\x7b\x00\x24\x00\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\x01\x00\x24\x00\x03\x00\x04\x00\xff\xff\x06\x00\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\x13\x00\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x2d\x00\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\xff\xff\x33\x00\xff\xff\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x42\x00\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\xff\xff\x33\x00\xff\xff\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x42\x00\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\xff\xff\x33\x00\xff\xff\x35\x00\xff\xff\x37\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x42\x00\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\xff\xff\x33\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x42\x00\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\xff\xff\x33\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x42\x00\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x24\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\x26\x00\x27\x00\x28\x00\x29\x00\x33\x00\xff\xff\x2c\x00\x2d\x00\xff\xff\xff\xff\x39\x00\x3a\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\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\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\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\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\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\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\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\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\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\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\x24\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x13\x00\xff\xff\x15\x00\x16\x00\x33\x00\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\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\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x22\x00\xff\xff\x24\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\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\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x01\x00\xff\xff\x03\x00\x04\x00\x13\x00\x06\x00\x15\x00\x16\x00\xff\xff\xff\xff\x19\x00\xff\xff\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\x24\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\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\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\x1d\x02\xc1\x00\x05\x00\x03\x00\x79\x02\x23\x00\x24\x00\x25\x00\x46\x01\xd2\x00\x1e\x02\x1f\x02\x67\x00\xc7\x00\x7a\x01\x13\x00\x14\x00\x16\x02\x31\x02\x63\x00\x43\x01\x44\x01\x3d\x01\xe1\x00\xc1\x01\xc2\x01\x15\x00\x45\x01\xcd\x01\x15\x00\x16\x00\x17\x00\x18\x00\x64\x00\x17\x00\x18\x00\x19\x00\x09\x01\x1a\x00\x19\x00\x1b\x00\x1a\x00\x63\x01\x1b\x00\xd9\xff\x15\x00\x15\x00\x3a\x02\x0a\x01\x0b\x01\x6c\x00\x6d\x00\x65\x00\x15\x00\x0c\x01\x10\x02\x19\x00\x1a\x00\x1a\x00\x50\x02\x1b\x00\x29\x01\x91\x01\x92\x01\x70\x00\x1a\x00\xff\x00\x88\x02\x1c\x00\x8a\x02\x47\x01\x1c\x00\x7b\x02\xca\x00\x08\x00\xc9\x00\xca\x00\x0d\x00\x97\x01\x6f\x01\xac\x02\x0d\x00\x97\x01\x27\x01\x8f\x02\x0d\x00\x64\x02\x1c\x00\x1c\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x78\x01\x6f\x00\x1c\x00\xca\x01\x2a\x00\x0d\x00\x98\x02\x96\x02\xa9\x01\xc3\x01\xb7\x00\x68\x00\xd2\x01\x0d\x00\x98\x02\x20\x02\xc3\x01\x02\x01\xd3\x00\x3a\x00\x17\x02\xd4\x00\x20\x02\xd5\x00\x94\x02\x69\x00\x2a\x01\x09\x00\x26\x00\xcd\x00\x3b\x00\x21\x02\xd6\x00\x2a\x01\x26\x00\xd7\x00\xcd\x00\x00\x01\x21\x02\x9b\x02\x27\x00\x28\x00\x29\x00\x2a\x00\x22\x02\x00\x01\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x01\x22\x02\x70\x00\x71\x00\x2a\x00\x06\x00\x06\x00\x04\x00\x2b\x00\x1d\x00\x46\x01\x49\x02\x1d\x00\x77\x02\x2b\x00\x00\x01\x2a\x01\x3c\x00\x98\x01\x3d\x00\x3e\x00\x72\x00\x99\x01\x3f\x00\x40\x00\x41\x00\x98\x01\xa1\xfe\x93\x01\x66\x00\x10\x02\x50\x02\xcb\x00\x6c\x02\xcc\x00\xcb\x00\x93\x01\xcc\x00\xcb\x00\x00\x01\xcc\x00\xda\x01\x00\x01\x70\x00\x71\x00\x2a\x00\xcd\x00\x65\x02\xce\x00\xcd\x00\x7a\x00\xce\x00\xcd\x00\x95\x02\xce\x00\x1b\x01\x0b\x01\x6c\x00\x6d\x00\x49\x02\x65\x02\x1c\x01\x72\x00\x36\x02\x0b\x01\x6c\x00\x6d\x00\x42\x00\x66\x02\x43\x00\x48\x02\x44\x00\x51\x02\x45\x02\x59\x02\x6a\x00\x6b\x00\x6c\x00\x6d\x00\xd9\x00\x6f\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x1b\x01\x0b\x01\x6c\x00\x6d\x00\xda\x01\x00\x01\x1c\x01\x46\x00\x33\x02\xf9\x01\xa0\x01\x1d\x01\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x46\x02\x7b\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x75\x00\x6f\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x7e\x00\x6f\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x7f\x00\x6f\x00\x89\x01\x55\x02\x76\x02\x1d\x01\x7e\x02\x0b\x01\x6c\x00\x6d\x00\x1a\x02\x0b\x01\x6c\x00\x6d\x00\xfb\x01\x51\x01\xac\x01\x0b\x01\x6c\x00\x6d\x00\x85\x02\x82\x02\x6d\x00\x7f\x02\x9c\x02\x9d\x02\xad\x01\x0b\x01\x6c\x00\x6d\x00\x6f\x01\x70\x00\x71\x00\x2a\x00\x49\x02\x6c\x01\x8e\x01\xd0\x01\xd1\x01\x70\x00\x71\x00\x2a\x00\x26\x01\x0b\x01\x6c\x00\x6d\x00\x28\x01\x0b\x01\x6c\x00\x6d\x00\x72\x00\x70\x00\x71\x00\x2a\x00\x2b\x01\x0b\x01\x6c\x00\x6d\x00\x72\x00\x3e\x02\xa1\x02\x70\x00\x71\x00\x2a\x00\xda\x01\x00\x01\x19\x01\x0b\x01\x6c\x00\x6d\x00\x72\x00\xd8\x01\x4e\x02\x70\x00\x71\x00\x2a\x00\x39\x02\x27\x02\x6c\x00\x6d\x00\x72\x00\x70\x00\x71\x00\x2a\x00\x22\x01\x6d\x00\x3a\x02\x70\x00\x71\x00\x2a\x00\x28\x02\x4f\x02\x72\x00\x70\x00\x71\x00\x2a\x00\xd2\x01\xa2\x02\xf9\x01\xd9\x01\x72\x00\x00\x02\x01\x02\x70\x00\x71\x00\x2a\x00\x72\x00\x70\x00\x71\x00\x2a\x00\xbb\x01\x6d\x00\x72\x00\x70\x00\x71\x00\x2a\x00\x70\x00\x71\x00\x2a\x00\x0d\x00\xa9\x01\xbc\x01\x72\x00\x70\x00\x71\x00\x2a\x00\x72\x00\x89\x01\x6c\x01\xda\x01\x00\x01\x67\x01\x72\x00\x25\x02\x6d\x00\x72\x00\xae\x01\x6c\x00\x6d\x00\x70\x00\x71\x00\x2a\x00\x72\x00\x70\x00\x71\x00\x2a\x00\xaf\x01\xb0\x01\x29\x02\xb1\x01\x42\x02\x70\x00\x71\x00\x2a\x00\x0d\x00\x64\x02\xd9\x01\xaa\x02\x72\x00\x26\x02\x6d\x00\x8e\x01\x72\x00\x70\x00\x71\x00\x2a\x00\xb7\x01\x6d\x00\x2a\x02\x2b\x02\x72\x00\x22\x01\x6d\x00\x70\x00\x71\x00\x2a\x00\x29\x02\xaa\x01\xdc\x01\x70\x00\x71\x00\x2a\x00\x72\x00\x0d\x00\xa9\x01\x68\x02\xda\x01\x00\x01\x3b\x02\x3c\x02\x3d\x02\xab\x02\x72\x00\x91\x02\x92\x02\x12\x00\xb9\x00\x81\x02\x72\x00\x0d\x00\x4d\x01\xd0\x01\xd1\x01\xb9\x00\xa3\x00\x70\x00\x71\x00\x2a\x00\x9c\x01\xa3\x02\xa4\x02\xa5\x02\x59\x02\x13\x00\xae\x00\xaf\x00\xb0\x00\x3b\x02\x3c\x02\x3d\x02\xb2\x01\x12\x00\x91\x02\x92\x02\x72\x00\x4e\x01\x9d\x01\x44\x02\x70\x00\x71\x00\x2a\x00\xa2\x02\x70\x00\x71\x00\xb3\x01\xbc\x00\xbd\x00\x2c\x02\x99\x01\x13\x00\x4f\x02\xab\x01\xbc\x00\xbd\x00\x53\x02\xa6\x02\x2d\x00\x72\x00\x2f\x00\x27\x00\x28\x00\x72\x00\x2d\x00\x2e\x00\x70\x00\x71\x00\x2a\x00\xfd\x01\xdc\x00\x66\x02\x93\x02\x70\x00\x71\x00\x2a\x00\x31\x00\x2c\x02\x70\x00\x71\x00\x2a\x00\x32\x00\xda\x00\x7a\x00\x2e\x01\x72\x00\x3e\x02\xa3\x00\xb1\x00\x27\x00\x28\x00\xb2\x00\x72\x00\xb3\x00\xf2\x00\xb4\x00\xcd\x00\x72\x00\x0d\x00\x4d\x01\x9a\x00\x9b\x00\xb5\x00\xdc\x01\x9e\x00\xa2\x01\xb6\x00\xbb\x01\xb7\x00\x92\x00\x81\x00\x82\x00\xe2\x01\x84\x00\x3d\x00\x3e\x00\x69\x01\xa3\x01\x3f\x00\x40\x00\x41\x00\x94\x00\x95\x00\x2d\x00\x4f\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xdd\x01\xc5\x01\xe3\x01\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x92\x00\x81\x00\x82\x00\x93\x00\x84\x00\x3d\x00\x3e\x00\x79\x00\x12\x00\x3f\x00\x40\x00\x41\x00\x94\x00\x95\x00\x9c\x00\x42\x00\x9e\x00\x85\x00\xb6\x00\x44\x00\xbf\x01\x7a\x00\x96\x00\x8a\x02\x97\x00\x76\x01\x13\x00\x98\x00\x99\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\x46\x00\xca\x01\x2a\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2f\x01\xb9\x01\xe6\x00\xc6\x01\x42\x00\xb9\x00\x85\x00\xa4\x00\x44\x00\x78\x02\x30\x01\x96\x00\xd6\x00\x97\x00\x27\x00\x28\x00\x98\x00\x99\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\x46\x00\x0d\x01\x81\x00\x82\x00\x03\x02\x84\x00\x3d\x00\x3e\x00\xca\x01\x2a\x00\x3f\x00\x40\x00\x41\x00\xe4\x00\xe5\x00\xbc\x00\xbd\x00\x31\x01\x2f\x00\x30\x00\x6e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\xcb\x01\x04\x02\x32\x01\xc8\x01\x19\x02\x6f\x01\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\xce\x01\xe6\x00\x2f\x00\x30\x00\x2d\x00\xd7\x01\x2f\x00\x30\x00\xef\x00\x8c\x02\x07\x02\xf1\x00\xcd\x01\x27\x00\x28\x00\x42\x00\x74\x00\x85\x00\xf0\x00\x44\x00\xf9\x00\xf2\x00\x75\x00\xfa\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xfb\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x03\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\xbe\x00\x3f\x00\x40\x00\x41\x00\xf5\x00\x31\x02\xe1\x01\x81\x02\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xf6\x00\xbe\x00\x68\x01\x04\x02\x69\x01\x3e\x01\xbf\x00\x7b\x01\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xb9\x00\xa3\x00\x8f\x01\x4a\x02\x07\x02\xa3\x02\xa4\x02\xa5\x02\x8a\x02\x42\x00\x8c\x02\x85\x00\xa0\x01\x44\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2d\x00\xd9\x00\x2f\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x03\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x9a\x01\x3f\x00\x40\x00\x41\x00\xbc\x00\xbd\x00\xab\x02\xac\xff\x2d\x00\x2f\x02\x2f\x00\xa3\x01\xac\xff\xa5\x01\xa6\x01\xa7\x01\x30\x02\x04\x02\xac\x00\x10\x01\xd0\x00\x7d\x02\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\xb1\x00\x62\x01\xb6\x01\xb2\x00\x7e\x02\x04\x01\xa4\x01\xb4\x00\x63\x01\x06\x02\x07\x02\x33\x01\x9a\x00\x9b\x00\xb5\x00\x42\x00\x9e\x00\x85\x00\xb6\x00\x44\x00\x14\x02\x15\x02\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x35\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x03\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x37\x01\x3f\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xf6\x01\xf7\x01\x84\x01\x85\x01\x0c\x00\x0d\x00\x0e\x00\x04\x02\x2d\x00\x13\x01\x2f\x00\x30\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x1f\x01\xdd\x00\x28\x00\xde\x00\x2a\x00\x75\x00\x23\x02\x24\x02\x0b\x02\x07\x02\xa7\x00\x2d\x00\x2e\x00\x3a\x01\x42\x00\xe2\x00\x85\x00\x3c\x01\x44\x00\x67\x01\x20\x01\xd5\x01\xd6\x01\x31\x00\x0f\x00\x0d\x00\x0e\x00\x2e\x02\x27\x00\x28\x00\x45\x00\x2a\x00\xa0\x02\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x17\x01\x3f\x00\x40\x00\x41\x00\xe9\x00\x28\x00\xde\x00\x2a\x00\x2d\x00\x40\x01\x2f\x00\x5f\x00\x60\x00\x5b\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xd0\x00\xd1\x00\xb4\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x61\x00\x62\x00\x2f\x00\x30\x00\xd2\x00\x20\x00\x21\x00\x03\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x06\x01\x42\x00\x16\x01\x85\x00\x24\x01\x44\x00\x0b\x00\x0c\x00\x39\x01\x3a\x01\x0b\x00\x0c\x00\x76\x00\xbf\x00\xc2\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x74\x02\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\xc4\x00\x3f\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x10\x00\x02\x00\x09\x00\xb4\x02\xe4\x00\xb2\x02\xaf\x02\xb0\x02\x2d\x00\xaa\x02\x2f\x00\x30\x00\xa8\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\xa1\xfe\xa8\x02\x1f\x00\x1f\x00\x9a\x02\x75\x00\xa0\x02\x2d\x00\x10\x02\x2f\x00\x30\x00\x84\x02\x4f\x02\x91\x02\x42\x00\x1f\x00\x85\x00\x98\x02\x44\x00\x74\x00\x24\x01\x5d\x02\x68\x02\x92\xff\x74\x02\x75\x00\x0f\x02\x73\x02\x27\x00\x28\x00\x45\x00\x2a\x00\xc9\x01\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x76\x02\x3f\x00\x40\x00\x41\x00\xa1\xfe\x7b\x02\xe4\x00\x1f\x00\x2d\x00\x33\x02\x2f\x00\xb6\x01\x35\x02\x36\x02\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xdc\x00\x1f\x00\x8e\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x48\x02\x40\x02\x4c\x02\x4d\x02\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x53\x02\xd3\x00\x58\x02\x59\x02\xd4\x00\x42\x00\x71\x01\x85\x00\x5b\x02\x44\x00\xff\x01\x0d\x02\x0e\x02\x03\x02\x0f\x02\xd6\x00\x10\x02\x1f\x00\xd7\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xd3\x01\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x1a\x02\x3f\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x1c\x02\x1d\x02\x2f\x00\xd4\xfe\xb9\x01\xc5\x01\xc1\x01\xc8\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x63\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x31\x00\xd0\x01\xd5\x01\x1f\x00\x2d\x00\xdf\x01\x2f\x00\x30\x00\xef\x01\x51\x01\x71\x01\x32\x00\x2d\x00\x2e\x00\x75\x01\x42\x00\x74\x00\x85\x00\x73\x01\x44\x00\x74\x01\x76\x01\x75\x00\x02\x01\x31\x00\x7a\x01\x7d\x01\x91\x01\xe8\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x8e\x01\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x9f\x01\x3f\x00\x40\x00\x41\x00\x3c\x01\x2d\x01\x9d\x01\xbe\x01\x33\x00\x2d\x00\x33\x01\x2f\x00\x35\x01\x37\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x02\x01\xd0\x00\x40\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3c\x01\x40\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x42\x01\x42\x00\x30\x01\x85\x00\x43\x01\x44\x00\x32\x01\x02\x01\x49\x01\x4d\x01\x51\x01\x52\x01\x5f\x01\x60\x01\x61\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x94\x01\x81\x00\x82\x00\x61\x02\x84\x00\x3d\x00\x3e\x00\x46\x00\x02\x01\x3f\x00\x40\x00\x41\x00\x66\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x67\x01\x6b\x01\x6c\x01\xc9\x00\xe0\x00\xa9\xfe\xab\xfe\xa1\xfe\xe4\x00\xae\xfe\xeb\x00\x43\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\xec\x00\xf7\x00\x3f\x00\x40\x00\x41\x00\xf8\x00\xfc\x00\xfd\x00\x42\x00\x02\x01\x85\x00\xac\x00\x44\x00\x09\x01\x06\x01\x15\x01\x16\x01\x21\x01\x0f\x01\x08\x01\x37\x02\x19\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x52\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x22\x01\x3f\x00\x40\x00\x41\x00\x26\x01\x1f\x00\x2f\x00\x7d\x00\x53\x01\x54\x01\x78\x00\x7e\x00\x42\x00\xad\x00\x85\x00\xc1\x00\x44\x00\x55\x01\x08\x00\xc7\x00\xc4\x00\x3a\x00\x23\x00\xc6\x00\xff\xff\x20\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x09\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x00\xc8\x01\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x52\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x01\x2d\x00\x2e\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x55\x01\x00\x00\x00\x00\x00\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x00\x9d\x01\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x0f\x01\x00\x00\x3e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x00\x10\x01\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x0d\x01\x81\x00\x82\x00\x0e\x01\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x0f\x01\x00\x00\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xa0\x02\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x8e\x00\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x8f\x00\x90\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x74\x02\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x5b\x02\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf1\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf2\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\xba\x00\x00\x00\xa9\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\xea\x01\xeb\x01\xec\x01\xed\x01\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf3\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf4\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\xba\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\xea\x01\xeb\x01\xec\x01\xed\x01\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf5\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xfc\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\xba\x00\x00\x00\xa9\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x1f\xff\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x11\x02\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xc9\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\xba\x00\x00\x00\xa9\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xd3\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xdb\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\xba\x00\x00\x00\xa9\x00\x00\x00\xbb\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xdf\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xef\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\xba\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbd\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xf0\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x77\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\xb3\x00\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x8e\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x94\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x04\x01\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x58\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\xf2\x00\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x59\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x5a\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\xe8\x01\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x5d\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xdc\x00\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\xb3\x00\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x02\x01\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x04\x01\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x8c\x00\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x8d\x00\x81\x00\x82\x00\x83\x00\x84\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x2f\x00\x30\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\xb5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xb2\x02\x82\x00\xed\x00\x84\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\xb6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xb0\x02\x82\x00\xed\x00\x84\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x85\x02\x82\x00\xed\x00\x84\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x64\x01\x82\x00\xed\x00\x84\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\xe0\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\xec\x00\x82\x00\xed\x00\x84\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x46\x00\x00\x00\xb2\x00\x00\x00\xf2\x00\x42\x00\xb4\x00\x85\x00\x00\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x00\x00\x9e\x00\x00\x00\xb6\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\xa7\x00\x50\x00\xa8\x00\x00\x00\xa9\x00\x00\x00\x00\x00\xe5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\xaa\x00\xab\x00\x8a\x01\x00\x00\x00\x00\x00\x00\x3c\x00\x8b\x01\x3d\x00\x3e\x00\xe6\x01\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\xe7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x00\x00\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x09\x02\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x42\x00\x50\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\xe5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x00\x00\x00\x00\x46\x00\x00\x00\x8b\x01\x00\x00\x8a\x00\xe6\x01\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x0a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x0b\x02\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x60\x02\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x42\x00\x50\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x88\x01\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x00\x00\x00\x00\x46\x00\x00\x00\x8b\x01\x00\x00\x00\x00\x8c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x02\x00\x00\x56\x02\x4b\x01\xfe\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x0b\x02\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\xb1\x00\x00\x00\x00\x00\xb2\x00\xe5\x01\x04\x01\x42\x00\xb4\x00\x85\x00\x51\x00\x44\x00\x00\x00\x9a\x00\x9b\x00\xb5\x00\x89\x01\x9e\x00\x52\x00\xb6\x00\x8a\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x8b\x01\x00\x00\x00\x00\xe6\x01\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\xe7\x01\x00\x00\xff\x01\x4b\x01\xfe\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x00\x00\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x01\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x8b\x01\x00\x00\x00\x00\x8c\x01\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x71\x02\x00\x00\x4a\x01\x4b\x01\xfe\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x0b\x02\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x01\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x8b\x01\x00\x00\x00\x00\xe6\x01\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\xe7\x01\x00\x00\x00\x00\x95\x01\xfe\x00\x40\x00\x41\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x00\x00\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x01\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x8b\x01\x00\x00\x00\x00\x8c\x01\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x71\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x0b\x02\x8e\x01\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x12\x02\x00\x00\x3d\x00\x3e\x00\x88\x01\x00\x00\x3f\x00\x40\x00\x41\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x52\x00\x00\x00\x8a\x01\x00\x00\x00\x00\xad\x02\x00\x00\x8b\x01\x00\x00\x00\x00\x8c\x01\x00\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x8d\x01\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x8e\x01\x42\x00\x5e\x02\x85\x00\x00\x00\x44\x00\x00\x00\x6c\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x02\x46\x00\x00\x00\x6e\x02\x6f\x02\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x2d\x00\x00\x00\x2f\x00\x30\x00\x6c\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x6d\x02\x00\x00\x00\x00\x71\x02\x6f\x02\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x24\x01\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x8c\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x2d\x00\x00\x00\x2f\x00\x30\x00\x6c\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x1b\x01\x00\x00\x00\x00\x6d\x02\x00\x00\x00\x00\x00\x00\x9e\x02\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x4a\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x2d\x00\x00\x00\x2f\x00\x30\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x06\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x0b\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x2d\x00\x00\x00\x2f\x00\x30\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x69\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x5d\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x5e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x07\x02\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x2d\x00\x00\x00\x2f\x00\x30\x00\xb4\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x02\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x01\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\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\x42\x00\x00\x00\x85\x00\x7d\x01\x44\x00\x3d\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x12\x02\x00\x00\x3d\x00\x3e\x00\x46\x00\x00\x00\x3f\x00\x40\x00\x41\x00\x7e\x01\x7f\x01\x80\x01\x81\x01\x82\x01\x83\x01\x84\x01\x85\x01\x00\x00\x12\x02\x00\x00\x3d\x00\x3e\x00\x9b\x02\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x8d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x46\x00\x00\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x42\x00\x00\x00\x85\x00\x31\x00\x44\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x12\x02\x00\x00\x3d\x00\x3e\x00\x00\x00\x46\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x49\x01\xe0\x00\x3e\x00\x13\x02\x00\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x88\x01\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x89\x01\x00\x00\x00\x00\x00\x00\xfa\x01\x00\x00\x42\x00\x00\x00\x85\x00\xfb\x01\x44\x00\x00\x00\x8c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x01\x27\x00\x28\x00\x45\x00\x2a\x00\x42\x00\x00\x00\x85\x00\x00\x00\x44\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x8e\x01\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\xa7\x00\x50\x00\xa8\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\xab\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\xfd\x00\xfe\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x12\x01\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x13\x01\x00\x00\xe0\x01\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x5d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x89\x00\x00\x00\xe7\x01\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x12\x01\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x13\x01\x00\x00\xe8\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x92\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x89\x00\x00\x00\xad\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x89\x00\x00\x00\x8b\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x57\x01\x00\x00\xad\x00\x40\x00\x41\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x42\x00\x00\x00\x85\x00\x51\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x27\x00\x28\x00\x45\x00\x2a\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x51\x00\x2f\x00\x30\x00\x00\x00\x80\xff\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x74\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x75\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8a\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xbf\x01\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x55\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x55\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xb9\x00\xa3\x00\xa4\x00\xa5\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\xa1\xfe\xa9\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x1f\xff\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xea\x01\xeb\x01\xec\x01\xed\x01\xa1\xfe\x00\x00\xbc\x00\xbd\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\xa1\xfe\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\xa1\xfe\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x51\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x57\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x02\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x56\x02\x00\x00\x51\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x01\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x2d\x00\x00\x00\x2f\x00\x30\x00\x4d\x00\xa3\x00\x4e\x00\x4f\x00\x00\x00\x00\x00\x50\x00\x00\x00\x74\x00\x1f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x51\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\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\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 = Happy_Data_Array.array (1, 360) [+	(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),+	(139 , happyReduce_139),+	(140 , happyReduce_140),+	(141 , happyReduce_141),+	(142 , happyReduce_142),+	(143 , happyReduce_143),+	(144 , happyReduce_144),+	(145 , happyReduce_145),+	(146 , happyReduce_146),+	(147 , happyReduce_147),+	(148 , happyReduce_148),+	(149 , happyReduce_149),+	(150 , happyReduce_150),+	(151 , happyReduce_151),+	(152 , happyReduce_152),+	(153 , happyReduce_153),+	(154 , happyReduce_154),+	(155 , happyReduce_155),+	(156 , happyReduce_156),+	(157 , happyReduce_157),+	(158 , happyReduce_158),+	(159 , happyReduce_159),+	(160 , happyReduce_160),+	(161 , happyReduce_161),+	(162 , happyReduce_162),+	(163 , happyReduce_163),+	(164 , happyReduce_164),+	(165 , happyReduce_165),+	(166 , happyReduce_166),+	(167 , happyReduce_167),+	(168 , happyReduce_168),+	(169 , happyReduce_169),+	(170 , happyReduce_170),+	(171 , happyReduce_171),+	(172 , happyReduce_172),+	(173 , happyReduce_173),+	(174 , happyReduce_174),+	(175 , happyReduce_175),+	(176 , happyReduce_176),+	(177 , happyReduce_177),+	(178 , happyReduce_178),+	(179 , happyReduce_179),+	(180 , happyReduce_180),+	(181 , happyReduce_181),+	(182 , happyReduce_182),+	(183 , happyReduce_183),+	(184 , happyReduce_184),+	(185 , happyReduce_185),+	(186 , happyReduce_186),+	(187 , happyReduce_187),+	(188 , happyReduce_188),+	(189 , happyReduce_189),+	(190 , happyReduce_190),+	(191 , happyReduce_191),+	(192 , happyReduce_192),+	(193 , happyReduce_193),+	(194 , happyReduce_194),+	(195 , happyReduce_195),+	(196 , happyReduce_196),+	(197 , happyReduce_197),+	(198 , happyReduce_198),+	(199 , happyReduce_199),+	(200 , happyReduce_200),+	(201 , happyReduce_201),+	(202 , happyReduce_202),+	(203 , happyReduce_203),+	(204 , happyReduce_204),+	(205 , happyReduce_205),+	(206 , happyReduce_206),+	(207 , happyReduce_207),+	(208 , happyReduce_208),+	(209 , happyReduce_209),+	(210 , happyReduce_210),+	(211 , happyReduce_211),+	(212 , happyReduce_212),+	(213 , happyReduce_213),+	(214 , happyReduce_214),+	(215 , happyReduce_215),+	(216 , happyReduce_216),+	(217 , happyReduce_217),+	(218 , happyReduce_218),+	(219 , happyReduce_219),+	(220 , happyReduce_220),+	(221 , happyReduce_221),+	(222 , happyReduce_222),+	(223 , happyReduce_223),+	(224 , happyReduce_224),+	(225 , happyReduce_225),+	(226 , happyReduce_226),+	(227 , happyReduce_227),+	(228 , happyReduce_228),+	(229 , happyReduce_229),+	(230 , happyReduce_230),+	(231 , happyReduce_231),+	(232 , happyReduce_232),+	(233 , happyReduce_233),+	(234 , happyReduce_234),+	(235 , happyReduce_235),+	(236 , happyReduce_236),+	(237 , happyReduce_237),+	(238 , happyReduce_238),+	(239 , happyReduce_239),+	(240 , happyReduce_240),+	(241 , happyReduce_241),+	(242 , happyReduce_242),+	(243 , happyReduce_243),+	(244 , happyReduce_244),+	(245 , happyReduce_245),+	(246 , happyReduce_246),+	(247 , happyReduce_247),+	(248 , happyReduce_248),+	(249 , happyReduce_249),+	(250 , happyReduce_250),+	(251 , happyReduce_251),+	(252 , happyReduce_252),+	(253 , happyReduce_253),+	(254 , happyReduce_254),+	(255 , happyReduce_255),+	(256 , happyReduce_256),+	(257 , happyReduce_257),+	(258 , happyReduce_258),+	(259 , happyReduce_259),+	(260 , happyReduce_260),+	(261 , happyReduce_261),+	(262 , happyReduce_262),+	(263 , happyReduce_263),+	(264 , happyReduce_264),+	(265 , happyReduce_265),+	(266 , happyReduce_266),+	(267 , happyReduce_267),+	(268 , happyReduce_268),+	(269 , happyReduce_269),+	(270 , happyReduce_270),+	(271 , happyReduce_271),+	(272 , happyReduce_272),+	(273 , happyReduce_273),+	(274 , happyReduce_274),+	(275 , happyReduce_275),+	(276 , happyReduce_276),+	(277 , happyReduce_277),+	(278 , happyReduce_278),+	(279 , happyReduce_279),+	(280 , happyReduce_280),+	(281 , happyReduce_281),+	(282 , happyReduce_282),+	(283 , happyReduce_283),+	(284 , happyReduce_284),+	(285 , happyReduce_285),+	(286 , happyReduce_286),+	(287 , happyReduce_287),+	(288 , happyReduce_288),+	(289 , happyReduce_289),+	(290 , happyReduce_290),+	(291 , happyReduce_291),+	(292 , happyReduce_292),+	(293 , happyReduce_293),+	(294 , happyReduce_294),+	(295 , happyReduce_295),+	(296 , happyReduce_296),+	(297 , happyReduce_297),+	(298 , happyReduce_298),+	(299 , happyReduce_299),+	(300 , happyReduce_300),+	(301 , happyReduce_301),+	(302 , happyReduce_302),+	(303 , happyReduce_303),+	(304 , happyReduce_304),+	(305 , happyReduce_305),+	(306 , happyReduce_306),+	(307 , happyReduce_307),+	(308 , happyReduce_308),+	(309 , happyReduce_309),+	(310 , happyReduce_310),+	(311 , happyReduce_311),+	(312 , happyReduce_312),+	(313 , happyReduce_313),+	(314 , happyReduce_314),+	(315 , happyReduce_315),+	(316 , happyReduce_316),+	(317 , happyReduce_317),+	(318 , happyReduce_318),+	(319 , happyReduce_319),+	(320 , happyReduce_320),+	(321 , happyReduce_321),+	(322 , happyReduce_322),+	(323 , happyReduce_323),+	(324 , happyReduce_324),+	(325 , happyReduce_325),+	(326 , happyReduce_326),+	(327 , happyReduce_327),+	(328 , happyReduce_328),+	(329 , happyReduce_329),+	(330 , happyReduce_330),+	(331 , happyReduce_331),+	(332 , happyReduce_332),+	(333 , happyReduce_333),+	(334 , happyReduce_334),+	(335 , happyReduce_335),+	(336 , happyReduce_336),+	(337 , happyReduce_337),+	(338 , happyReduce_338),+	(339 , happyReduce_339),+	(340 , happyReduce_340),+	(341 , happyReduce_341),+	(342 , happyReduce_342),+	(343 , happyReduce_343),+	(344 , happyReduce_344),+	(345 , happyReduce_345),+	(346 , happyReduce_346),+	(347 , happyReduce_347),+	(348 , happyReduce_348),+	(349 , happyReduce_349),+	(350 , happyReduce_350),+	(351 , happyReduce_351),+	(352 , happyReduce_352),+	(353 , happyReduce_353),+	(354 , happyReduce_354),+	(355 , happyReduce_355),+	(356 , happyReduce_356),+	(357 , happyReduce_357),+	(358 , happyReduce_358),+	(359 , happyReduce_359),+	(360 , happyReduce_360)+	]++happy_n_terms = 78 :: Int+happy_n_nonterms = 156 :: Int++happyReduce_1 = happyReduce 6# 0# happyReduction_1+happyReduction_1 (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 happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut154 happy_x_3 of { happy_var_3 -> +	case happyOut9 happy_x_4 of { happy_var_4 -> +	case happyOut5 happy_x_6 of { happy_var_6 -> +	happyIn4+		 (HsModule happy_var_1 happy_var_3 happy_var_4 (fst happy_var_6) (snd happy_var_6)+	) `HappyStk` happyRest}}}}++happyReduce_2 = happySpecReduce_2  0# happyReduction_2+happyReduction_2 happy_x_2+	happy_x_1+	 =  case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut5 happy_x_2 of { happy_var_2 -> +	happyIn4+		 (HsModule happy_var_1 main_mod (Just [HsEVar (UnQual main_name)])+							(fst happy_var_2) (snd happy_var_2)+	)}}++happyReduce_3 = happySpecReduce_3  1# happyReduction_3+happyReduction_3 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut6 happy_x_2 of { happy_var_2 -> +	happyIn5+		 (happy_var_2+	)}++happyReduce_4 = happySpecReduce_3  1# happyReduction_4+happyReduction_4 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut6 happy_x_2 of { happy_var_2 -> +	happyIn5+		 (happy_var_2+	)}++happyReduce_5 = happyReduce 4# 2# happyReduction_5+happyReduction_5 (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 happyOut29 happy_x_4 of { happy_var_4 -> +	happyIn6+		 ((reverse happy_var_2, happy_var_4)+	) `HappyStk` happyRest}}++happyReduce_6 = happySpecReduce_2  2# happyReduction_6+happyReduction_6 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn6+		 (([], happy_var_2)+	)}++happyReduce_7 = happySpecReduce_3  2# happyReduction_7+happyReduction_7 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut14 happy_x_2 of { happy_var_2 -> +	happyIn6+		 ((reverse happy_var_2, [])+	)}++happyReduce_8 = happySpecReduce_1  2# happyReduction_8+happyReduction_8 happy_x_1+	 =  happyIn6+		 (([], [])+	)++happyReduce_9 = happySpecReduce_2  3# happyReduction_9+happyReduction_9 happy_x_2+	happy_x_1+	 =  happyIn7+		 (()+	)++happyReduce_10 = happySpecReduce_1  4# happyReduction_10+happyReduction_10 happy_x_1+	 =  happyIn8+		 (()+	)++happyReduce_11 = happySpecReduce_0  4# happyReduction_11+happyReduction_11  =  happyIn8+		 (()+	)++happyReduce_12 = happySpecReduce_1  5# happyReduction_12+happyReduction_12 happy_x_1+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> +	happyIn9+		 (Just happy_var_1+	)}++happyReduce_13 = happySpecReduce_0  5# happyReduction_13+happyReduction_13  =  happyIn9+		 (Nothing+	)++happyReduce_14 = happyReduce 4# 6# happyReduction_14+happyReduction_14 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut12 happy_x_2 of { happy_var_2 -> +	happyIn10+		 (reverse happy_var_2+	) `HappyStk` happyRest}++happyReduce_15 = happySpecReduce_3  6# happyReduction_15+happyReduction_15 happy_x_3+	happy_x_2+	happy_x_1+	 =  happyIn10+		 ([]+	)++happyReduce_16 = happySpecReduce_1  7# happyReduction_16+happyReduction_16 happy_x_1+	 =  happyIn11+		 (()+	)++happyReduce_17 = happySpecReduce_0  7# happyReduction_17+happyReduction_17  =  happyIn11+		 (()+	)++happyReduce_18 = happySpecReduce_3  8# happyReduction_18+happyReduction_18 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_3 : happy_var_1+	)}}++happyReduce_19 = happySpecReduce_1  8# happyReduction_19+happyReduction_19 happy_x_1+	 =  case happyOut13 happy_x_1 of { happy_var_1 -> +	happyIn12+		 ([happy_var_1]+	)}++happyReduce_20 = happySpecReduce_1  9# happyReduction_20+happyReduction_20 happy_x_1+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> +	happyIn13+		 (HsEVar happy_var_1+	)}++happyReduce_21 = happySpecReduce_1  9# happyReduction_21+happyReduction_21 happy_x_1+	 =  case happyOut157 happy_x_1 of { happy_var_1 -> +	happyIn13+		 (HsEAbs happy_var_1+	)}++happyReduce_22 = happyReduce 4# 9# happyReduction_22+happyReduction_22 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut157 happy_x_1 of { happy_var_1 -> +	happyIn13+		 (HsEThingAll happy_var_1+	) `HappyStk` happyRest}++happyReduce_23 = happySpecReduce_3  9# happyReduction_23+happyReduction_23 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut157 happy_x_1 of { happy_var_1 -> +	happyIn13+		 (HsEThingWith happy_var_1 []+	)}++happyReduce_24 = happyReduce 4# 9# happyReduction_24+happyReduction_24 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut157 happy_x_1 of { happy_var_1 -> +	case happyOut23 happy_x_3 of { happy_var_3 -> +	happyIn13+		 (HsEThingWith happy_var_1 (reverse happy_var_3)+	) `HappyStk` happyRest}}++happyReduce_25 = happySpecReduce_2  9# happyReduction_25+happyReduction_25 happy_x_2+	happy_x_1+	 =  case happyOut154 happy_x_2 of { happy_var_2 -> +	happyIn13+		 (HsEModuleContents happy_var_2+	)}++happyReduce_26 = happySpecReduce_3  10# happyReduction_26+happyReduction_26 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut14 happy_x_1 of { happy_var_1 -> +	case happyOut15 happy_x_3 of { happy_var_3 -> +	happyIn14+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_27 = happySpecReduce_1  10# happyReduction_27+happyReduction_27 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn14+		 ([happy_var_1]+	)}++happyReduce_28 = happyReduce 6# 11# happyReduction_28+happyReduction_28 (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 happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut16 happy_x_3 of { happy_var_3 -> +	case happyOut154 happy_x_4 of { happy_var_4 -> +	case happyOut17 happy_x_5 of { happy_var_5 -> +	case happyOut18 happy_x_6 of { happy_var_6 -> +	happyIn15+		 (HsImportDecl happy_var_1 happy_var_4 happy_var_3 happy_var_5 happy_var_6+	) `HappyStk` happyRest}}}}}++happyReduce_29 = happySpecReduce_1  12# happyReduction_29+happyReduction_29 happy_x_1+	 =  happyIn16+		 (True+	)++happyReduce_30 = happySpecReduce_0  12# happyReduction_30+happyReduction_30  =  happyIn16+		 (False+	)++happyReduce_31 = happySpecReduce_2  13# happyReduction_31+happyReduction_31 happy_x_2+	happy_x_1+	 =  case happyOut154 happy_x_2 of { happy_var_2 -> +	happyIn17+		 (Just happy_var_2+	)}++happyReduce_32 = happySpecReduce_0  13# happyReduction_32+happyReduction_32  =  happyIn17+		 (Nothing+	)++happyReduce_33 = happySpecReduce_1  14# happyReduction_33+happyReduction_33 happy_x_1+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> +	happyIn18+		 (Just happy_var_1+	)}++happyReduce_34 = happySpecReduce_0  14# happyReduction_34+happyReduction_34  =  happyIn18+		 (Nothing+	)++happyReduce_35 = happyReduce 5# 15# happyReduction_35+happyReduction_35 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut20 happy_x_1 of { happy_var_1 -> +	case happyOut21 happy_x_3 of { happy_var_3 -> +	happyIn19+		 ((happy_var_1, reverse happy_var_3)+	) `HappyStk` happyRest}}++happyReduce_36 = happyReduce 4# 15# happyReduction_36+happyReduction_36 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut20 happy_x_1 of { happy_var_1 -> +	happyIn19+		 ((happy_var_1, [])+	) `HappyStk` happyRest}++happyReduce_37 = happySpecReduce_1  16# happyReduction_37+happyReduction_37 happy_x_1+	 =  happyIn20+		 (True+	)++happyReduce_38 = happySpecReduce_0  16# happyReduction_38+happyReduction_38  =  happyIn20+		 (False+	)++happyReduce_39 = happySpecReduce_3  17# happyReduction_39+happyReduction_39 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> +	case happyOut22 happy_x_3 of { happy_var_3 -> +	happyIn21+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_40 = happySpecReduce_1  17# happyReduction_40+happyReduction_40 happy_x_1+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> +	happyIn21+		 ([happy_var_1]+	)}++happyReduce_41 = happySpecReduce_1  18# happyReduction_41+happyReduction_41 happy_x_1+	 =  case happyOut126 happy_x_1 of { happy_var_1 -> +	happyIn22+		 (HsIVar happy_var_1+	)}++happyReduce_42 = happySpecReduce_1  18# happyReduction_42+happyReduction_42 happy_x_1+	 =  case happyOut155 happy_x_1 of { happy_var_1 -> +	happyIn22+		 (HsIAbs happy_var_1+	)}++happyReduce_43 = happyReduce 4# 18# happyReduction_43+happyReduction_43 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut155 happy_x_1 of { happy_var_1 -> +	happyIn22+		 (HsIThingAll happy_var_1+	) `HappyStk` happyRest}++happyReduce_44 = happySpecReduce_3  18# happyReduction_44+happyReduction_44 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut155 happy_x_1 of { happy_var_1 -> +	happyIn22+		 (HsIThingWith happy_var_1 []+	)}++happyReduce_45 = happyReduce 4# 18# happyReduction_45+happyReduction_45 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut155 happy_x_1 of { happy_var_1 -> +	case happyOut23 happy_x_3 of { happy_var_3 -> +	happyIn22+		 (HsIThingWith happy_var_1 (reverse happy_var_3)+	) `HappyStk` happyRest}}++happyReduce_46 = happySpecReduce_3  19# happyReduction_46+happyReduction_46 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> +	case happyOut24 happy_x_3 of { happy_var_3 -> +	happyIn23+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_47 = happySpecReduce_1  19# happyReduction_47+happyReduction_47 happy_x_1+	 =  case happyOut24 happy_x_1 of { happy_var_1 -> +	happyIn23+		 ([happy_var_1]+	)}++happyReduce_48 = happySpecReduce_1  20# happyReduction_48+happyReduction_48 happy_x_1+	 =  case happyOut126 happy_x_1 of { happy_var_1 -> +	happyIn24+		 (HsVarName happy_var_1+	)}++happyReduce_49 = happySpecReduce_1  20# happyReduction_49+happyReduction_49 happy_x_1+	 =  case happyOut128 happy_x_1 of { happy_var_1 -> +	happyIn24+		 (HsConName happy_var_1+	)}++happyReduce_50 = happyReduce 4# 21# happyReduction_50+happyReduction_50 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut27 happy_x_2 of { happy_var_2 -> +	case happyOut26 happy_x_3 of { happy_var_3 -> +	case happyOut28 happy_x_4 of { happy_var_4 -> +	happyIn25+		 (HsInfixDecl happy_var_1 happy_var_2 happy_var_3 (reverse happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_51 = happySpecReduce_0  22# happyReduction_51+happyReduction_51  =  happyIn26+		 (9+	)++happyReduce_52 = happyMonadReduce 1# 22# happyReduction_52+happyReduction_52 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (IntTok happy_var_1) -> +	( checkPrec happy_var_1)}+	) (\r -> happyReturn (happyIn26 r))++happyReduce_53 = happySpecReduce_1  23# happyReduction_53+happyReduction_53 happy_x_1+	 =  happyIn27+		 (HsAssocNone+	)++happyReduce_54 = happySpecReduce_1  23# happyReduction_54+happyReduction_54 happy_x_1+	 =  happyIn27+		 (HsAssocLeft+	)++happyReduce_55 = happySpecReduce_1  23# happyReduction_55+happyReduction_55 happy_x_1+	 =  happyIn27+		 (HsAssocRight+	)++happyReduce_56 = happySpecReduce_3  24# happyReduction_56+happyReduction_56 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> +	case happyOut135 happy_x_3 of { happy_var_3 -> +	happyIn28+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_57 = happySpecReduce_1  24# happyReduction_57+happyReduction_57 happy_x_1+	 =  case happyOut135 happy_x_1 of { happy_var_1 -> +	happyIn28+		 ([happy_var_1]+	)}++happyReduce_58 = happyMonadReduce 2# 25# happyReduction_58+happyReduction_58 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut30 happy_x_1 of { happy_var_1 -> +	( checkRevDecls happy_var_1)}+	) (\r -> happyReturn (happyIn29 r))++happyReduce_59 = happySpecReduce_3  26# happyReduction_59+happyReduction_59 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> +	case happyOut31 happy_x_3 of { happy_var_3 -> +	happyIn30+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_60 = happySpecReduce_1  26# happyReduction_60+happyReduction_60 happy_x_1+	 =  case happyOut31 happy_x_1 of { happy_var_1 -> +	happyIn30+		 ([happy_var_1]+	)}++happyReduce_61 = happyReduce 5# 27# happyReduction_61+happyReduction_61 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut50 happy_x_3 of { happy_var_3 -> +	case happyOut43 happy_x_5 of { happy_var_5 -> +	happyIn31+		 (HsTypeDecl happy_var_1 (fst happy_var_3) (snd happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}++happyReduce_62 = happyMonadReduce 6# 27# happyReduction_62+happyReduction_62 (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) tk+	 = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut47 happy_x_3 of { happy_var_3 -> +	case happyOut52 happy_x_5 of { happy_var_5 -> +	case happyOut61 happy_x_6 of { happy_var_6 -> +	( do { (cs,c,t) <- checkDataHeader happy_var_3;+				return (HsDataDecl happy_var_1 cs c t (reverse happy_var_5) happy_var_6) })}}}}+	) (\r -> happyReturn (happyIn31 r))++happyReduce_63 = happyMonadReduce 6# 27# happyReduction_63+happyReduction_63 (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) tk+	 = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut47 happy_x_3 of { happy_var_3 -> +	case happyOut53 happy_x_5 of { happy_var_5 -> +	case happyOut61 happy_x_6 of { happy_var_6 -> +	( do { (cs,c,t) <- checkDataHeader happy_var_3;+				return (HsNewTypeDecl happy_var_1 cs c t happy_var_5 happy_var_6) })}}}}+	) (\r -> happyReturn (happyIn31 r))++happyReduce_64 = happyMonadReduce 4# 27# happyReduction_64+happyReduction_64 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut47 happy_x_3 of { happy_var_3 -> +	case happyOut63 happy_x_4 of { happy_var_4 -> +	( do { (cs,c,vs) <- checkClassHeader happy_var_3;+				return (HsClassDecl happy_var_1 cs c vs happy_var_4) })}}}+	) (\r -> happyReturn (happyIn31 r))++happyReduce_65 = happyMonadReduce 4# 27# happyReduction_65+happyReduction_65 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut47 happy_x_3 of { happy_var_3 -> +	case happyOut64 happy_x_4 of { happy_var_4 -> +	( do { (cs,c,ts) <- checkInstHeader happy_var_3;+				return (HsInstDecl happy_var_1 cs c ts happy_var_4) })}}}+	) (\r -> happyReturn (happyIn31 r))++happyReduce_66 = happyReduce 5# 27# happyReduction_66+happyReduction_66 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut32 happy_x_4 of { happy_var_4 -> +	happyIn31+		 (HsDefaultDecl happy_var_1 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_67 = happySpecReduce_1  27# happyReduction_67+happyReduction_67 happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	happyIn31+		 (happy_var_1+	)}++happyReduce_68 = happySpecReduce_1  27# happyReduction_68+happyReduction_68 happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	happyIn31+		 (happy_var_1+	)}++happyReduce_69 = happySpecReduce_1  28# happyReduction_69+happyReduction_69 happy_x_1+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> +	happyIn32+		 (reverse happy_var_1+	)}++happyReduce_70 = happySpecReduce_1  28# happyReduction_70+happyReduction_70 happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	happyIn32+		 ([happy_var_1]+	)}++happyReduce_71 = happySpecReduce_0  28# happyReduction_71+happyReduction_71  =  happyIn32+		 ([]+	)++happyReduce_72 = happyMonadReduce 3# 29# happyReduction_72+happyReduction_72 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut34 happy_x_2 of { happy_var_2 -> +	( checkRevDecls happy_var_2)}+	) (\r -> happyReturn (happyIn33 r))++happyReduce_73 = happySpecReduce_1  29# happyReduction_73+happyReduction_73 happy_x_1+	 =  happyIn33+		 ([]+	)++happyReduce_74 = happySpecReduce_3  30# happyReduction_74+happyReduction_74 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut35 happy_x_3 of { happy_var_3 -> +	happyIn34+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_75 = happySpecReduce_1  30# happyReduction_75+happyReduction_75 happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	happyIn34+		 ([happy_var_1]+	)}++happyReduce_76 = happySpecReduce_1  31# happyReduction_76+happyReduction_76 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn35+		 (happy_var_1+	)}++happyReduce_77 = happySpecReduce_1  31# happyReduction_77+happyReduction_77 happy_x_1+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> +	happyIn35+		 (happy_var_1+	)}++happyReduce_78 = happySpecReduce_1  31# happyReduction_78+happyReduction_78 happy_x_1+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> +	happyIn35+		 (happy_var_1+	)}++happyReduce_79 = happySpecReduce_3  32# happyReduction_79+happyReduction_79 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_2 of { happy_var_2 -> +	happyIn36+		 (happy_var_2+	)}++happyReduce_80 = happySpecReduce_3  32# happyReduction_80+happyReduction_80 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_2 of { happy_var_2 -> +	happyIn36+		 (happy_var_2+	)}++happyReduce_81 = happyReduce 4# 33# happyReduction_81+happyReduction_81 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut38 happy_x_2 of { happy_var_2 -> +	case happyOut47 happy_x_4 of { happy_var_4 -> +	happyIn37+		 (HsTypeSig happy_var_1 (reverse happy_var_2) happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_82 = happySpecReduce_3  34# happyReduction_82+happyReduction_82 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	case happyOut126 happy_x_3 of { happy_var_3 -> +	happyIn38+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_83 = happyMonadReduce 1# 34# happyReduction_83+happyReduction_83 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut127 happy_x_1 of { happy_var_1 -> +	( do { n <- checkUnQual happy_var_1;+						return [n] })}+	) (\r -> happyReturn (happyIn38 r))++happyReduce_84 = happyReduce 9# 35# happyReduction_84+happyReduction_84 (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 happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_4 of { (VarId happy_var_4) -> +	case happyOut40 happy_x_5 of { happy_var_5 -> +	case happyOut41 happy_x_6 of { happy_var_6 -> +	case happyOut42 happy_x_7 of { happy_var_7 -> +	case happyOut43 happy_x_9 of { happy_var_9 -> +	happyIn39+		 (HsForeignImport happy_var_1 happy_var_4 happy_var_5 happy_var_6 happy_var_7 happy_var_9+	) `HappyStk` happyRest}}}}}}++happyReduce_85 = happyReduce 8# 35# happyReduction_85+happyReduction_85 (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 happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_4 of { (VarId happy_var_4) -> +	case happyOut41 happy_x_5 of { happy_var_5 -> +	case happyOut42 happy_x_6 of { happy_var_6 -> +	case happyOut43 happy_x_8 of { happy_var_8 -> +	happyIn39+		 (HsForeignExport happy_var_1 happy_var_4 happy_var_5 happy_var_6 happy_var_8+	) `HappyStk` happyRest}}}}}++happyReduce_86 = happySpecReduce_1  36# happyReduction_86+happyReduction_86 happy_x_1+	 =  happyIn40+		 (HsSafe+	)++happyReduce_87 = happySpecReduce_1  36# happyReduction_87+happyReduction_87 happy_x_1+	 =  happyIn40+		 (HsUnsafe+	)++happyReduce_88 = happySpecReduce_0  36# happyReduction_88+happyReduction_88  =  happyIn40+		 (HsSafe+	)++happyReduce_89 = happySpecReduce_1  37# happyReduction_89+happyReduction_89 happy_x_1+	 =  case happyOutTok happy_x_1 of { (StringTok happy_var_1) -> +	happyIn41+		 (happy_var_1+	)}++happyReduce_90 = happySpecReduce_0  37# happyReduction_90+happyReduction_90  =  happyIn41+		 (""+	)++happyReduce_91 = happySpecReduce_1  38# happyReduction_91+happyReduction_91 happy_x_1+	 =  case happyOutTok happy_x_1 of { (VarId happy_var_1) -> +	happyIn42+		 (HsIdent happy_var_1+	)}++happyReduce_92 = happySpecReduce_3  38# happyReduction_92+happyReduction_92 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut147 happy_x_2 of { happy_var_2 -> +	happyIn42+		 (happy_var_2+	)}++happyReduce_93 = happySpecReduce_3  39# happyReduction_93+happyReduction_93 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	case happyOut43 happy_x_3 of { happy_var_3 -> +	happyIn43+		 (HsTyFun happy_var_1 happy_var_3+	)}}++happyReduce_94 = happySpecReduce_1  39# happyReduction_94+happyReduction_94 happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	happyIn43+		 (happy_var_1+	)}++happyReduce_95 = happySpecReduce_2  40# happyReduction_95+happyReduction_95 happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	case happyOut45 happy_x_2 of { happy_var_2 -> +	happyIn44+		 (HsTyApp happy_var_1 happy_var_2+	)}}++happyReduce_96 = happySpecReduce_1  40# happyReduction_96+happyReduction_96 happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	happyIn44+		 (happy_var_1+	)}++happyReduce_97 = happySpecReduce_1  41# happyReduction_97+happyReduction_97 happy_x_1+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> +	happyIn45+		 (HsTyCon happy_var_1+	)}++happyReduce_98 = happySpecReduce_1  41# happyReduction_98+happyReduction_98 happy_x_1+	 =  case happyOut159 happy_x_1 of { happy_var_1 -> +	happyIn45+		 (HsTyVar happy_var_1+	)}++happyReduce_99 = happySpecReduce_3  41# happyReduction_99+happyReduction_99 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut49 happy_x_2 of { happy_var_2 -> +	happyIn45+		 (HsTyTuple (reverse happy_var_2)+	)}++happyReduce_100 = happySpecReduce_3  41# happyReduction_100+happyReduction_100 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> +	happyIn45+		 (HsTyApp list_tycon happy_var_2+	)}++happyReduce_101 = happySpecReduce_3  41# happyReduction_101+happyReduction_101 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> +	happyIn45+		 (happy_var_2+	)}++happyReduce_102 = happySpecReduce_1  42# happyReduction_102+happyReduction_102 happy_x_1+	 =  case happyOut141 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1+	)}++happyReduce_103 = happySpecReduce_2  42# happyReduction_103+happyReduction_103 happy_x_2+	happy_x_1+	 =  happyIn46+		 (unit_tycon_name+	)++happyReduce_104 = happySpecReduce_3  42# happyReduction_104+happyReduction_104 happy_x_3+	happy_x_2+	happy_x_1+	 =  happyIn46+		 (fun_tycon_name+	)++happyReduce_105 = happySpecReduce_2  42# happyReduction_105+happyReduction_105 happy_x_2+	happy_x_1+	 =  happyIn46+		 (list_tycon_name+	)++happyReduce_106 = happySpecReduce_3  42# happyReduction_106+happyReduction_106 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut84 happy_x_2 of { happy_var_2 -> +	happyIn46+		 (tuple_tycon_name happy_var_2+	)}++happyReduce_107 = happySpecReduce_3  43# happyReduction_107+happyReduction_107 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> +	case happyOut43 happy_x_3 of { happy_var_3 -> +	happyIn47+		 (HsQualType happy_var_1 happy_var_3+	)}}++happyReduce_108 = happySpecReduce_1  43# happyReduction_108+happyReduction_108 happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	happyIn47+		 (HsQualType [] happy_var_1+	)}++happyReduce_109 = happyMonadReduce 1# 44# happyReduction_109+happyReduction_109 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut44 happy_x_1 of { happy_var_1 -> +	( checkContext happy_var_1)}+	) (\r -> happyReturn (happyIn48 r))++happyReduce_110 = happySpecReduce_3  45# happyReduction_110+happyReduction_110 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> +	case happyOut43 happy_x_3 of { happy_var_3 -> +	happyIn49+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_111 = happySpecReduce_3  45# happyReduction_111+happyReduction_111 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	case happyOut43 happy_x_3 of { happy_var_3 -> +	happyIn49+		 ([happy_var_3, happy_var_1]+	)}}++happyReduce_112 = happySpecReduce_2  46# happyReduction_112+happyReduction_112 happy_x_2+	happy_x_1+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> +	case happyOut51 happy_x_2 of { happy_var_2 -> +	happyIn50+		 ((happy_var_1,reverse happy_var_2)+	)}}++happyReduce_113 = happySpecReduce_2  47# happyReduction_113+happyReduction_113 happy_x_2+	happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	case happyOut159 happy_x_2 of { happy_var_2 -> +	happyIn51+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_114 = happySpecReduce_0  47# happyReduction_114+happyReduction_114  =  happyIn51+		 ([]+	)++happyReduce_115 = happySpecReduce_3  48# happyReduction_115+happyReduction_115 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> +	case happyOut53 happy_x_3 of { happy_var_3 -> +	happyIn52+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_116 = happySpecReduce_1  48# happyReduction_116+happyReduction_116 happy_x_1+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> +	happyIn52+		 ([happy_var_1]+	)}++happyReduce_117 = happySpecReduce_2  49# happyReduction_117+happyReduction_117 happy_x_2+	happy_x_1+	 =  case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut54 happy_x_2 of { happy_var_2 -> +	happyIn53+		 (HsConDecl happy_var_1 (fst happy_var_2) (snd happy_var_2)+	)}}++happyReduce_118 = happyReduce 4# 49# happyReduction_118+happyReduction_118 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut57 happy_x_2 of { happy_var_2 -> +	case happyOut133 happy_x_3 of { happy_var_3 -> +	case happyOut57 happy_x_4 of { happy_var_4 -> +	happyIn53+		 (HsConDecl happy_var_1 happy_var_3 [happy_var_2,happy_var_4]+	) `HappyStk` happyRest}}}}++happyReduce_119 = happyReduce 4# 49# happyReduction_119+happyReduction_119 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut128 happy_x_2 of { happy_var_2 -> +	happyIn53+		 (HsRecDecl happy_var_1 happy_var_2 []+	) `HappyStk` happyRest}}++happyReduce_120 = happyReduce 5# 49# 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 happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut128 happy_x_2 of { happy_var_2 -> +	case happyOut58 happy_x_4 of { happy_var_4 -> +	happyIn53+		 (HsRecDecl happy_var_1 happy_var_2 (reverse happy_var_4)+	) `HappyStk` happyRest}}}++happyReduce_121 = happyMonadReduce 1# 50# happyReduction_121+happyReduction_121 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut44 happy_x_1 of { happy_var_1 -> +	( do { (c,ts) <- splitTyConApp happy_var_1;+						return (c,map HsUnBangedTy ts) })}+	) (\r -> happyReturn (happyIn54 r))++happyReduce_122 = happySpecReduce_1  50# happyReduction_122+happyReduction_122 happy_x_1+	 =  case happyOut55 happy_x_1 of { happy_var_1 -> +	happyIn54+		 (happy_var_1+	)}++happyReduce_123 = happyMonadReduce 3# 51# happyReduction_123+happyReduction_123 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut44 happy_x_1 of { happy_var_1 -> +	case happyOut45 happy_x_3 of { happy_var_3 -> +	( do { (c,ts) <- splitTyConApp happy_var_1;+						return (c,map HsUnBangedTy ts+++							[HsBangedTy happy_var_3]) })}}+	) (\r -> happyReturn (happyIn55 r))++happyReduce_124 = happySpecReduce_2  51# happyReduction_124+happyReduction_124 happy_x_2+	happy_x_1+	 =  case happyOut55 happy_x_1 of { happy_var_1 -> +	case happyOut56 happy_x_2 of { happy_var_2 -> +	happyIn55+		 ((fst happy_var_1, snd happy_var_1 ++ [happy_var_2] )+	)}}++happyReduce_125 = happySpecReduce_1  52# happyReduction_125+happyReduction_125 happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	happyIn56+		 (HsUnBangedTy happy_var_1+	)}++happyReduce_126 = happySpecReduce_2  52# happyReduction_126+happyReduction_126 happy_x_2+	happy_x_1+	 =  case happyOut45 happy_x_2 of { happy_var_2 -> +	happyIn56+		 (HsBangedTy   happy_var_2+	)}++happyReduce_127 = happySpecReduce_1  53# happyReduction_127+happyReduction_127 happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	happyIn57+		 (HsUnBangedTy happy_var_1+	)}++happyReduce_128 = happySpecReduce_2  53# happyReduction_128+happyReduction_128 happy_x_2+	happy_x_1+	 =  case happyOut45 happy_x_2 of { happy_var_2 -> +	happyIn57+		 (HsBangedTy   happy_var_2+	)}++happyReduce_129 = happySpecReduce_3  54# happyReduction_129+happyReduction_129 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	case happyOut59 happy_x_3 of { happy_var_3 -> +	happyIn58+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_130 = happySpecReduce_1  54# happyReduction_130+happyReduction_130 happy_x_1+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> +	happyIn58+		 ([happy_var_1]+	)}++happyReduce_131 = happySpecReduce_3  55# happyReduction_131+happyReduction_131 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	case happyOut60 happy_x_3 of { happy_var_3 -> +	happyIn59+		 ((reverse happy_var_1, happy_var_3)+	)}}++happyReduce_132 = happySpecReduce_1  56# happyReduction_132+happyReduction_132 happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	happyIn60+		 (HsUnBangedTy happy_var_1+	)}++happyReduce_133 = happySpecReduce_2  56# happyReduction_133+happyReduction_133 happy_x_2+	happy_x_1+	 =  case happyOut45 happy_x_2 of { happy_var_2 -> +	happyIn60+		 (HsBangedTy   happy_var_2+	)}++happyReduce_134 = happySpecReduce_0  57# happyReduction_134+happyReduction_134  =  happyIn61+		 ([]+	)++happyReduce_135 = happySpecReduce_2  57# happyReduction_135+happyReduction_135 happy_x_2+	happy_x_1+	 =  case happyOut158 happy_x_2 of { happy_var_2 -> +	happyIn61+		 ([happy_var_2]+	)}++happyReduce_136 = happySpecReduce_3  57# happyReduction_136+happyReduction_136 happy_x_3+	happy_x_2+	happy_x_1+	 =  happyIn61+		 ([]+	)++happyReduce_137 = happyReduce 4# 57# happyReduction_137+happyReduction_137 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut62 happy_x_3 of { happy_var_3 -> +	happyIn61+		 (reverse happy_var_3+	) `HappyStk` happyRest}++happyReduce_138 = happySpecReduce_3  58# happyReduction_138+happyReduction_138 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> +	case happyOut158 happy_x_3 of { happy_var_3 -> +	happyIn62+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_139 = happySpecReduce_1  58# happyReduction_139+happyReduction_139 happy_x_1+	 =  case happyOut158 happy_x_1 of { happy_var_1 -> +	happyIn62+		 ([happy_var_1]+	)}++happyReduce_140 = happyMonadReduce 2# 59# happyReduction_140+happyReduction_140 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut36 happy_x_2 of { happy_var_2 -> +	( checkClassBody happy_var_2)}+	) (\r -> happyReturn (happyIn63 r))++happyReduce_141 = happySpecReduce_0  59# happyReduction_141+happyReduction_141  =  happyIn63+		 ([]+	)++happyReduce_142 = happyMonadReduce 4# 60# happyReduction_142+happyReduction_142 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut65 happy_x_3 of { happy_var_3 -> +	( checkClassBody happy_var_3)}+	) (\r -> happyReturn (happyIn64 r))++happyReduce_143 = happyMonadReduce 4# 60# happyReduction_143+happyReduction_143 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut65 happy_x_3 of { happy_var_3 -> +	( checkClassBody happy_var_3)}+	) (\r -> happyReturn (happyIn64 r))++happyReduce_144 = happySpecReduce_0  60# happyReduction_144+happyReduction_144  =  happyIn64+		 ([]+	)++happyReduce_145 = happyMonadReduce 3# 61# happyReduction_145+happyReduction_145 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut66 happy_x_2 of { happy_var_2 -> +	( checkRevDecls happy_var_2)}+	) (\r -> happyReturn (happyIn65 r))++happyReduce_146 = happySpecReduce_1  61# happyReduction_146+happyReduction_146 happy_x_1+	 =  happyIn65+		 ([]+	)++happyReduce_147 = happySpecReduce_3  62# happyReduction_147+happyReduction_147 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> +	case happyOut67 happy_x_3 of { happy_var_3 -> +	happyIn66+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_148 = happySpecReduce_1  62# happyReduction_148+happyReduction_148 happy_x_1+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> +	happyIn66+		 ([happy_var_1]+	)}++happyReduce_149 = happyMonadReduce 4# 63# happyReduction_149+happyReduction_149 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut75 happy_x_2 of { happy_var_2 -> +	case happyOut69 happy_x_3 of { happy_var_3 -> +	case happyOut68 happy_x_4 of { happy_var_4 -> +	( checkValDef happy_var_1 happy_var_2 happy_var_3 happy_var_4)}}}}+	) (\r -> happyReturn (happyIn67 r))++happyReduce_150 = happySpecReduce_2  64# happyReduction_150+happyReduction_150 happy_x_2+	happy_x_1+	 =  case happyOut36 happy_x_2 of { happy_var_2 -> +	happyIn68+		 (happy_var_2+	)}++happyReduce_151 = happySpecReduce_0  64# happyReduction_151+happyReduction_151  =  happyIn68+		 ([]+	)++happyReduce_152 = happyMonadReduce 2# 65# happyReduction_152+happyReduction_152 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut72 happy_x_2 of { happy_var_2 -> +	( do { e <- checkExpr happy_var_2;+						return (HsUnGuardedRhs e) })}+	) (\r -> happyReturn (happyIn69 r))++happyReduce_153 = happySpecReduce_1  65# happyReduction_153+happyReduction_153 happy_x_1+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> +	happyIn69+		 (HsGuardedRhss  (reverse happy_var_1)+	)}++happyReduce_154 = happySpecReduce_2  66# happyReduction_154+happyReduction_154 happy_x_2+	happy_x_1+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> +	case happyOut71 happy_x_2 of { happy_var_2 -> +	happyIn70+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_155 = happySpecReduce_1  66# happyReduction_155+happyReduction_155 happy_x_1+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> +	happyIn70+		 ([happy_var_1]+	)}++happyReduce_156 = happyMonadReduce 5# 67# happyReduction_156+happyReduction_156 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut73 happy_x_3 of { happy_var_3 -> +	case happyOut72 happy_x_5 of { happy_var_5 -> +	( do { g <- checkExpr happy_var_3;+						e <- checkExpr happy_var_5;+						return (HsGuardedRhs happy_var_1 g e) })}}}+	) (\r -> happyReturn (happyIn71 r))++happyReduce_157 = happyReduce 4# 68# happyReduction_157+happyReduction_157 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut75 happy_x_1 of { happy_var_1 -> +	case happyOut151 happy_x_3 of { happy_var_3 -> +	case happyOut47 happy_x_4 of { happy_var_4 -> +	happyIn72+		 (HsExpTypeSig happy_var_3 happy_var_1 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_158 = happySpecReduce_1  68# happyReduction_158+happyReduction_158 happy_x_1+	 =  case happyOut73 happy_x_1 of { happy_var_1 -> +	happyIn72+		 (happy_var_1+	)}++happyReduce_159 = happySpecReduce_1  69# happyReduction_159+happyReduction_159 happy_x_1+	 =  case happyOut74 happy_x_1 of { happy_var_1 -> +	happyIn73+		 (happy_var_1+	)}++happyReduce_160 = happySpecReduce_1  69# happyReduction_160+happyReduction_160 happy_x_1+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> +	happyIn73+		 (happy_var_1+	)}++happyReduce_161 = happySpecReduce_3  70# happyReduction_161+happyReduction_161 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> +	case happyOut136 happy_x_2 of { happy_var_2 -> +	case happyOut76 happy_x_3 of { happy_var_3 -> +	happyIn74+		 (HsInfixApp happy_var_1 happy_var_2 happy_var_3+	)}}}++happyReduce_162 = happySpecReduce_1  70# happyReduction_162+happyReduction_162 happy_x_1+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> +	happyIn74+		 (happy_var_1+	)}++happyReduce_163 = happySpecReduce_3  71# happyReduction_163+happyReduction_163 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> +	case happyOut136 happy_x_2 of { happy_var_2 -> +	case happyOut77 happy_x_3 of { happy_var_3 -> +	happyIn75+		 (HsInfixApp happy_var_1 happy_var_2 happy_var_3+	)}}}++happyReduce_164 = happySpecReduce_1  71# happyReduction_164+happyReduction_164 happy_x_1+	 =  case happyOut77 happy_x_1 of { happy_var_1 -> +	happyIn75+		 (happy_var_1+	)}++happyReduce_165 = happyReduce 5# 72# happyReduction_165+happyReduction_165 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_2 of { happy_var_2 -> +	case happyOut79 happy_x_3 of { happy_var_3 -> +	case happyOut72 happy_x_5 of { happy_var_5 -> +	happyIn76+		 (HsLambda happy_var_2 (reverse happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}++happyReduce_166 = happyReduce 4# 72# happyReduction_166+happyReduction_166 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut36 happy_x_2 of { happy_var_2 -> +	case happyOut72 happy_x_4 of { happy_var_4 -> +	happyIn76+		 (HsLet happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_167 = happyReduce 6# 72# happyReduction_167+happyReduction_167 (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 happyOut72 happy_x_2 of { happy_var_2 -> +	case happyOut72 happy_x_4 of { happy_var_4 -> +	case happyOut72 happy_x_6 of { happy_var_6 -> +	happyIn76+		 (HsIf happy_var_2 happy_var_4 happy_var_6+	) `HappyStk` happyRest}}}++happyReduce_168 = happyReduce 4# 72# happyReduction_168+happyReduction_168 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut80 happy_x_2 of { happy_var_2 -> +	case happyOut102 happy_x_4 of { happy_var_4 -> +	happyIn76+		 (ArrSyn.translate happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_169 = happyReduce 4# 73# happyReduction_169+happyReduction_169 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut72 happy_x_2 of { happy_var_2 -> +	case happyOut90 happy_x_4 of { happy_var_4 -> +	happyIn77+		 (HsCase happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_170 = happySpecReduce_2  73# happyReduction_170+happyReduction_170 happy_x_2+	happy_x_1+	 =  case happyOut78 happy_x_2 of { happy_var_2 -> +	happyIn77+		 (HsNegApp happy_var_2+	)}++happyReduce_171 = happySpecReduce_2  73# happyReduction_171+happyReduction_171 happy_x_2+	happy_x_1+	 =  case happyOut98 happy_x_2 of { happy_var_2 -> +	happyIn77+		 (HsDo happy_var_2+	)}++happyReduce_172 = happySpecReduce_1  73# happyReduction_172+happyReduction_172 happy_x_1+	 =  case happyOut78 happy_x_1 of { happy_var_1 -> +	happyIn77+		 (happy_var_1+	)}++happyReduce_173 = happySpecReduce_2  74# happyReduction_173+happyReduction_173 happy_x_2+	happy_x_1+	 =  case happyOut78 happy_x_1 of { happy_var_1 -> +	case happyOut81 happy_x_2 of { happy_var_2 -> +	happyIn78+		 (HsApp happy_var_1 happy_var_2+	)}}++happyReduce_174 = happySpecReduce_1  74# happyReduction_174+happyReduction_174 happy_x_1+	 =  case happyOut81 happy_x_1 of { happy_var_1 -> +	happyIn78+		 (happy_var_1+	)}++happyReduce_175 = happySpecReduce_2  75# happyReduction_175+happyReduction_175 happy_x_2+	happy_x_1+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> +	case happyOut80 happy_x_2 of { happy_var_2 -> +	happyIn79+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_176 = happySpecReduce_1  75# happyReduction_176+happyReduction_176 happy_x_1+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> +	happyIn79+		 ([happy_var_1]+	)}++happyReduce_177 = happyMonadReduce 1# 76# happyReduction_177+happyReduction_177 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut81 happy_x_1 of { happy_var_1 -> +	( checkPattern happy_var_1)}+	) (\r -> happyReturn (happyIn80 r))++happyReduce_178 = happyMonadReduce 3# 77# happyReduction_178+happyReduction_178 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut127 happy_x_1 of { happy_var_1 -> +	case happyOut81 happy_x_3 of { happy_var_3 -> +	( do { n <- checkUnQual happy_var_1;+						return (HsAsPat n happy_var_3) })}}+	) (\r -> happyReturn (happyIn81 r))++happyReduce_179 = happySpecReduce_2  77# happyReduction_179+happyReduction_179 happy_x_2+	happy_x_1+	 =  case happyOut81 happy_x_2 of { happy_var_2 -> +	happyIn81+		 (HsIrrPat happy_var_2+	)}++happyReduce_180 = happySpecReduce_1  77# happyReduction_180+happyReduction_180 happy_x_1+	 =  case happyOut82 happy_x_1 of { happy_var_1 -> +	happyIn81+		 (happy_var_1+	)}++happyReduce_181 = happyMonadReduce 3# 78# happyReduction_181+happyReduction_181 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut82 happy_x_1 of { happy_var_1 -> +	( mkRecConstrOrUpdate happy_var_1 [])}+	) (\r -> happyReturn (happyIn82 r))++happyReduce_182 = happyMonadReduce 4# 78# happyReduction_182+happyReduction_182 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut82 happy_x_1 of { happy_var_1 -> +	case happyOut100 happy_x_3 of { happy_var_3 -> +	( mkRecConstrOrUpdate happy_var_1 (reverse happy_var_3))}}+	) (\r -> happyReturn (happyIn82 r))++happyReduce_183 = happySpecReduce_1  78# happyReduction_183+happyReduction_183 happy_x_1+	 =  case happyOut83 happy_x_1 of { happy_var_1 -> +	happyIn82+		 (happy_var_1+	)}++happyReduce_184 = happySpecReduce_1  79# happyReduction_184+happyReduction_184 happy_x_1+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> +	happyIn83+		 (HsVar happy_var_1+	)}++happyReduce_185 = happySpecReduce_1  79# happyReduction_185+happyReduction_185 happy_x_1+	 =  case happyOut125 happy_x_1 of { happy_var_1 -> +	happyIn83+		 (happy_var_1+	)}++happyReduce_186 = happySpecReduce_1  79# happyReduction_186+happyReduction_186 happy_x_1+	 =  case happyOut150 happy_x_1 of { happy_var_1 -> +	happyIn83+		 (HsLit happy_var_1+	)}++happyReduce_187 = happySpecReduce_3  79# happyReduction_187+happyReduction_187 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_2 of { happy_var_2 -> +	happyIn83+		 (hsQuote happy_var_2+	)}++happyReduce_188 = happySpecReduce_3  79# happyReduction_188+happyReduction_188 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_2 of { happy_var_2 -> +	happyIn83+		 (hsSplice happy_var_2+	)}++happyReduce_189 = happySpecReduce_3  79# happyReduction_189+happyReduction_189 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_2 of { happy_var_2 -> +	happyIn83+		 (HsParen happy_var_2+	)}++happyReduce_190 = happySpecReduce_3  79# happyReduction_190+happyReduction_190 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut85 happy_x_2 of { happy_var_2 -> +	happyIn83+		 (HsTuple (reverse happy_var_2)+	)}++happyReduce_191 = happySpecReduce_3  79# happyReduction_191+happyReduction_191 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut86 happy_x_2 of { happy_var_2 -> +	happyIn83+		 (happy_var_2+	)}++happyReduce_192 = happyReduce 4# 79# happyReduction_192+happyReduction_192 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut75 happy_x_2 of { happy_var_2 -> +	case happyOut136 happy_x_3 of { happy_var_3 -> +	happyIn83+		 (HsLeftSection happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++happyReduce_193 = happyReduce 4# 79# happyReduction_193+happyReduction_193 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut137 happy_x_2 of { happy_var_2 -> +	case happyOut73 happy_x_3 of { happy_var_3 -> +	happyIn83+		 (HsRightSection happy_var_2 happy_var_3+	) `HappyStk` happyRest}}++happyReduce_194 = happySpecReduce_1  79# happyReduction_194+happyReduction_194 happy_x_1+	 =  happyIn83+		 (HsWildCard+	)++happyReduce_195 = happySpecReduce_2  80# happyReduction_195+happyReduction_195 happy_x_2+	happy_x_1+	 =  case happyOut84 happy_x_1 of { happy_var_1 -> +	happyIn84+		 (happy_var_1 + 1+	)}++happyReduce_196 = happySpecReduce_1  80# happyReduction_196+happyReduction_196 happy_x_1+	 =  happyIn84+		 (1+	)++happyReduce_197 = happySpecReduce_3  81# happyReduction_197+happyReduction_197 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut85 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn85+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_198 = happySpecReduce_3  81# happyReduction_198+happyReduction_198 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn85+		 ([happy_var_3,happy_var_1]+	)}}++happyReduce_199 = happySpecReduce_1  82# happyReduction_199+happyReduction_199 happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn86+		 (HsList [happy_var_1]+	)}++happyReduce_200 = happySpecReduce_1  82# happyReduction_200+happyReduction_200 happy_x_1+	 =  case happyOut87 happy_x_1 of { happy_var_1 -> +	happyIn86+		 (HsList (reverse happy_var_1)+	)}++happyReduce_201 = happySpecReduce_2  82# happyReduction_201+happyReduction_201 happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn86+		 (HsEnumFrom happy_var_1+	)}++happyReduce_202 = happyReduce 4# 82# happyReduction_202+happyReduction_202 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut72 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn86+		 (HsEnumFromThen happy_var_1 happy_var_3+	) `HappyStk` happyRest}}++happyReduce_203 = happySpecReduce_3  82# happyReduction_203+happyReduction_203 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn86+		 (HsEnumFromTo happy_var_1 happy_var_3+	)}}++happyReduce_204 = happyReduce 5# 82# happyReduction_204+happyReduction_204 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut72 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	case happyOut72 happy_x_5 of { happy_var_5 -> +	happyIn86+		 (HsEnumFromThenTo happy_var_1 happy_var_3 happy_var_5+	) `HappyStk` happyRest}}}++happyReduce_205 = happySpecReduce_3  82# happyReduction_205+happyReduction_205 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	case happyOut88 happy_x_3 of { happy_var_3 -> +	happyIn86+		 (HsListComp happy_var_1 (reverse happy_var_3)+	)}}++happyReduce_206 = happySpecReduce_3  83# happyReduction_206+happyReduction_206 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut87 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn87+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_207 = happySpecReduce_3  83# happyReduction_207+happyReduction_207 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn87+		 ([happy_var_3,happy_var_1]+	)}}++happyReduce_208 = happySpecReduce_3  84# happyReduction_208+happyReduction_208 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut88 happy_x_1 of { happy_var_1 -> +	case happyOut89 happy_x_3 of { happy_var_3 -> +	happyIn88+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_209 = happySpecReduce_1  84# happyReduction_209+happyReduction_209 happy_x_1+	 =  case happyOut89 happy_x_1 of { happy_var_1 -> +	happyIn88+		 ([happy_var_1]+	)}++happyReduce_210 = happyReduce 4# 85# happyReduction_210+happyReduction_210 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut97 happy_x_1 of { happy_var_1 -> +	case happyOut151 happy_x_2 of { happy_var_2 -> +	case happyOut72 happy_x_4 of { happy_var_4 -> +	happyIn89+		 (HsGenerator happy_var_2 happy_var_1 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_211 = happySpecReduce_1  85# happyReduction_211+happyReduction_211 happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn89+		 (HsQualifier happy_var_1+	)}++happyReduce_212 = happySpecReduce_2  85# happyReduction_212+happyReduction_212 happy_x_2+	happy_x_1+	 =  case happyOut36 happy_x_2 of { happy_var_2 -> +	happyIn89+		 (HsLetStmt happy_var_2+	)}++happyReduce_213 = happySpecReduce_3  86# happyReduction_213+happyReduction_213 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut91 happy_x_2 of { happy_var_2 -> +	happyIn90+		 (happy_var_2+	)}++happyReduce_214 = happySpecReduce_3  86# happyReduction_214+happyReduction_214 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut91 happy_x_2 of { happy_var_2 -> +	happyIn90+		 (happy_var_2+	)}++happyReduce_215 = happySpecReduce_3  87# happyReduction_215+happyReduction_215 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut92 happy_x_2 of { happy_var_2 -> +	happyIn91+		 (reverse happy_var_2+	)}++happyReduce_216 = happySpecReduce_3  88# happyReduction_216+happyReduction_216 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut92 happy_x_1 of { happy_var_1 -> +	case happyOut93 happy_x_3 of { happy_var_3 -> +	happyIn92+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_217 = happySpecReduce_1  88# happyReduction_217+happyReduction_217 happy_x_1+	 =  case happyOut93 happy_x_1 of { happy_var_1 -> +	happyIn92+		 ([happy_var_1]+	)}++happyReduce_218 = happyReduce 4# 89# happyReduction_218+happyReduction_218 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut97 happy_x_2 of { happy_var_2 -> +	case happyOut94 happy_x_3 of { happy_var_3 -> +	case happyOut68 happy_x_4 of { happy_var_4 -> +	happyIn93+		 (HsAlt happy_var_1 happy_var_2 happy_var_3 happy_var_4+	) `HappyStk` happyRest}}}}++happyReduce_219 = happySpecReduce_2  90# happyReduction_219+happyReduction_219 happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_2 of { happy_var_2 -> +	happyIn94+		 (HsUnGuardedAlt happy_var_2+	)}++happyReduce_220 = happySpecReduce_1  90# happyReduction_220+happyReduction_220 happy_x_1+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> +	happyIn94+		 (HsGuardedAlts (reverse happy_var_1)+	)}++happyReduce_221 = happySpecReduce_2  91# happyReduction_221+happyReduction_221 happy_x_2+	happy_x_1+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> +	case happyOut96 happy_x_2 of { happy_var_2 -> +	happyIn95+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_222 = happySpecReduce_1  91# happyReduction_222+happyReduction_222 happy_x_1+	 =  case happyOut96 happy_x_1 of { happy_var_1 -> +	happyIn95+		 ([happy_var_1]+	)}++happyReduce_223 = happyReduce 5# 92# happyReduction_223+happyReduction_223 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut73 happy_x_3 of { happy_var_3 -> +	case happyOut72 happy_x_5 of { happy_var_5 -> +	happyIn96+		 (HsGuardedAlt happy_var_1 happy_var_3 happy_var_5+	) `HappyStk` happyRest}}}++happyReduce_224 = happyMonadReduce 1# 93# happyReduction_224+happyReduction_224 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut75 happy_x_1 of { happy_var_1 -> +	( checkPattern happy_var_1)}+	) (\r -> happyReturn (happyIn97 r))++happyReduce_225 = happySpecReduce_3  94# happyReduction_225+happyReduction_225 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut99 happy_x_2 of { happy_var_2 -> +	happyIn98+		 (happy_var_2+	)}++happyReduce_226 = happySpecReduce_3  94# happyReduction_226+happyReduction_226 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut99 happy_x_2 of { happy_var_2 -> +	happyIn98+		 (happy_var_2+	)}++happyReduce_227 = happyReduce 4# 95# happyReduction_227+happyReduction_227 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut36 happy_x_2 of { happy_var_2 -> +	case happyOut99 happy_x_4 of { happy_var_4 -> +	happyIn99+		 (HsLetStmt happy_var_2 : happy_var_4+	) `HappyStk` happyRest}}++happyReduce_228 = happyReduce 6# 95# happyReduction_228+happyReduction_228 (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 happyOut97 happy_x_1 of { happy_var_1 -> +	case happyOut151 happy_x_2 of { happy_var_2 -> +	case happyOut72 happy_x_4 of { happy_var_4 -> +	case happyOut99 happy_x_6 of { happy_var_6 -> +	happyIn99+		 (HsGenerator happy_var_2 happy_var_1 happy_var_4 : happy_var_6+	) `HappyStk` happyRest}}}}++happyReduce_229 = happySpecReduce_3  95# happyReduction_229+happyReduction_229 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	case happyOut99 happy_x_3 of { happy_var_3 -> +	happyIn99+		 (HsQualifier happy_var_1 : happy_var_3+	)}}++happyReduce_230 = happySpecReduce_2  95# happyReduction_230+happyReduction_230 happy_x_2+	happy_x_1+	 =  case happyOut99 happy_x_2 of { happy_var_2 -> +	happyIn99+		 (happy_var_2+	)}++happyReduce_231 = happySpecReduce_2  95# happyReduction_231+happyReduction_231 happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn99+		 ([HsQualifier happy_var_1]+	)}++happyReduce_232 = happySpecReduce_1  95# happyReduction_232+happyReduction_232 happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn99+		 ([HsQualifier happy_var_1]+	)}++happyReduce_233 = happySpecReduce_3  96# happyReduction_233+happyReduction_233 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut100 happy_x_1 of { happy_var_1 -> +	case happyOut101 happy_x_3 of { happy_var_3 -> +	happyIn100+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_234 = happySpecReduce_1  96# happyReduction_234+happyReduction_234 happy_x_1+	 =  case happyOut101 happy_x_1 of { happy_var_1 -> +	happyIn100+		 ([happy_var_1]+	)}++happyReduce_235 = happySpecReduce_3  97# happyReduction_235+happyReduction_235 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn101+		 (HsFieldUpdate happy_var_1 happy_var_3+	)}}++happyReduce_236 = happySpecReduce_3  98# happyReduction_236+happyReduction_236 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn102+		 (ArrSyn.Input happy_var_1 happy_var_3+	)}}++happyReduce_237 = happySpecReduce_3  98# happyReduction_237+happyReduction_237 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn102+		 (ArrSyn.Input happy_var_1 happy_var_3+	)}}++happyReduce_238 = happySpecReduce_3  98# happyReduction_238+happyReduction_238 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn102+		 (ArrSyn.Input happy_var_3 happy_var_1+	)}}++happyReduce_239 = happySpecReduce_3  98# happyReduction_239+happyReduction_239 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	happyIn102+		 (ArrSyn.Input happy_var_3 happy_var_1+	)}}++happyReduce_240 = happySpecReduce_1  98# happyReduction_240+happyReduction_240 happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	happyIn102+		 (happy_var_1+	)}++happyReduce_241 = happySpecReduce_1  99# happyReduction_241+happyReduction_241 happy_x_1+	 =  case happyOut104 happy_x_1 of { happy_var_1 -> +	happyIn103+		 (happy_var_1+	)}++happyReduce_242 = happySpecReduce_1  99# happyReduction_242+happyReduction_242 happy_x_1+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> +	happyIn103+		 (happy_var_1+	)}++happyReduce_243 = happySpecReduce_3  100# happyReduction_243+happyReduction_243 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> +	case happyOut136 happy_x_2 of { happy_var_2 -> +	case happyOut106 happy_x_3 of { happy_var_3 -> +	happyIn104+		 (ArrSyn.InfixOp happy_var_1 happy_var_2 happy_var_3+	)}}}++happyReduce_244 = happySpecReduce_1  100# happyReduction_244+happyReduction_244 happy_x_1+	 =  case happyOut106 happy_x_1 of { happy_var_1 -> +	happyIn104+		 (happy_var_1+	)}++happyReduce_245 = happySpecReduce_3  101# happyReduction_245+happyReduction_245 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> +	case happyOut136 happy_x_2 of { happy_var_2 -> +	case happyOut107 happy_x_3 of { happy_var_3 -> +	happyIn105+		 (ArrSyn.InfixOp happy_var_1 happy_var_2 happy_var_3+	)}}}++happyReduce_246 = happySpecReduce_1  101# happyReduction_246+happyReduction_246 happy_x_1+	 =  case happyOut107 happy_x_1 of { happy_var_1 -> +	happyIn105+		 (happy_var_1+	)}++happyReduce_247 = happyReduce 5# 102# happyReduction_247+happyReduction_247 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_2 of { happy_var_2 -> +	case happyOut79 happy_x_3 of { happy_var_3 -> +	case happyOut102 happy_x_5 of { happy_var_5 -> +	happyIn106+		 (ArrSyn.Kappa happy_var_2 (reverse happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}++happyReduce_248 = happyReduce 4# 102# happyReduction_248+happyReduction_248 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut36 happy_x_2 of { happy_var_2 -> +	case happyOut102 happy_x_4 of { happy_var_4 -> +	happyIn106+		 (ArrSyn.Let happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_249 = happyReduce 4# 102# happyReduction_249+happyReduction_249 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut121 happy_x_2 of { happy_var_2 -> +	case happyOut102 happy_x_4 of { happy_var_4 -> +	happyIn106+		 (ArrSyn.LetCmd happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_250 = happyReduce 6# 102# happyReduction_250+happyReduction_250 (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 happyOut72 happy_x_2 of { happy_var_2 -> +	case happyOut102 happy_x_4 of { happy_var_4 -> +	case happyOut102 happy_x_6 of { happy_var_6 -> +	happyIn106+		 (ArrSyn.If happy_var_2 happy_var_4 happy_var_6+	) `HappyStk` happyRest}}}++happyReduce_251 = happyReduce 4# 103# happyReduction_251+happyReduction_251 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut72 happy_x_2 of { happy_var_2 -> +	case happyOut111 happy_x_4 of { happy_var_4 -> +	happyIn107+		 (ArrSyn.Case happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_252 = happySpecReduce_2  103# happyReduction_252+happyReduction_252 happy_x_2+	happy_x_1+	 =  case happyOut118 happy_x_2 of { happy_var_2 -> +	happyIn107+		 (ArrSyn.Do (fst happy_var_2) (snd happy_var_2)+	)}++happyReduce_253 = happySpecReduce_1  103# happyReduction_253+happyReduction_253 happy_x_1+	 =  case happyOut108 happy_x_1 of { happy_var_1 -> +	happyIn107+		 (happy_var_1+	)}++happyReduce_254 = happySpecReduce_2  104# happyReduction_254+happyReduction_254 happy_x_2+	happy_x_1+	 =  case happyOut108 happy_x_1 of { happy_var_1 -> +	case happyOut81 happy_x_2 of { happy_var_2 -> +	happyIn108+		 (ArrSyn.App happy_var_1 happy_var_2+	)}}++happyReduce_255 = happySpecReduce_1  104# happyReduction_255+happyReduction_255 happy_x_1+	 =  case happyOut109 happy_x_1 of { happy_var_1 -> +	happyIn108+		 (happy_var_1+	)}++happyReduce_256 = happySpecReduce_3  105# happyReduction_256+happyReduction_256 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut102 happy_x_2 of { happy_var_2 -> +	happyIn109+		 (ArrSyn.Paren happy_var_2+	)}++happyReduce_257 = happyReduce 4# 105# happyReduction_257+happyReduction_257 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut81 happy_x_2 of { happy_var_2 -> +	case happyOut110 happy_x_3 of { happy_var_3 -> +	happyIn109+		 (ArrSyn.Op happy_var_2 (reverse happy_var_3)+	) `HappyStk` happyRest}}++happyReduce_258 = happySpecReduce_2  105# happyReduction_258+happyReduction_258 happy_x_2+	happy_x_1+	 =  case happyOut140 happy_x_2 of { happy_var_2 -> +	happyIn109+		 (ArrSyn.CmdVar happy_var_2+	)}++happyReduce_259 = happySpecReduce_2  106# happyReduction_259+happyReduction_259 happy_x_2+	happy_x_1+	 =  case happyOut110 happy_x_1 of { happy_var_1 -> +	case happyOut109 happy_x_2 of { happy_var_2 -> +	happyIn110+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_260 = happySpecReduce_1  106# happyReduction_260+happyReduction_260 happy_x_1+	 =  case happyOut109 happy_x_1 of { happy_var_1 -> +	happyIn110+		 ([happy_var_1]+	)}++happyReduce_261 = happySpecReduce_3  107# happyReduction_261+happyReduction_261 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut112 happy_x_2 of { happy_var_2 -> +	happyIn111+		 (happy_var_2+	)}++happyReduce_262 = happySpecReduce_3  107# happyReduction_262+happyReduction_262 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut112 happy_x_2 of { happy_var_2 -> +	happyIn111+		 (happy_var_2+	)}++happyReduce_263 = happySpecReduce_3  108# happyReduction_263+happyReduction_263 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut113 happy_x_2 of { happy_var_2 -> +	happyIn112+		 (reverse happy_var_2+	)}++happyReduce_264 = happySpecReduce_3  109# happyReduction_264+happyReduction_264 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut113 happy_x_1 of { happy_var_1 -> +	case happyOut114 happy_x_3 of { happy_var_3 -> +	happyIn113+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_265 = happySpecReduce_1  109# happyReduction_265+happyReduction_265 happy_x_1+	 =  case happyOut114 happy_x_1 of { happy_var_1 -> +	happyIn113+		 ([happy_var_1]+	)}++happyReduce_266 = happyReduce 4# 110# happyReduction_266+happyReduction_266 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut97 happy_x_2 of { happy_var_2 -> +	case happyOut115 happy_x_3 of { happy_var_3 -> +	case happyOut68 happy_x_4 of { happy_var_4 -> +	happyIn114+		 (ArrSyn.Alt happy_var_1 happy_var_2 happy_var_3 happy_var_4+	) `HappyStk` happyRest}}}}++happyReduce_267 = happySpecReduce_2  111# happyReduction_267+happyReduction_267 happy_x_2+	happy_x_1+	 =  case happyOut102 happy_x_2 of { happy_var_2 -> +	happyIn115+		 (ArrSyn.UnGuardedAlt happy_var_2+	)}++happyReduce_268 = happySpecReduce_1  111# happyReduction_268+happyReduction_268 happy_x_1+	 =  case happyOut116 happy_x_1 of { happy_var_1 -> +	happyIn115+		 (ArrSyn.GuardedAlts (reverse happy_var_1)+	)}++happyReduce_269 = happySpecReduce_2  112# happyReduction_269+happyReduction_269 happy_x_2+	happy_x_1+	 =  case happyOut116 happy_x_1 of { happy_var_1 -> +	case happyOut117 happy_x_2 of { happy_var_2 -> +	happyIn116+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_270 = happySpecReduce_1  112# happyReduction_270+happyReduction_270 happy_x_1+	 =  case happyOut117 happy_x_1 of { happy_var_1 -> +	happyIn116+		 ([happy_var_1]+	)}++happyReduce_271 = happyReduce 5# 113# happyReduction_271+happyReduction_271 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut73 happy_x_3 of { happy_var_3 -> +	case happyOut102 happy_x_5 of { happy_var_5 -> +	happyIn117+		 (ArrSyn.GuardedAlt happy_var_1 happy_var_3 happy_var_5+	) `HappyStk` happyRest}}}++happyReduce_272 = happySpecReduce_3  114# happyReduction_272+happyReduction_272 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	happyIn118+		 (happy_var_2+	)}++happyReduce_273 = happySpecReduce_3  114# happyReduction_273+happyReduction_273 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	happyIn118+		 (happy_var_2+	)}++happyReduce_274 = happySpecReduce_3  115# happyReduction_274+happyReduction_274 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut120 happy_x_1 of { happy_var_1 -> +	case happyOut119 happy_x_3 of { happy_var_3 -> +	happyIn119+		 ((happy_var_1 : fst happy_var_3, snd happy_var_3)+	)}}++happyReduce_275 = happySpecReduce_3  115# happyReduction_275+happyReduction_275 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut102 happy_x_1 of { happy_var_1 -> +	case happyOut119 happy_x_3 of { happy_var_3 -> +	happyIn119+		 ((ArrSyn.Generator undefined HsPWildCard happy_var_1 : fst happy_var_3, snd happy_var_3)+	)}}++happyReduce_276 = happyReduce 4# 115# happyReduction_276+happyReduction_276 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut36 happy_x_2 of { happy_var_2 -> +	case happyOut119 happy_x_4 of { happy_var_4 -> +	happyIn119+		 ((ArrSyn.LetStmt happy_var_2 : fst happy_var_4, snd happy_var_4)+	) `HappyStk` happyRest}}++happyReduce_277 = happySpecReduce_2  115# happyReduction_277+happyReduction_277 happy_x_2+	happy_x_1+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> +	happyIn119+		 (happy_var_2+	)}++happyReduce_278 = happySpecReduce_2  115# happyReduction_278+happyReduction_278 happy_x_2+	happy_x_1+	 =  case happyOut102 happy_x_1 of { happy_var_1 -> +	happyIn119+		 (([], happy_var_1)+	)}++happyReduce_279 = happySpecReduce_1  115# happyReduction_279+happyReduction_279 happy_x_1+	 =  case happyOut102 happy_x_1 of { happy_var_1 -> +	happyIn119+		 (([], happy_var_1)+	)}++happyReduce_280 = happyReduce 4# 116# happyReduction_280+happyReduction_280 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut97 happy_x_1 of { happy_var_1 -> +	case happyOut151 happy_x_2 of { happy_var_2 -> +	case happyOut102 happy_x_4 of { happy_var_4 -> +	happyIn120+		 (ArrSyn.Generator happy_var_2 happy_var_1 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_281 = happyReduce 4# 116# happyReduction_281+happyReduction_281 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut102 happy_x_1 of { happy_var_1 -> +	case happyOut151 happy_x_3 of { happy_var_3 -> +	case happyOut97 happy_x_4 of { happy_var_4 -> +	happyIn120+		 (ArrSyn.Generator happy_var_3 happy_var_4 happy_var_1+	) `HappyStk` happyRest}}}++happyReduce_282 = happySpecReduce_2  116# happyReduction_282+happyReduction_282 happy_x_2+	happy_x_1+	 =  case happyOut122 happy_x_2 of { happy_var_2 -> +	happyIn120+		 (ArrSyn.RecStmt (reverse happy_var_2)+	)}++happyReduce_283 = happySpecReduce_2  116# happyReduction_283+happyReduction_283 happy_x_2+	happy_x_1+	 =  case happyOut121 happy_x_2 of { happy_var_2 -> +	happyIn120+		 (ArrSyn.LetCmdStmt happy_var_2+	)}++happyReduce_284 = happyReduce 5# 117# happyReduction_284+happyReduction_284 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut151 happy_x_1 of { happy_var_1 -> +	case happyOut140 happy_x_3 of { happy_var_3 -> +	case happyOut102 happy_x_5 of { happy_var_5 -> +	happyIn121+		 (ArrSyn.VarDecl happy_var_1 happy_var_3 happy_var_5+	) `HappyStk` happyRest}}}++happyReduce_285 = happySpecReduce_3  118# happyReduction_285+happyReduction_285 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut123 happy_x_2 of { happy_var_2 -> +	happyIn122+		 (happy_var_2+	)}++happyReduce_286 = happySpecReduce_3  118# happyReduction_286+happyReduction_286 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut123 happy_x_2 of { happy_var_2 -> +	happyIn122+		 (happy_var_2+	)}++happyReduce_287 = happySpecReduce_3  119# happyReduction_287+happyReduction_287 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut123 happy_x_1 of { happy_var_1 -> +	case happyOut124 happy_x_3 of { happy_var_3 -> +	happyIn123+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_288 = happySpecReduce_1  119# happyReduction_288+happyReduction_288 happy_x_1+	 =  case happyOut124 happy_x_1 of { happy_var_1 -> +	happyIn123+		 ([happy_var_1]+	)}++happyReduce_289 = happySpecReduce_1  120# happyReduction_289+happyReduction_289 happy_x_1+	 =  case happyOut120 happy_x_1 of { happy_var_1 -> +	happyIn124+		 (happy_var_1+	)}++happyReduce_290 = happySpecReduce_2  120# happyReduction_290+happyReduction_290 happy_x_2+	happy_x_1+	 =  case happyOut36 happy_x_2 of { happy_var_2 -> +	happyIn124+		 (ArrSyn.LetStmt happy_var_2+	)}++happyReduce_291 = happySpecReduce_2  121# happyReduction_291+happyReduction_291 happy_x_2+	happy_x_1+	 =  happyIn125+		 (unit_con+	)++happyReduce_292 = happySpecReduce_2  121# happyReduction_292+happyReduction_292 happy_x_2+	happy_x_1+	 =  happyIn125+		 (HsList []+	)++happyReduce_293 = happySpecReduce_3  121# happyReduction_293+happyReduction_293 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut84 happy_x_2 of { happy_var_2 -> +	happyIn125+		 (tuple_con happy_var_2+	)}++happyReduce_294 = happySpecReduce_1  121# happyReduction_294+happyReduction_294 happy_x_1+	 =  case happyOut129 happy_x_1 of { happy_var_1 -> +	happyIn125+		 (HsCon happy_var_1+	)}++happyReduce_295 = happySpecReduce_1  122# happyReduction_295+happyReduction_295 happy_x_1+	 =  case happyOut140 happy_x_1 of { happy_var_1 -> +	happyIn126+		 (happy_var_1+	)}++happyReduce_296 = happySpecReduce_3  122# happyReduction_296+happyReduction_296 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut147 happy_x_2 of { happy_var_2 -> +	happyIn126+		 (happy_var_2+	)}++happyReduce_297 = happySpecReduce_1  123# happyReduction_297+happyReduction_297 happy_x_1+	 =  case happyOut139 happy_x_1 of { happy_var_1 -> +	happyIn127+		 (happy_var_1+	)}++happyReduce_298 = happySpecReduce_3  123# happyReduction_298+happyReduction_298 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut145 happy_x_2 of { happy_var_2 -> +	happyIn127+		 (happy_var_2+	)}++happyReduce_299 = happySpecReduce_1  124# happyReduction_299+happyReduction_299 happy_x_1+	 =  case happyOut142 happy_x_1 of { happy_var_1 -> +	happyIn128+		 (happy_var_1+	)}++happyReduce_300 = happySpecReduce_3  124# happyReduction_300+happyReduction_300 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut144 happy_x_2 of { happy_var_2 -> +	happyIn128+		 (happy_var_2+	)}++happyReduce_301 = happySpecReduce_1  125# happyReduction_301+happyReduction_301 happy_x_1+	 =  case happyOut141 happy_x_1 of { happy_var_1 -> +	happyIn129+		 (happy_var_1+	)}++happyReduce_302 = happySpecReduce_3  125# happyReduction_302+happyReduction_302 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut138 happy_x_2 of { happy_var_2 -> +	happyIn129+		 (happy_var_2+	)}++happyReduce_303 = happySpecReduce_1  126# happyReduction_303+happyReduction_303 happy_x_1+	 =  case happyOut147 happy_x_1 of { happy_var_1 -> +	happyIn130+		 (happy_var_1+	)}++happyReduce_304 = happySpecReduce_3  126# happyReduction_304+happyReduction_304 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut140 happy_x_2 of { happy_var_2 -> +	happyIn130+		 (happy_var_2+	)}++happyReduce_305 = happySpecReduce_1  127# happyReduction_305+happyReduction_305 happy_x_1+	 =  case happyOut145 happy_x_1 of { happy_var_1 -> +	happyIn131+		 (happy_var_1+	)}++happyReduce_306 = happySpecReduce_3  127# happyReduction_306+happyReduction_306 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut139 happy_x_2 of { happy_var_2 -> +	happyIn131+		 (happy_var_2+	)}++happyReduce_307 = happySpecReduce_1  128# happyReduction_307+happyReduction_307 happy_x_1+	 =  case happyOut146 happy_x_1 of { happy_var_1 -> +	happyIn132+		 (happy_var_1+	)}++happyReduce_308 = happySpecReduce_3  128# happyReduction_308+happyReduction_308 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut139 happy_x_2 of { happy_var_2 -> +	happyIn132+		 (happy_var_2+	)}++happyReduce_309 = happySpecReduce_1  129# happyReduction_309+happyReduction_309 happy_x_1+	 =  case happyOut144 happy_x_1 of { happy_var_1 -> +	happyIn133+		 (happy_var_1+	)}++happyReduce_310 = happySpecReduce_3  129# happyReduction_310+happyReduction_310 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut142 happy_x_2 of { happy_var_2 -> +	happyIn133+		 (happy_var_2+	)}++happyReduce_311 = happySpecReduce_1  130# happyReduction_311+happyReduction_311 happy_x_1+	 =  case happyOut138 happy_x_1 of { happy_var_1 -> +	happyIn134+		 (happy_var_1+	)}++happyReduce_312 = happySpecReduce_3  130# happyReduction_312+happyReduction_312 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut141 happy_x_2 of { happy_var_2 -> +	happyIn134+		 (happy_var_2+	)}++happyReduce_313 = happySpecReduce_1  131# happyReduction_313+happyReduction_313 happy_x_1+	 =  case happyOut130 happy_x_1 of { happy_var_1 -> +	happyIn135+		 (HsVarOp happy_var_1+	)}++happyReduce_314 = happySpecReduce_1  131# happyReduction_314+happyReduction_314 happy_x_1+	 =  case happyOut133 happy_x_1 of { happy_var_1 -> +	happyIn135+		 (HsConOp happy_var_1+	)}++happyReduce_315 = happySpecReduce_1  132# happyReduction_315+happyReduction_315 happy_x_1+	 =  case happyOut131 happy_x_1 of { happy_var_1 -> +	happyIn136+		 (HsQVarOp happy_var_1+	)}++happyReduce_316 = happySpecReduce_1  132# happyReduction_316+happyReduction_316 happy_x_1+	 =  case happyOut134 happy_x_1 of { happy_var_1 -> +	happyIn136+		 (HsQConOp happy_var_1+	)}++happyReduce_317 = happySpecReduce_1  133# happyReduction_317+happyReduction_317 happy_x_1+	 =  case happyOut132 happy_x_1 of { happy_var_1 -> +	happyIn137+		 (HsQVarOp happy_var_1+	)}++happyReduce_318 = happySpecReduce_1  133# happyReduction_318+happyReduction_318 happy_x_1+	 =  case happyOut134 happy_x_1 of { happy_var_1 -> +	happyIn137+		 (HsQConOp happy_var_1+	)}++happyReduce_319 = happySpecReduce_1  134# happyReduction_319+happyReduction_319 happy_x_1+	 =  happyIn138+		 (list_cons_name+	)++happyReduce_320 = happySpecReduce_1  134# happyReduction_320+happyReduction_320 happy_x_1+	 =  case happyOut143 happy_x_1 of { happy_var_1 -> +	happyIn138+		 (happy_var_1+	)}++happyReduce_321 = happySpecReduce_1  135# happyReduction_321+happyReduction_321 happy_x_1+	 =  case happyOut140 happy_x_1 of { happy_var_1 -> +	happyIn139+		 (UnQual happy_var_1+	)}++happyReduce_322 = happySpecReduce_1  135# happyReduction_322+happyReduction_322 happy_x_1+	 =  case happyOutTok happy_x_1 of { (QVarId happy_var_1) -> +	happyIn139+		 (Qual (Module (fst happy_var_1)) (HsIdent (snd happy_var_1))+	)}++happyReduce_323 = happySpecReduce_1  136# happyReduction_323+happyReduction_323 happy_x_1+	 =  case happyOutTok happy_x_1 of { (VarId happy_var_1) -> +	happyIn140+		 (HsIdent happy_var_1+	)}++happyReduce_324 = happySpecReduce_1  136# happyReduction_324+happyReduction_324 happy_x_1+	 =  happyIn140+		 (HsIdent "as"+	)++happyReduce_325 = happySpecReduce_1  136# happyReduction_325+happyReduction_325 happy_x_1+	 =  happyIn140+		 (HsIdent "export"+	)++happyReduce_326 = happySpecReduce_1  136# happyReduction_326+happyReduction_326 happy_x_1+	 =  happyIn140+		 (HsIdent "hiding"+	)++happyReduce_327 = happySpecReduce_1  136# happyReduction_327+happyReduction_327 happy_x_1+	 =  happyIn140+		 (HsIdent "qualified"+	)++happyReduce_328 = happySpecReduce_1  136# happyReduction_328+happyReduction_328 happy_x_1+	 =  happyIn140+		 (HsIdent "safe"+	)++happyReduce_329 = happySpecReduce_1  136# happyReduction_329+happyReduction_329 happy_x_1+	 =  happyIn140+		 (HsIdent "unsafe"+	)++happyReduce_330 = happySpecReduce_1  137# happyReduction_330+happyReduction_330 happy_x_1+	 =  case happyOut142 happy_x_1 of { happy_var_1 -> +	happyIn141+		 (UnQual happy_var_1+	)}++happyReduce_331 = happySpecReduce_1  137# happyReduction_331+happyReduction_331 happy_x_1+	 =  case happyOutTok happy_x_1 of { (QConId happy_var_1) -> +	happyIn141+		 (Qual (Module (fst happy_var_1)) (HsIdent (snd happy_var_1))+	)}++happyReduce_332 = happySpecReduce_1  138# happyReduction_332+happyReduction_332 happy_x_1+	 =  case happyOutTok happy_x_1 of { (ConId happy_var_1) -> +	happyIn142+		 (HsIdent happy_var_1+	)}++happyReduce_333 = happySpecReduce_1  139# happyReduction_333+happyReduction_333 happy_x_1+	 =  case happyOut144 happy_x_1 of { happy_var_1 -> +	happyIn143+		 (UnQual happy_var_1+	)}++happyReduce_334 = happySpecReduce_1  139# happyReduction_334+happyReduction_334 happy_x_1+	 =  case happyOutTok happy_x_1 of { (QConSym happy_var_1) -> +	happyIn143+		 (Qual (Module (fst happy_var_1)) (HsSymbol (snd happy_var_1))+	)}++happyReduce_335 = happySpecReduce_1  140# happyReduction_335+happyReduction_335 happy_x_1+	 =  case happyOutTok happy_x_1 of { (ConSym happy_var_1) -> +	happyIn144+		 (HsSymbol happy_var_1+	)}++happyReduce_336 = happySpecReduce_1  141# happyReduction_336+happyReduction_336 happy_x_1+	 =  case happyOut147 happy_x_1 of { happy_var_1 -> +	happyIn145+		 (UnQual happy_var_1+	)}++happyReduce_337 = happySpecReduce_1  141# happyReduction_337+happyReduction_337 happy_x_1+	 =  case happyOut149 happy_x_1 of { happy_var_1 -> +	happyIn145+		 (happy_var_1+	)}++happyReduce_338 = happySpecReduce_1  142# happyReduction_338+happyReduction_338 happy_x_1+	 =  case happyOut148 happy_x_1 of { happy_var_1 -> +	happyIn146+		 (UnQual happy_var_1+	)}++happyReduce_339 = happySpecReduce_1  142# happyReduction_339+happyReduction_339 happy_x_1+	 =  case happyOut149 happy_x_1 of { happy_var_1 -> +	happyIn146+		 (happy_var_1+	)}++happyReduce_340 = happySpecReduce_1  143# happyReduction_340+happyReduction_340 happy_x_1+	 =  case happyOutTok happy_x_1 of { (VarSym happy_var_1) -> +	happyIn147+		 (HsSymbol happy_var_1+	)}++happyReduce_341 = happySpecReduce_1  143# happyReduction_341+happyReduction_341 happy_x_1+	 =  happyIn147+		 (HsSymbol "-"+	)++happyReduce_342 = happySpecReduce_1  143# happyReduction_342+happyReduction_342 happy_x_1+	 =  happyIn147+		 (HsSymbol "!"+	)++happyReduce_343 = happySpecReduce_1  144# happyReduction_343+happyReduction_343 happy_x_1+	 =  case happyOutTok happy_x_1 of { (VarSym happy_var_1) -> +	happyIn148+		 (HsSymbol happy_var_1+	)}++happyReduce_344 = happySpecReduce_1  144# happyReduction_344+happyReduction_344 happy_x_1+	 =  happyIn148+		 (HsSymbol "!"+	)++happyReduce_345 = happySpecReduce_1  145# happyReduction_345+happyReduction_345 happy_x_1+	 =  case happyOutTok happy_x_1 of { (QVarSym happy_var_1) -> +	happyIn149+		 (Qual (Module (fst happy_var_1)) (HsSymbol (snd happy_var_1))+	)}++happyReduce_346 = happySpecReduce_1  146# happyReduction_346+happyReduction_346 happy_x_1+	 =  case happyOutTok happy_x_1 of { (IntTok happy_var_1) -> +	happyIn150+		 (HsInt happy_var_1+	)}++happyReduce_347 = happySpecReduce_1  146# happyReduction_347+happyReduction_347 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Character happy_var_1) -> +	happyIn150+		 (HsChar happy_var_1+	)}++happyReduce_348 = happySpecReduce_1  146# happyReduction_348+happyReduction_348 happy_x_1+	 =  case happyOutTok happy_x_1 of { (FloatTok happy_var_1) -> +	happyIn150+		 (HsFrac happy_var_1+	)}++happyReduce_349 = happySpecReduce_1  146# happyReduction_349+happyReduction_349 happy_x_1+	 =  case happyOutTok happy_x_1 of { (StringTok happy_var_1) -> +	happyIn150+		 (HsString happy_var_1+	)}++happyReduce_350 = happyMonadReduce 0# 147# happyReduction_350+happyReduction_350 (happyRest) tk+	 = happyThen (( getSrcLoc)+	) (\r -> happyReturn (happyIn151 r))++happyReduce_351 = happyMonadReduce 0# 148# happyReduction_351+happyReduction_351 (happyRest) tk+	 = happyThen (( pushCurrentContext)+	) (\r -> happyReturn (happyIn152 r))++happyReduce_352 = happySpecReduce_1  149# happyReduction_352+happyReduction_352 happy_x_1+	 =  happyIn153+		 (()+	)++happyReduce_353 = happyMonadReduce 1# 149# happyReduction_353+happyReduction_353 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (( popContext)+	) (\r -> happyReturn (happyIn153 r))++happyReduce_354 = happySpecReduce_1  150# happyReduction_354+happyReduction_354 happy_x_1+	 =  case happyOutTok happy_x_1 of { (ConId happy_var_1) -> +	happyIn154+		 (Module happy_var_1+	)}++happyReduce_355 = happySpecReduce_1  150# happyReduction_355+happyReduction_355 happy_x_1+	 =  case happyOutTok happy_x_1 of { (QConId happy_var_1) -> +	happyIn154+		 (Module (fst happy_var_1 ++ '.':snd happy_var_1)+	)}++happyReduce_356 = happySpecReduce_1  151# happyReduction_356+happyReduction_356 happy_x_1+	 =  case happyOut142 happy_x_1 of { happy_var_1 -> +	happyIn155+		 (happy_var_1+	)}++happyReduce_357 = happySpecReduce_1  152# happyReduction_357+happyReduction_357 happy_x_1+	 =  case happyOut142 happy_x_1 of { happy_var_1 -> +	happyIn156+		 (happy_var_1+	)}++happyReduce_358 = happySpecReduce_1  153# happyReduction_358+happyReduction_358 happy_x_1+	 =  case happyOut141 happy_x_1 of { happy_var_1 -> +	happyIn157+		 (happy_var_1+	)}++happyReduce_359 = happySpecReduce_1  154# happyReduction_359+happyReduction_359 happy_x_1+	 =  case happyOut141 happy_x_1 of { happy_var_1 -> +	happyIn158+		 (happy_var_1+	)}++happyReduce_360 = happySpecReduce_1  155# happyReduction_360+happyReduction_360 happy_x_1+	 =  case happyOut140 happy_x_1 of { happy_var_1 -> +	happyIn159+		 (happy_var_1+	)}++happyNewToken action sts stk+	= lexer(\tk -> +	let cont i = happyDoAction i tk action sts stk in+	case tk of {+	EOF -> happyDoAction 77# tk action sts stk;+	VarId happy_dollar_dollar -> cont 1#;+	QVarId happy_dollar_dollar -> cont 2#;+	ConId happy_dollar_dollar -> cont 3#;+	QConId happy_dollar_dollar -> cont 4#;+	VarSym happy_dollar_dollar -> cont 5#;+	ConSym happy_dollar_dollar -> cont 6#;+	QVarSym happy_dollar_dollar -> cont 7#;+	QConSym happy_dollar_dollar -> cont 8#;+	IntTok happy_dollar_dollar -> cont 9#;+	FloatTok happy_dollar_dollar -> cont 10#;+	Character happy_dollar_dollar -> cont 11#;+	StringTok happy_dollar_dollar -> cont 12#;+	LeftParen -> cont 13#;+	RightParen -> cont 14#;+	SemiColon -> cont 15#;+	LeftCurly -> cont 16#;+	RightCurly -> cont 17#;+	VRightCurly -> cont 18#;+	LeftSquare -> cont 19#;+	RightSquare -> cont 20#;+	Splice -> cont 21#;+	LeftQuote -> cont 22#;+	RightQuote -> cont 23#;+	Comma -> cont 24#;+	Underscore -> cont 25#;+	BackQuote -> cont 26#;+	DotDot -> cont 27#;+	Colon -> cont 28#;+	DoubleColon -> cont 29#;+	Equals -> cont 30#;+	Backslash -> cont 31#;+	Bar -> cont 32#;+	LeftArrow -> cont 33#;+	RightArrow -> cont 34#;+	At -> cont 35#;+	Tilde -> cont 36#;+	DoubleArrow -> cont 37#;+	LeftArrowTail -> cont 38#;+	RightArrowTail -> cont 39#;+	LeftArrowDTail -> cont 40#;+	RightArrowDTail -> cont 41#;+	LeftBanana -> cont 42#;+	RightBanana -> cont 43#;+	Minus -> cont 44#;+	Exclamation -> cont 45#;+	KW_Case -> cont 46#;+	KW_Class -> cont 47#;+	KW_Data -> cont 48#;+	KW_Default -> cont 49#;+	KW_Deriving -> cont 50#;+	KW_Do -> cont 51#;+	KW_Else -> cont 52#;+	KW_Foreign -> cont 53#;+	KW_If -> cont 54#;+	KW_Import -> cont 55#;+	KW_In -> cont 56#;+	KW_Infix -> cont 57#;+	KW_InfixL -> cont 58#;+	KW_InfixR -> cont 59#;+	KW_Instance -> cont 60#;+	KW_Let -> cont 61#;+	KW_Module -> cont 62#;+	KW_NewType -> cont 63#;+	KW_Of -> cont 64#;+	KW_Then -> cont 65#;+	KW_Type -> cont 66#;+	KW_Where -> cont 67#;+	KW_As -> cont 68#;+	KW_Export -> cont 69#;+	KW_Hiding -> cont 70#;+	KW_Qualified -> cont 71#;+	KW_Safe -> cont 72#;+	KW_Unsafe -> cont 73#;+	KW_Proc -> cont 74#;+	KW_Rec -> cont 75#;+	KW_Cmd -> cont 76#;+	_ -> happyError' tk+	})++happyError_ tk = happyError' tk++happyThen :: () => P a -> (a -> P b) -> P b+happyThen = (>>=)+happyReturn :: () => a -> P a+happyReturn = (return)+happyThen1 = happyThen+happyReturn1 :: () => a -> P a+happyReturn1 = happyReturn+happyError' :: () => (Token) -> P a+happyError' tk = (\token -> happyError) tk++parse = happySomeParser where+  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut4 x))++happySeq = happyDontSeq+++happyError :: P a+happyError = fail "Parse error"++-- | Parse of a string, which should contain a complete Haskell 98 module.+parseModule :: String -> ParseResult HsModule+parseModule = runParser parse++-- | Parse of a string, which should contain a complete Haskell 98 module.+parseModuleWithMode :: ParseMode -> String -> ParseResult HsModule+parseModuleWithMode mode = runParserWithMode mode parse+{-# 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 ++{-# LINE 28 "templates/GenericTemplate.hs" #-}+++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList++++++{-# LINE 49 "templates/GenericTemplate.hs" #-}++{-# LINE 59 "templates/GenericTemplate.hs" #-}++{-# LINE 68 "templates/GenericTemplate.hs" #-}++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is 0#, it means we've just accepted a partial+-- parse (a %partial parser).  We must ignore the saved token on the top of+-- the stack in this case.+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+	happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = +	(happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+	= {- nothing -}+++	  case action of+		0#		  -> {- nothing -}+				     happyFail i tk st+		-1# 	  -> {- nothing -}+				     happyAccept i tk st+		n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}++				     (happyReduceArr Happy_Data_Array.! rule) i tk st+				     where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))+		n		  -> {- nothing -}+++				     happyShift new_state i tk st+				     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+   where off    = indexShortOffAddr happyActOffsets st+	 off_i  = (off Happy_GHC_Exts.+# i)+	 check  = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))+			then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==#  i)+			else False+ 	 action | check     = indexShortOffAddr happyTable off_i+		| otherwise = indexShortOffAddr happyDefActions st++{-# LINE 127 "templates/GenericTemplate.hs" #-}+++indexShortOffAddr (HappyA# arr) off =+#if __GLASGOW_HASKELL__ > 500+	Happy_GHC_Exts.narrow16Int# i+#elif __GLASGOW_HASKELL__ == 500+	Happy_GHC_Exts.intToInt16# i+#else+	Happy_GHC_Exts.iShiftRA# (Happy_GHC_Exts.iShiftL# i 16#) 16#+#endif+  where+#if __GLASGOW_HASKELL__ >= 503+	i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+#else+	i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.shiftL# high 8#) low)+#endif+	high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))+	low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))+	off' = off Happy_GHC_Exts.*# 2#++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++{-# LINE 170 "templates/GenericTemplate.hs" #-}++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+--     trace "shifting the error token" $+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+     = let r = fn v1 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+     = let r = fn v1 v2 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+     = let r = fn v1 v2 v3 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of+	 sts1@((HappyCons (st1@(action)) (_))) ->+        	let r = fn stk in  -- it doesn't hurt to always seq here...+       		happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+        happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))+       where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk++happyMonad2Reduce k nt fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+       happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))+       where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk++             off    = indexShortOffAddr happyGotoOffsets st1+             off_i  = (off Happy_GHC_Exts.+# nt)+             new_state = indexShortOffAddr happyTable off_i+++++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = +   {- nothing -}+   happyDoAction j tk new_state+   where off    = indexShortOffAddr happyGotoOffsets st+	 off_i  = (off Happy_GHC_Exts.+# nt)+ 	 new_state = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (0# is the error token)++-- parse error if we are in recovery and we fail again+happyFail  0# tk old_st _ stk =+--	trace "failing" $ +    	happyError_ tk++{-  We don't need state discarding for our restricted implementation of+    "error".  In fact, it can cause some bogus parses, so I've disabled it+    for now --SDM++-- discard a state+happyFail  0# tk old_st (HappyCons ((action)) (sts)) +						(saved_tok `HappyStk` _ `HappyStk` stk) =+--	trace ("discarding state, depth " ++ show (length stk))  $+	happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+--                       save the old token and carry on.+happyFail  i tk (action) sts stk =+--      trace "entering error recovery" $+	happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions+++happyTcHack :: Happy_GHC_Exts.Int# -> a -> a+happyTcHack x y = y+{-# INLINE happyTcHack #-}+++-----------------------------------------------------------------------------+-- Seq-ing.  If the --strict flag is given, then Happy emits +--	happySeq = happyDoSeq+-- otherwise it emits+-- 	happySeq = happyDontSeq++happyDoSeq, happyDontSeq :: a -> b -> b+happyDoSeq   a b = a `seq` b+happyDontSeq a b = b++-----------------------------------------------------------------------------+-- Don't inline any functions from the template.  GHC has a nasty habit+-- of deciding to inline happyGoto everywhere, which increases the size of+-- the generated parser quite a bit.+++{-# NOINLINE happyDoAction #-}+{-# NOINLINE happyTable #-}+{-# NOINLINE happyCheck #-}+{-# NOINLINE happyActOffsets #-}+{-# NOINLINE happyGotoOffsets #-}+{-# NOINLINE happyDefActions #-}++{-# NOINLINE happyShift #-}+{-# NOINLINE happySpecReduce_0 #-}+{-# NOINLINE happySpecReduce_1 #-}+{-# NOINLINE happySpecReduce_2 #-}+{-# NOINLINE happySpecReduce_3 #-}+{-# NOINLINE happyReduce #-}+{-# NOINLINE happyMonadReduce #-}+{-# NOINLINE happyGoto #-}+{-# NOINLINE happyFail #-}++-- end of Happy Template.
+ preprocessor/ArrCode.lhs view
@@ -0,0 +1,239 @@+> module ArrCode(+>	Arrow,+>	bind, anon,+>	arr, arrLet, (>>>), arrowExp, applyOp, infixOp, (|||), first,+>	VarDecl(VarDecl), letCmd,+>	context, anonArgs, toHaskell,+>	components,+>	Tuple,+>	isEmptyTuple, unionTuple, minusTuple, intersectTuple,+>	patternTuple, expTuple,+>	returnA_exp, arr_exp, arr_exp', compose_op, choice_op, first_exp,+>	left_exp, right_exp, app_exp, loop_exp+> ) where++> import Utils++> import Data.Set (Set)+> import qualified Data.Set as Set+> import Language.Haskell.Syntax++> data Arrow = Arrow {+>		code :: Code,+>		context :: Tuple, -- named input components used by the arrow+>		anonArgs :: Int   -- number of unnamed arguments+>	}++> data VarDecl a = VarDecl SrcLoc HsName a+>	deriving (Eq,Show)++> instance Functor VarDecl where+>	fmap f (VarDecl loc name a) = VarDecl loc name (f a)++> data Code+>	= ReturnA			-- returnA = arr id+>	| Arr Int HsPat [Binding] HsExp	-- arr (first^n (\p -> ... e))+>	| Compose Code [Code] Code	-- composition of 2 or more elts+>	| Op HsExp [Code]		-- combinator applied to arrows+>	| InfixOp Code HsQOp Code+>	| Let [VarDecl Code] Code++> data Binding = BindLet [HsDecl] | BindCase HsPat HsExp++-----------------------------------------------------------------------------+Arrow constants++> compose_op, choice_op :: HsQOp+> returnA_exp, arr_exp, arr_exp', first_exp :: HsExp+> left_exp, right_exp, app_exp, loop_exp :: HsExp++> returnA_exp	= HsVar (UnQual (HsIdent "returnA"))+> arr_exp	= HsVar (UnQual (HsIdent "arr"))+> arr_exp'	= HsVar (UnQual (HsIdent "arr'"))+> compose_op	= HsQVarOp (UnQual (HsSymbol ">>>"))+> choice_op	= HsQVarOp (UnQual (HsSymbol "|||"))+> first_exp	= HsVar (UnQual (HsIdent "first"))+> left_exp	= HsCon (UnQual (HsIdent "Left"))+> right_exp	= HsCon (UnQual (HsIdent "Right"))+> app_exp	= HsVar (UnQual (HsIdent "app"))+> loop_exp	= HsVar (UnQual (HsIdent "loop"))++-----------------------------------------------------------------------------+Arrow constructors++> bind :: Set HsName -> Arrow -> Arrow+> bind vars a = a {+>		context = context a `minusTuple` vars+>	}++> anon :: Int -> Arrow -> Arrow+> anon anonCount a = a {+>		anonArgs = anonArgs a + anonCount+>	}++> arr :: Int -> Tuple -> HsPat -> HsExp -> Arrow+> arr anons t p e = Arrow {+>		code = if same p e then ReturnA else Arr anons p [] e,+>		context = t `intersectTuple` freeVars e,+>		anonArgs = anons+>	}+>	where	same :: HsPat -> HsExp -> Bool+>		same (HsPApp n1 []) (HsCon n2) = n1 == n2+>		same (HsPVar n1) (HsVar n2) = UnQual n1 == n2+>		same (HsPTuple ps) (HsTuple es) =+>			length ps == length es && and (zipWith same ps es)+>		same (HsPAsPat n p) e = e == HsVar (UnQual n) || same p e+>		same (HsPParen p) e = same p e+>		same p (HsParen e) = same p e+>		same _ _ = False	-- other cases don't arise++> arrLet :: Int -> Tuple -> HsPat -> [HsDecl] -> HsExp -> Arrow+> arrLet anons t p ds e = Arrow {+>		code = Arr anons p [BindLet ds] e,+>		context = t `intersectTuple` vs,+>		anonArgs = anons+>	}+>	where	vs = (freeVars e `Set.union` freeVars ds)+>				`Set.difference` definedVars ds++> (>>>) :: Arrow -> Arrow -> Arrow+> a1 >>> a2 = a1 { code = compose (code a1) (code a2) }++> arrowExp :: HsExp -> Arrow+> arrowExp e = Arrow {+>		code = if e == returnA_exp then ReturnA else Op e [],+>		context = emptyTuple,+>		anonArgs = 0+>	}++> applyOp :: HsExp -> [Arrow] -> Arrow+> applyOp e as = Arrow {+>		code = Op e (map code as),+>		context = foldr unionTuple emptyTuple (map context as),+>		anonArgs = 0	-- BUG: see below+>	}++Setting anonArgs to 0 for infixOp is incorrect, but we can't know the+correct value without types.++> infixOp :: Arrow -> HsQOp -> Arrow -> Arrow+> infixOp a1 op a2 = Arrow {+>		code = InfixOp (code a1) op (code a2),+>		context = context a1 `unionTuple` context a2,+>		anonArgs = 0	-- BUG: as above+>	}++> first :: Arrow -> Tuple -> Arrow+> first a ps = Arrow {+>		code = Op first_exp [code a],+>		context = context a `unionTuple` ps,+>		anonArgs = 0+>	}++> (|||) :: Arrow -> Arrow -> Arrow+> a1 ||| a2 = Arrow {+>		code = InfixOp (code a1) choice_op (code a2),+>		context = context a1 `unionTuple` context a2,+>		anonArgs = 0+>	}++> letCmd :: [VarDecl Arrow] -> Arrow -> Arrow+> letCmd defs a = Arrow {+>		code = Let (map (fmap code) defs) (code a),+>		context = context a,+>		anonArgs = anonArgs a+>	}++Composition, with some simplification++> compose :: Code -> Code -> Code+> compose ReturnA a = a+> compose a ReturnA = a+> compose a1@(Arr n1 p1 ds1 e1) a2@(Arr n2 p2 ds2 e2)+>	| n1 /= n2 = Compose a1 [] a2	-- could do better, but can this arise?+>	| same p2 e1 = Arr n1 p1 (ds1 ++ ds2) e2+>	| otherwise = Arr n1 p1 (ds1 ++ BindCase p2 e1:ds2) e2+>	where	same :: HsPat -> HsExp -> Bool+>		same (HsPApp n1 []) (HsCon n2) = n1 == n2+>		same (HsPVar n1) (HsVar n2) = UnQual n1 == n2+>		same (HsPTuple ps) (HsTuple es) =+>			length ps == length es && and (zipWith same ps es)+>		same (HsPParen p) e = same p e+>		same p (HsParen e) = same p e+>		same _ _ = False	-- other cases don't arise+> compose (Compose f1 as1 g1) (Compose f2 as2 g2) =+>	Compose f1 (as1 ++ (compose g1 f2 : as2)) g2+> compose a (Compose f bs g) =+>	Compose (compose a f) bs g+> compose (Compose f as g) b =+>	Compose f as (compose g b)+> compose a1 a2 =+>	Compose a1 [] a2++-----------------------------------------------------------------------------+Conversion to Haskell++> toHaskell :: Arrow -> HsExp+> toHaskell = toHaskellCode . code++> toHaskellCode :: Code -> HsExp+> toHaskellCode ReturnA =+>	returnA_exp+> toHaskellCode (Arr n p bs e) = quoteArr (times n (HsParen . HsApp first_exp) body)+>	where   body = HsParen (HsLambda undefined [p] (foldr addBinding e bs))+>		addBinding :: Binding -> HsExp -> HsExp+>		addBinding (BindLet ds) e = HsLet ds e+>		addBinding (BindCase p e) e' =+>			HsCase e [HsAlt undefined p (HsUnGuardedAlt e') []]+> toHaskellCode (Compose f as g) =+>	foldr comp (toHaskellArg g) (map toHaskellArg (f:as))+>	where	comp f g = HsInfixApp f compose_op g+> toHaskellCode (Op op as) =+>	foldl HsApp op (map (paren . toHaskellCode) as)+> toHaskellCode (InfixOp a1 op a2) =+>	HsInfixApp (toHaskellArg a1) op (toHaskellArg a2)+> toHaskellCode (Let nas a) =+>	HsLet (map toHaskellDecl nas) (toHaskellCode a)+>	where	toHaskellDecl (VarDecl loc n a) =+>			HsPatBind loc (HsPVar n)+>				(HsUnGuardedRhs (toHaskellCode a)) []++> toHaskellArg :: Code -> HsExp+> toHaskellArg a = parenInfixArg (toHaskellCode a)++-----------------------------------------------------------------------------+Tuples, representing sets of variables.++> newtype Tuple = Tuple (Set HsName)++Tuple extractors, including matching expression and pattern.++> isEmptyTuple :: Tuple -> Bool+> isEmptyTuple (Tuple t) = Set.null t++> patternTuple :: Tuple -> HsPat+> patternTuple (Tuple t) = tupleP (map HsPVar (Set.toList t))++> expTuple :: Tuple -> HsExp+> expTuple (Tuple t) = tuple (map (HsVar . UnQual) (Set.toList t))++Operations on tuples++> emptyTuple :: Tuple+> emptyTuple = Tuple Set.empty++> unionTuple :: Tuple -> Tuple -> Tuple+> unionTuple (Tuple a) (Tuple b) = Tuple (a `Set.union` b)++Remove all usages of a set of variables.++> minusTuple :: Tuple -> Set HsName -> Tuple+> Tuple t `minusTuple` vs = Tuple (t `Set.difference` vs)++> intersectTuple :: Tuple -> Set HsName -> Tuple+> Tuple t `intersectTuple` vs = Tuple (t `Set.intersection` vs)++The variable components of a pattern.++> components :: HsPat -> Tuple+> components p = Tuple (freeVars p)
+ preprocessor/ArrSyn.lhs view
@@ -0,0 +1,302 @@+Additional abstract syntax for arrow expressions++> module ArrSyn(+>	Cmd(..),+>	Stmts, Stmt(..), CmdDecl, VarDecl(..),+>	Alt(..), GuardedAlts(..), GuardedAlt(..),+>	translate	-- :: HsPat -> Cmd -> HsExp+> ) where++> import ArrCode+> import State		-- Haskell 98 version of Control.Monad.State+> import Utils++> import Data.List(mapAccumL)+> import Data.Map (Map)+> import qualified Data.Map as Map+> import Data.Set (Set)+> import qualified Data.Set as Set+> import Language.Haskell.Syntax++> data Cmd+>	= Input HsExp HsExp+>	| Kappa SrcLoc [HsPat] Cmd+>	| Op HsExp [Cmd]+>	| InfixOp Cmd HsQOp Cmd+>	| Let [HsDecl] Cmd+>	| LetCmd (VarDecl Cmd) Cmd+>	| If HsExp Cmd Cmd+>	| Case HsExp [Alt]+>	| Paren Cmd+>	| Do [Stmt] Cmd+>	| App Cmd HsExp+>	| CmdVar HsName+>   deriving (Eq,Show)++> type CmdDecl = (HsName, Cmd)+> type Stmts = ([Stmt], Cmd)++> data Stmt+>	= Generator SrcLoc HsPat Cmd+>	| RecStmt [Stmt]+>	| LetStmt [HsDecl]+>	| LetCmdStmt (VarDecl Cmd)+>   deriving (Eq,Show)++> data Alt+>	= Alt SrcLoc HsPat GuardedAlts [HsDecl]+>   deriving (Eq,Show)++> data GuardedAlts+>	= UnGuardedAlt Cmd+>	| GuardedAlts [GuardedAlt]+>   deriving (Eq,Show)++> data GuardedAlt+>	= GuardedAlt SrcLoc HsExp Cmd+>   deriving (Eq,Show)++-----------------------------------------------------------------------------+Utilities++> pair :: HsExp -> HsExp -> HsExp+> pair e1 e2 = HsTuple [e1, e2]++Turn redefined variables into wildcards, so the new pattern will be legal.++> pairP :: HsPat -> HsPat -> HsPat+> pairP p1 p2 = HsPTuple [hide p1, p2]+>	where	vs = freeVars p2+>		hide p@(HsPVar n)+>			| n `Set.member` vs = HsPWildCard+>			| otherwise = p+>		hide (HsPNeg p) = HsPNeg (hide p)+>		hide (HsPInfixApp p1 n p2) = HsPInfixApp (hide p1) n (hide p2)+>		hide (HsPApp n ps) = HsPApp n (map hide ps)+>		hide (HsPTuple ps) = HsPTuple (map hide ps)+>		hide (HsPList ps) = HsPList (map hide ps)+>		hide (HsPParen p) = HsPParen (hide p)+>		hide (HsPRec n pfs) = HsPRec n (map hideField pfs)+>			where	hideField (HsPFieldPat f p) =+>					HsPFieldPat f (hide p)+>		hide (HsPAsPat n p)+>			| n `Set.member` vs = hide p+>			| otherwise = HsPAsPat n (hide p)+>		hide (HsPIrrPat p) = HsPIrrPat (hide p)+>		hide p = p++> left, right :: HsExp -> HsExp+> left f = HsApp left_exp (paren f)+> right f = HsApp right_exp (paren f)++> loop :: Arrow -> Arrow+> loop f = applyOp loop_exp [f]++> app, returnA :: Arrow+> app = arrowExp app_exp+> returnA = arrowExp returnA_exp++> returnCmd :: HsExp -> Cmd+> returnCmd = Input returnA_exp++-----------------------------------------------------------------------------+Translation state++> data TransState = TransState {+>	locals :: Set HsName,	-- vars in scope defined in this proc+>	input :: Tuple,		-- input components accessible here+>	cmdVars :: Map HsName Arrow+> }+ +> startPattern :: HsPat -> (TransState, HsPat)+> startPattern p =+>	(TransState {+>		locals = freeVars p,+>		input = components p,+>		cmdVars = Map.empty+>	 }, p)++> class AddVars a where+>	addVars :: TransState -> a -> (TransState, a)++> instance AddVars a => AddVars [a] where+>	addVars = mapAccumL addVars++> instance AddVars HsPat where+>	addVars s p =+>		(s {+>			locals = locals s `Set.union` freeVars p,+>			input = input s `unionTuple` components p+>		 }, p)++> instance AddVars HsDecl where+>	addVars s d@(HsFunBind (HsMatch _ n _ _ _:_)) =+>		(s', d)+>		where	(s', _) = addVars s (HsPVar n)+>	addVars s (HsPatBind loc p rhs decls) =+>		(s', HsPatBind loc p' rhs decls)+>		where	(s', p') = addVars s p+>	addVars s d = (s, d)++-----------------------------------------------------------------------------+Translation to Haskell++This is a 2-phase process:+- transCmd generates an abstract arrow combinator language represented+  by the Arrow type, and+- toHaskell turns that into Haskell.++> translate :: HsPat -> Cmd -> HsExp+> translate p c = paren (quoteInit $ toHaskell (transCmd s p' c))+>	where	(s, p') = startPattern p++The pattern argument is often pseudo-recursively defined in terms of+the context part of the result of these functions.  (It's not real+recursion, because that part is independent of the pattern.)++> transCmd :: TransState -> HsPat -> Cmd -> Arrow+> transCmd s p (Input f e)+>	| Set.null (freeVars f `Set.intersection` locals s) =+>		arr 0 (input s) p e >>> arrowExp f+>	| otherwise =+>		arr 0 (input s) p (pair f e) >>> app+> transCmd s p (Kappa _ ps c) =+>	anon (length ps) $ bind (freeVars ps) $+>		transCmd s' (foldl pairP p ps') c+>	where	(s', ps') = addVars s ps+> transCmd s p (Op op cs) =+>	applyOp op (map (transCmd s p) cs)+> transCmd s p (InfixOp c1 op c2) =+>	infixOp (transCmd s p c1) op (transCmd s p c2)+> transCmd s p (Let decls c) =+>	arrLet (anonArgs a) (input s) p decls' e >>> a+>	where	(s', decls') = addVars s decls+>		(e, a) = transTrimCmd s' c+> transCmd s p (If e c1 c2) =+>	arr 0 (input s) p (HsIf e (left e1) (right e2)) >>> (a1 ||| a2)+>	where	(e1, a1) = transTrimCmd s c1+>		(e2, a2) = transTrimCmd s c2+> transCmd s p (Case e as) =+>	transCase s p e as+> transCmd s p (Paren c) =+>	transCmd s p c+> transCmd s p (Do ss c) =+>	transDo s p ss c+> transCmd s p (App c arg) =+>	anon (-1) $+>	arr (anonArgs a) (input s) p (pair e arg) >>> a+>	where	(e, a) = transTrimCmd s c++The following awful hack is there because if the command is recursively+defined, computation of its context will not terminate.  So we plug in+returnA (empty context) to get an arrow whose code is ignored in the+recomputation of the real arrow for a1.+Mutually recursive bindings will be a bit more tricky.++> transCmd s p (LetCmd (VarDecl loc n c1) c2) =+>	letCmd [VarDecl loc n a1] (transCmd s' p c2)+>	where	(_, a1) = transTrimCmd s' c1+>		s' = s { cmdVars = Map.insert n a0 (cmdVars s) }+>		s0 = s { cmdVars = Map.insert n returnA (cmdVars s) }+>		a0 = transCmd s0 p c1	-- hackety hack+> transCmd s p (CmdVar n) =+>	arr (anonArgs a) (input s) p e >>> arrowExp (HsVar (UnQual n))+>	where	Just a = Map.lookup n (cmdVars s)+>		e = expTuple (context a)++Like TransCmd, but use the minimal input pattern.  The first component+of the result is the matching expression to build this input.+That is, the result is (e, proc p' -> c) with the minimal p' such that++	proc p -> c = arr (first^n (p -> e)) >>> (proc p' -> c)++where n is the number of anonymous arguments taken by c.++> transTrimCmd :: TransState -> Cmd -> (HsExp, Arrow)+> transTrimCmd s c = (expTuple (context a), a)+>	where	a = transCmd s (patternTuple (context a)) c++> transDo :: TransState -> HsPat -> [Stmt] -> Cmd -> Arrow+> transDo s p [] c =+>	transCmd s p c+> transDo s p (Generator _ pg cg:ss) c =+>	if isEmptyTuple u then+>		transCmd s p cg >>> transDo s' pg ss c+>	else+>		arr 0 (input s) p (pair eg (expTuple u)) >>> first ag u >>> a+>	where	(s', pg') = addVars s pg+>		a = bind (freeVars pg)+>			(transDo s' (pairP pg' (patternTuple u)) ss c)+>		u = context a+>		(eg, ag) = transTrimCmd s cg+> transDo s p (LetStmt decls:ss) c =+>	transCmd s p (Let decls (Do ss c))+> transDo s p (RecStmt rss:ss) c =+>	bind defined+>		(loop (transDo s' (pairP p (irrPat (patternTuple feedback)))+>			rss'+>			(returnCmd (pair output (expTuple feedback)))+>		      ) >>> a)+>	where	defined = definedVars rss+>		(s', rss') = addVars s rss+>		(output, a) = transTrimCmd s' (Do ss c)+>		feedback = context (transDo s' p rss'+>				(returnCmd (foldr pair output $ map (HsVar . UnQual) $ Set.toList defined)))+>			`intersectTuple` defined+> transDo s p (LetCmdStmt vdecl:ss) c =+>	transCmd s p (LetCmd vdecl (Do ss c))++The set of variables defined by a list of statements in a rec.++> instance DefinedVars Stmt where+>	definedVars (Generator _ p _) = freeVars p+>	definedVars (LetStmt decls) = definedVars decls+>	definedVars (RecStmt stmts) = definedVars stmts+>	definedVars (LetCmdStmt _vdecl) = Set.empty++> instance AddVars Stmt where+>	addVars s (Generator loc p c) =+>		(s', Generator loc p' c)+>		where	(s', p') = addVars s p+>	addVars s (LetStmt decls) =+>		(s', LetStmt decls')+>		where	(s', decls') = addVars s decls+>	addVars s (RecStmt stmts) =+>		(s', RecStmt stmts')+>		where	(s', stmts') = addVars s stmts+>	addVars s stmt@(LetCmdStmt _vdecl) =+>		(s, stmt)++Translation of case commands uses a right-nested sum,+corresponding to the right-associativity of (|||).+(In future: use a balanced sum.)++The state kept while traversing the expression is+	(count of rhss, rhss in reverse order)++> transCase :: TransState -> HsPat -> HsExp -> [Alt] -> Arrow+> transCase s p e as =+>	arr 0 (input s) p (HsCase e as') >>> foldr1 (|||) (reverse cases)+>	where	(as', (ncases, cases)) =+>			runState (mapM (transAlt s) as) (0, [])+>		transAlt s (Alt loc p gas decls) = do+>			let	(s', p') = addVars s p+>				(s'', decls') = addVars s' decls+>			gas' <- transGuardedAlts s'' gas+>			return (HsAlt loc p' gas' decls')+>		transGuardedAlts s (UnGuardedAlt c) = do+>			body <- newAlt s c+>			return (HsUnGuardedAlt body)+>		transGuardedAlts s (GuardedAlts gas) = do+>			gas' <- mapM (transGuardedAlt s) gas+>			return (HsGuardedAlts gas')+>		transGuardedAlt s (GuardedAlt loc e c) = do+>			body <- newAlt s c+>			return (HsGuardedAlt loc e body)+>		newAlt s c = do+>			let (e, a) = transTrimCmd s c+>			(n, as) <- get+>			put (n+1, a:as)+>			return (label n e)+>		label n e = times n right+>				(if n < ncases-1 then left e else e)
+ preprocessor/Lexer.hs view
@@ -0,0 +1,579 @@+-- #hide+-----------------------------------------------------------------------------+-- |+-- Module      :  Lexer+-- Copyright   :  (c) The GHC Team, 1997-2000+-- License     :  BSD-style (see the file libraries/base/LICENSE)+-- +-- Maintainer  :  libraries@haskell.org+-- Stability   :  experimental+-- Portability :  portable+--+-- Lexer for Haskell.+--+-----------------------------------------------------------------------------++-- ToDo: Introduce different tokens for decimal, octal and hexadecimal (?)+-- ToDo: FloatTok should have three parts (integer part, fraction, exponent) (?)+-- ToDo: Use a lexical analyser generator (lx?)++module Lexer (Token(..), lexer) where++import Language.Haskell.ParseMonad++import Data.Char	(isAlpha, isLower, isUpper, toLower,+			 isDigit, isHexDigit, isOctDigit, isSpace,+			 ord, chr, digitToInt)+import Data.Ratio++data Token+        = VarId String+        | QVarId (String,String)+	| ConId String+        | QConId (String,String)+        | VarSym String+        | ConSym String+        | QVarSym (String,String)+        | QConSym (String,String)+	| IntTok Integer+	| FloatTok Rational+	| Character Char+        | StringTok String++-- Symbols++	| LeftParen+	| RightParen+	| SemiColon+        | LeftCurly+        | RightCurly+        | VRightCurly			-- a virtual close brace+        | LeftSquare+        | RightSquare+        | Splice+	| LeftQuote+	| RightQuote+	| Comma+        | Underscore+        | BackQuote++-- Reserved operators++        | DotDot+	| Colon+	| DoubleColon+	| Equals+	| Backslash+	| Bar+        | LeftArrow+	| RightArrow+	| At+	| Tilde+	| DoubleArrow+	| Minus+	| Exclamation+	| LeftArrowTail		-- added for arrows+	| RightArrowTail	-- added for arrows+	| LeftArrowDTail	-- added for arrows+	| RightArrowDTail	-- added for arrows+	| LeftBanana		-- added for arrows+	| RightBanana		-- added for arrows++-- Reserved Ids++	| KW_Case+	| KW_Class+	| KW_Data+	| KW_Default+	| KW_Deriving+	| KW_Do+	| KW_Else+	| KW_Foreign+	| KW_If+	| KW_Import+	| KW_In+	| KW_Infix+	| KW_InfixL+	| KW_InfixR+	| KW_Instance+	| KW_Let+	| KW_Module+	| KW_NewType+	| KW_Of+	| KW_Then+	| KW_Type+	| KW_Where++-- Special Ids++	| KW_As+	| KW_Export+	| KW_Hiding+	| KW_Qualified+	| KW_Safe+	| KW_Unsafe+	| KW_Proc		-- added for arrows+	| KW_Rec		-- added for arrows+	| KW_Form		-- added for arrows+	| KW_Cmd		-- added for arrows++        | EOF+        deriving (Eq,Show)++reserved_ops :: [(String,Token)]+reserved_ops = [+ ( "..", DotDot ),+ ( ":",  Colon ),+ ( "::", DoubleColon ),+ ( "=",  Equals ),+ ( "\\", Backslash ),+ ( "|",  Bar ),+ ( "<-", LeftArrow ),+ ( "->", RightArrow ),+ ( "@",  At ),+ ( "~",  Tilde ),+ ( "=>", DoubleArrow ),+ ( "-<", LeftArrowTail ),	-- added for arrows+ ( ">-", RightArrowTail ),	-- added for arrows+ ( "-<<", LeftArrowDTail ),	-- added for arrows+ ( ">>-", RightArrowDTail ),	-- added for arrows+ ( "\\<", Backslash )		-- added for arrows+ ]++special_varops :: [(String,Token)]+special_varops = [+ ( "-",  Minus ),			--ToDo: shouldn't be here+ ( "!",  Exclamation )		--ditto+ ]++reserved_ids :: [(String,Token)]+reserved_ids = [+ ( "_",         Underscore ),+ ( "case",      KW_Case ),+ ( "class",     KW_Class ),+ ( "cmd",	KW_Cmd ),	-- added for arrows+ ( "data",      KW_Data ),+ ( "default",   KW_Default ),+ ( "deriving",  KW_Deriving ),+ ( "do",        KW_Do ),+ ( "else",      KW_Else ),+ ( "foreign",	KW_Foreign ),+ ( "if",    	KW_If ),+ ( "import",    KW_Import ),+ ( "in", 	KW_In ),+ ( "infix", 	KW_Infix ),+ ( "infixl", 	KW_InfixL ),+ ( "infixr", 	KW_InfixR ),+ ( "instance",  KW_Instance ),+ ( "let", 	KW_Let ),+ ( "module", 	KW_Module ),+ ( "newtype",   KW_NewType ),+ ( "of", 	KW_Of ),+ ( "proc",	KW_Proc ),	-- added for arrows+ ( "rec",	KW_Rec ),	-- added for arrows+ ( "then", 	KW_Then ),+ ( "type", 	KW_Type ),+ ( "where", 	KW_Where )+ ]++special_varids :: [(String,Token)]+special_varids = [+ ( "as", 	KW_As ),+ ( "export", 	KW_Export ),+ ( "hiding", 	KW_Hiding ),+ ( "qualified", KW_Qualified ),+ ( "safe",	KW_Safe ),+ ( "unsafe", 	KW_Unsafe )+ ]++isIdent, isSymbol :: Char -> Bool+isIdent  c = isAlpha c || isDigit c || c == '\'' || c == '_'+isSymbol c = elem c ":!#$%&*+./<=>?@\\^|-~"++matchChar :: Char -> String -> Lex a ()+matchChar c msg = do+	s <- getInput+	if null s || head s /= c then fail msg else discard 1++-- The top-level lexer.+-- We need to know whether we are at the beginning of the line to decide+-- whether to insert layout tokens.++lexer :: (Token -> P a) -> P a+lexer = runL $ do+	bol <- checkBOL+	bol <- lexWhiteSpace bol+	startToken+	if bol then lexBOL else lexToken++lexWhiteSpace :: Bool -> Lex a Bool+lexWhiteSpace bol = do+	s <- getInput+	case s of+	    '{':'-':_ -> do+		discard 2+		bol <- lexNestedComment bol+		lexWhiteSpace bol+	    '-':'-':rest | all (== '-') (takeWhile isSymbol rest) -> do+		lexWhile (== '-')+		lexWhile (/= '\n')+		s' <- getInput+		case s' of+		    [] -> fail "Unterminated end-of-line comment"+		    _ -> do+			lexNewline+			lexWhiteSpace True+	    '\n':_ -> do+		lexNewline+		lexWhiteSpace True+	    '\t':_ -> do+		lexTab+		lexWhiteSpace bol+	    c:_ | isSpace c -> do+		discard 1+		lexWhiteSpace bol+	    _ -> return bol++lexNestedComment :: Bool -> Lex a Bool+lexNestedComment bol = do+	s <- getInput+	case s of+	    '-':'}':_ -> discard 2 >> return bol+	    '{':'-':_ -> do+		discard 2+		bol <- lexNestedComment bol	-- rest of the subcomment+		lexNestedComment bol		-- rest of this comment+	    '\t':_    -> lexTab >> lexNestedComment bol+	    '\n':_    -> lexNewline >> lexNestedComment True+	    _:_       -> discard 1 >> lexNestedComment bol+	    []        -> fail "Unterminated nested comment"++-- When we are lexing the first token of a line, check whether we need to+-- insert virtual semicolons or close braces due to layout.++lexBOL :: Lex a Token+lexBOL = do+	pos <- getOffside+	case pos of+	    LT -> do+                -- trace "layout: inserting '}'\n" $+        	-- Set col to 0, indicating that we're still at the+        	-- beginning of the line, in case we need a semi-colon too.+        	-- Also pop the context here, so that we don't insert+        	-- another close brace before the parser can pop it.+		setBOL+		popContextL "lexBOL"+		return VRightCurly+	    EQ ->+                -- trace "layout: inserting ';'\n" $+		return SemiColon+	    GT ->+		lexToken++lexToken :: Lex a Token+lexToken = do+    s <- getInput+    case s of+        [] -> return EOF++	'0':c:d:_ | toLower c == 'o' && isOctDigit d -> do+			discard 2+			n <- lexOctal+			return (IntTok n)+		  | toLower c == 'x' && isHexDigit d -> do+			discard 2+			n <- lexHexadecimal+			return (IntTok n)++	'$':'(':_ -> do+	    discard 2+	    return Splice++	'[':'|':_ -> do+	    discard 2+	    return LeftQuote++	'|':']':_ -> do+	    discard 2+	    return RightQuote ++	'(':'|':c:_ | not (isSymbol c) -> do+	    discard 2+	    return LeftBanana++	'|':')':_ -> do+	    discard 2+	    return RightBanana++	c:_ | isDigit c -> lexDecimalOrFloat++	    | isUpper c -> lexConIdOrQual ""++	    | isLower c || c == '_' -> do+		ident <- lexWhile isIdent+		return $ case lookup ident (reserved_ids ++ special_varids) of+			Just keyword -> keyword+			Nothing -> VarId ident++	    | isSymbol c -> do+		sym <- lexWhile isSymbol+		return $ case lookup sym (reserved_ops ++ special_varops) of+			Just t  -> t+			Nothing -> case c of+			    ':' -> ConSym sym+			    _   -> VarSym sym++	    | otherwise -> do+		discard 1+		case c of++		    -- First the special symbols+		    '(' ->  return LeftParen+		    ')' ->  return RightParen+		    ',' ->  return Comma+		    ';' ->  return SemiColon+		    '[' ->  return LeftSquare+		    ']' ->  return RightSquare+		    '`' ->  return BackQuote+		    '{' -> do+			    pushContextL NoLayout+			    return LeftCurly+		    '}' -> do+			    popContextL "lexToken"+			    return RightCurly++		    '\'' -> do+			    c2 <- lexChar+			    matchChar '\'' "Improperly terminated character constant"+			    return (Character c2)++		    '"' ->  lexString++		    _ ->    fail ("Illegal character \'" ++ show c ++ "\'\n")++lexDecimalOrFloat :: Lex a Token+lexDecimalOrFloat = do+	ds <- lexWhile isDigit+	rest <- getInput+	case rest of+	    ('.':d:_) | isDigit d -> do+		discard 1+		frac <- lexWhile isDigit+		let num = parseInteger 10 (ds ++ frac)+		    decimals = toInteger (length frac)+		exponent <- do+			rest2 <- getInput+			case rest2 of+			    'e':_ -> lexExponent+			    'E':_ -> lexExponent+			    _     -> return 0+		return (FloatTok ((num%1) * 10^^(exponent - decimals)))+	    e:_ | toLower e == 'e' -> do+		exponent <- lexExponent+		return (FloatTok ((parseInteger 10 ds%1) * 10^^exponent))+	    _ -> return (IntTok (parseInteger 10 ds))++    where+	lexExponent :: Lex a Integer+	lexExponent = do+		discard 1	-- 'e' or 'E'+		r <- getInput+		case r of+		    '+':d:_ | isDigit d -> do+			discard 1+			lexDecimal+		    '-':d:_ | isDigit d -> do+			discard 1+			n <- lexDecimal+			return (negate n)+		    d:_ | isDigit d -> lexDecimal+		    _ -> fail "Float with missing exponent"++lexConIdOrQual :: String -> Lex a Token+lexConIdOrQual qual = do+	con <- lexWhile isIdent+	let conid | null qual = ConId con+		  | otherwise = QConId (qual,con)+	    qual' | null qual = con+		  | otherwise = qual ++ '.':con+	just_a_conid <- alternative (return conid)+	rest <- getInput+	case rest of+	  '.':c:_+	     | isLower c || c == '_' -> do	-- qualified varid?+		discard 1+		ident <- lexWhile isIdent+		case lookup ident reserved_ids of+		   -- cannot qualify a reserved word+		   Just _  -> just_a_conid+		   Nothing -> return (QVarId (qual', ident))++	     | isUpper c -> do		-- qualified conid?+		discard 1+		lexConIdOrQual qual'++	     | isSymbol c -> do	-- qualified symbol?+		discard 1+		sym <- lexWhile isSymbol+		case lookup sym reserved_ops of+		    -- cannot qualify a reserved operator+		    Just _  -> just_a_conid+		    Nothing -> return $ case c of+			':' -> QConSym (qual', sym)+			_   -> QVarSym (qual', sym)++	  _ ->	return conid -- not a qualified thing++lexChar :: Lex a Char+lexChar = do+	r <- getInput+	case r of+		'\\':_	-> lexEscape+		c:_	-> discard 1 >> return c+		[]	-> fail "Incomplete character constant"++lexString :: Lex a Token+lexString = loop ""+    where+	loop s = do+		r <- getInput+		case r of+		    '\\':'&':_ -> do+				discard 2+				loop s+		    '\\':c:_ | isSpace c -> do+				discard 1+				lexWhiteChars+				matchChar '\\' "Illegal character in string gap"+				loop s+			     | otherwise -> do+				ce <- lexEscape+				loop (ce:s)+		    '"':_ -> do+				discard 1+				return (StringTok (reverse s))+		    c:_ -> do+				discard 1+				loop (c:s)+		    [] ->	fail "Improperly terminated string"++	lexWhiteChars :: Lex a ()+	lexWhiteChars = do+		s <- getInput+		case s of+		    '\n':_ -> do+			lexNewline+			lexWhiteChars+		    '\t':_ -> do+			lexTab+			lexWhiteChars+		    c:_ | isSpace c -> do+			discard 1+			lexWhiteChars+		    _ -> return ()++lexEscape :: Lex a Char+lexEscape = do+	discard 1+	r <- getInput+	case r of++-- Production charesc from section B.2 (Note: \& is handled by caller)++		'a':_		-> discard 1 >> return '\a'+		'b':_		-> discard 1 >> return '\b'+		'f':_		-> discard 1 >> return '\f'+		'n':_		-> discard 1 >> return '\n'+		'r':_		-> discard 1 >> return '\r'+		't':_		-> discard 1 >> return '\t'+		'v':_		-> discard 1 >> return '\v'+		'\\':_		-> discard 1 >> return '\\'+		'"':_		-> discard 1 >> return '\"'+		'\'':_		-> discard 1 >> return '\''++-- Production ascii from section B.2++		'^':c:_		-> discard 2 >> cntrl c+		'N':'U':'L':_	-> discard 3 >> return '\NUL'+		'S':'O':'H':_	-> discard 3 >> return '\SOH'+		'S':'T':'X':_	-> discard 3 >> return '\STX'+		'E':'T':'X':_	-> discard 3 >> return '\ETX'+		'E':'O':'T':_	-> discard 3 >> return '\EOT'+		'E':'N':'Q':_	-> discard 3 >> return '\ENQ'+		'A':'C':'K':_	-> discard 3 >> return '\ACK'+		'B':'E':'L':_	-> discard 3 >> return '\BEL'+		'B':'S':_	-> discard 2 >> return '\BS'+		'H':'T':_	-> discard 2 >> return '\HT'+		'L':'F':_	-> discard 2 >> return '\LF'+		'V':'T':_	-> discard 2 >> return '\VT'+		'F':'F':_	-> discard 2 >> return '\FF'+		'C':'R':_	-> discard 2 >> return '\CR'+		'S':'O':_	-> discard 2 >> return '\SO'+		'S':'I':_	-> discard 2 >> return '\SI'+		'D':'L':'E':_	-> discard 3 >> return '\DLE'+		'D':'C':'1':_	-> discard 3 >> return '\DC1'+		'D':'C':'2':_	-> discard 3 >> return '\DC2'+		'D':'C':'3':_	-> discard 3 >> return '\DC3'+		'D':'C':'4':_	-> discard 3 >> return '\DC4'+		'N':'A':'K':_	-> discard 3 >> return '\NAK'+		'S':'Y':'N':_	-> discard 3 >> return '\SYN'+		'E':'T':'B':_	-> discard 3 >> return '\ETB'+		'C':'A':'N':_	-> discard 3 >> return '\CAN'+		'E':'M':_	-> discard 2 >> return '\EM'+		'S':'U':'B':_	-> discard 3 >> return '\SUB'+		'E':'S':'C':_	-> discard 3 >> return '\ESC'+		'F':'S':_	-> discard 2 >> return '\FS'+		'G':'S':_	-> discard 2 >> return '\GS'+		'R':'S':_	-> discard 2 >> return '\RS'+		'U':'S':_	-> discard 2 >> return '\US'+		'S':'P':_	-> discard 2 >> return '\SP'+		'D':'E':'L':_	-> discard 3 >> return '\DEL'++-- Escaped numbers++		'o':c:_ | isOctDigit c -> do+					discard 1+					n <- lexOctal+					checkChar n+		'x':c:_ | isHexDigit c -> do+					discard 1+					n <- lexHexadecimal+					checkChar n+		c:_ | isDigit c -> do+					n <- lexDecimal+					checkChar n++		_		-> fail "Illegal escape sequence"++    where+	checkChar n | n <= 0x10FFFF = return (chr (fromInteger n))+	checkChar _		    = fail "Character constant out of range"++-- Production cntrl from section B.2++	cntrl :: Char -> Lex a Char+	cntrl c | c >= '@' && c <= '_' = return (chr (ord c - ord '@'))+	cntrl _                        = fail "Illegal control character"++-- assumes at least one octal digit+lexOctal :: Lex a Integer+lexOctal = do+	ds <- lexWhile isOctDigit+	return (parseInteger 8 ds)++-- assumes at least one hexadecimal digit+lexHexadecimal :: Lex a Integer+lexHexadecimal = do+	ds <- lexWhile isHexDigit+	return (parseInteger 16 ds)++-- assumes at least one decimal digit+lexDecimal :: Lex a Integer+lexDecimal = do+	ds <- lexWhile isDigit+	return (parseInteger 10 ds)++-- Stolen from Hugs's Prelude+parseInteger :: Integer -> String -> Integer+parseInteger radix ds =+	foldl1 (\n d -> n * radix + d) (map (toInteger . digitToInt) ds)
+ preprocessor/Main.lhs view
@@ -0,0 +1,114 @@+> module Main (main) where++> import Data.List+> import System.Console.GetOpt+> import System.Environment+> import System.Exit+> import System.IO++> import Language.Haskell.ParseMonad+> import Language.Haskell.Syntax+> import Language.Haskell.Pretty++> import Parser++> data Flag = ParsePretty PPLayout   -- pretty print in this style+>           | Help                   -- give short usage info++> usage :: String -> String+> usage progName = unlines [+>	"usage: " ++ progName +++>		" [OPTION]... [FILENAME] [SOURCE] [DEST]",+>	"Read arrow notation from SOURCE (derived from FILENAME) and write",+>	"standard Haskell to DEST.",+>	"If no FILENAME, use SOURCE as the original name.",+>	"If no DEST or if DEST is `-', write to standard output.",+>	"If no SOURCE or if SOURCE is `-', read standard input."+>   ]++> sourceError :: SrcLoc -> String -> IO a+> sourceError loc mesg = do+>   hPutStrLn stderr+>	(srcFilename loc ++ ":" ++ show (srcLine loc) ++ ": " ++ mesg +++>	" in column " ++ show (srcColumn loc))+>   exitFailure++> programError :: String -> IO a+> programError mesg = do+>   progName <- getProgName+>   hPutStrLn stderr (progName ++ ": " ++ mesg)+>   exitFailure++> usageError :: String -> IO a+> usageError mesg = do+>   progName <- getProgName+>   programError (mesg +++>	 "Try `" ++ progName ++ " --help' for more information.")++> options :: [OptDescr Flag]+> options =+>    [ Option ['p']  ["pretty"]  (OptArg pStyle "STYLE")+>	("pretty print in STYLE[" +++>	 concat (intersperse "|" (map fst styles)) +++>	 "](default = " ++ fst (head styles) ++ ")"),+>      Option ['h','?'] ["help"] (NoArg Help) "display this help and exit"]++Available styles: first is default++> styles :: [(String, PPLayout)]+> styles = [+>	("offside",	PPOffsideRule),+>	("semicolon",	PPSemiColon),+>	("inline",	PPInLine),+>	("none",	PPNoLayout)+>   ]++> pStyle :: Maybe String -> Flag+> pStyle Nothing = ParsePretty defaultStyle+> pStyle (Just s) = ParsePretty (lookupStyle s)++> defaultStyle :: PPLayout+> defaultStyle = snd (head styles)++> lookupStyle :: String -> PPLayout+> lookupStyle prefix =+>	head ([s | (n, s) <- styles, prefix `isPrefixOf` n] ++ [defaultStyle])++> main :: IO ()+> main = do cmdline <- getArgs+>           mainHugs cmdline++> mainHugs :: [String] -> IO ()+> mainHugs cmdline =+>    case getOpt Permute options cmdline of+>       (flags, args, []) -> do+>	    action <- case flags of+>		[]  -> return (ParsePretty defaultStyle)+>		[f] -> return f+>		_   -> usageError "too many options\n"+>	    (origName, inName, outName) <- case args of+>		[]      -> return ("-","-","-")+>		[i]     -> return ( i , i ,"-")+>		[i,o]   -> return ( i , i , o )+>		[n,i,o] -> return ( n , i , o )+>		_       -> usageError "too many arguments\n"+>	    let mode = defaultParseMode {parseFilename = origName}+>	    inp <- if inName == "-" then getContents else+>		   readFile inName `catch` \_err ->+>			programError ("can't read `" ++ inName ++ "'")+>	    outH <- if outName == "-" then return stdout else+>		    openFile outName WriteMode `catch` \_err ->+>			programError ("can't write to `" ++ outName ++ "'")+>	    outp <- case action of+>		ParsePretty layout -> case parseModuleWithMode mode inp of+>			ParseOk mod ->+>				return $ prettyPrintWithMode defaultMode{+>						layout = layout,+>						linePragmas = True+>					} mod+>			ParseFailed loc err -> sourceError loc err+>		Help -> do+>			progName <- getProgName+>			return $ usageInfo (usage progName) options+>	    hPutStrLn outH outp+>       (_,     _,    errors) -> usageError (concat errors)
+ preprocessor/Parser.ly view
@@ -0,0 +1,994 @@+> {+> -----------------------------------------------------------------------------+> -- |+> -- Module      :  Parser+> -- Copyright   :  (c) Simon Marlow, Sven Panne 1997-2000+> -- License     :  BSD-style (see the file libraries/base/LICENSE)+> --+> -- Maintainer  :  libraries@haskell.org+> -- Stability   :  experimental+> -- Portability :  portable+> --+> -- Haskell parser.+> --+> -----------------------------------------------------------------------------+>+> module Parser (+>		parseModule, parseModuleWithMode,+>		ParseMode(..), defaultParseMode, ParseResult(..), hsQuote) where+> +> import Language.Haskell.Syntax+> import Language.Haskell.ParseMonad+> import Lexer+> import Utils (hsQuote, hsSplice) +> import Language.Haskell.ParseUtils+> +> import qualified ArrSyn		-- added for arrows+> }++ToDo: Check exactly which names must be qualified with Prelude (commas and friends)+ToDo: Inst (MPCs?)+ToDo: Polish constr a bit+ToDo: Ugly: exp0b is used for lhs, pat, exp0, ...+ToDo: Differentiate between record updates and labeled construction.++-----------------------------------------------------------------------------+Conflicts: 2 shift/reduce++2 for ambiguity in 'case x of y | let z = y in z :: Bool -> b'+	(don't know whether to reduce 'Bool' as a btype or shift the '->'.+	 Similarly lambda and if.  The default resolution in favour of the+	 shift means that a guard can never end with a type signature.+	 In mitigation: it's a rare case and no Haskell implementation+	 allows these, because it would require unbounded lookahead.)+	There are 2 conflicts rather than one because contexts are parsed+	as btypes (cf ctype).++-----------------------------------------------------------------------------++> %token+>	VARID 	 { VarId $$ }+>	QVARID 	 { QVarId $$ }+>	CONID	 { ConId $$ }+>	QCONID   { QConId $$ }+>	VARSYM	 { VarSym $$ }+>	CONSYM	 { ConSym $$ }+>	QVARSYM	 { QVarSym $$ }+>	QCONSYM  { QConSym $$ }+>	INT	 { IntTok $$ }+>	RATIONAL { FloatTok $$ }+>	CHAR	 { Character $$ }+>	STRING   { StringTok $$ }++Symbols++>	'('	{ LeftParen }+>	')'	{ RightParen }+>	';'	{ SemiColon }+>	'{'	{ LeftCurly }+>	'}'	{ RightCurly }+>	vccurly { VRightCurly }			-- a virtual close brace+>	'['	{ LeftSquare }+>	']'	{ RightSquare }+>       '$('    { Splice }+>	'[|'	{ LeftQuote }+>	'|]'	{ RightQuote }+>  	','	{ Comma }+>	'_'	{ Underscore }+>	'`'	{ BackQuote }++Reserved operators++>	'..'	{ DotDot }+>	':'	{ Colon }+>	'::'	{ DoubleColon }+>	'='	{ Equals }+>	'\\'	{ Backslash }+>	'|'	{ Bar }+>	'<-'	{ LeftArrow }+>	'->'	{ RightArrow }+>	'@'	{ At }+>	'~'	{ Tilde }+>	'=>'	{ DoubleArrow }+>	'-<'	{ LeftArrowTail }		-- added for arrows+>	'>-'	{ RightArrowTail }		-- added for arrows+>	'-<<'	{ LeftArrowDTail }		-- added for arrows+>	'>>-'	{ RightArrowDTail }		-- added for arrows+>	'(|'	{ LeftBanana }			-- added for arrows+>	'|)'	{ RightBanana }			-- added for arrows+>	'-'	{ Minus }+>	'!'	{ Exclamation }++Reserved Ids++>	'case'		{ KW_Case }+>	'class'		{ KW_Class }+>	'data'		{ KW_Data }+>	'default'	{ KW_Default }+>	'deriving'	{ KW_Deriving }+>	'do'		{ KW_Do }+>	'else'		{ KW_Else }+>	'foreign'	{ KW_Foreign }+>	'if'		{ KW_If }+>	'import'	{ KW_Import }+>	'in'		{ KW_In }+>	'infix'		{ KW_Infix }+>	'infixl'	{ KW_InfixL }+>	'infixr'	{ KW_InfixR }+>	'instance'	{ KW_Instance }+>	'let'		{ KW_Let }+>	'module'	{ KW_Module }+>	'newtype'	{ KW_NewType }+>	'of'		{ KW_Of }+>	'then'		{ KW_Then }+>	'type'		{ KW_Type }+>	'where'		{ KW_Where }++Special Ids++>	'as'		{ KW_As }+>	'export'	{ KW_Export }+>	'hiding'	{ KW_Hiding }+>	'qualified'	{ KW_Qualified }+>	'safe'		{ KW_Safe }+>	'unsafe'	{ KW_Unsafe }+>	'proc'		{ KW_Proc }		-- added for arrows+>	'rec'		{ KW_Rec }		-- added for arrows+>	'cmd'		{ KW_Cmd }		-- added for arrows++> %monad { P }+> %lexer { lexer } { EOF }+> %name parse+> %tokentype { Token }+> %%++-----------------------------------------------------------------------------+Module Header++> module :: { HsModule }+>	: srcloc 'module' modid maybeexports 'where' body+>		{ HsModule $1 $3 $4 (fst $6) (snd $6) }+>	| srcloc body+>		{ HsModule $1 main_mod (Just [HsEVar (UnQual main_name)])+>							(fst $2) (snd $2) }++> body :: { ([HsImportDecl],[HsDecl]) }+>	: '{'  bodyaux '}'			{ $2 }+>	| open bodyaux close			{ $2 }++> bodyaux :: { ([HsImportDecl],[HsDecl]) }+>	: optsemis impdecls semis topdecls	{ (reverse $2, $4) }+>	| optsemis                topdecls	{ ([], $2) }+>	| optsemis impdecls optsemis		{ (reverse $2, []) }+>	| optsemis				{ ([], []) }++> semis :: { () }+>	: optsemis ';'				{ () }++> optsemis :: { () }+>	: semis					{ () }+>	| {- empty -}				{ () }++-----------------------------------------------------------------------------+The Export List++> maybeexports :: { Maybe [HsExportSpec] }+> 	:  exports				{ Just $1 }+> 	|  {- empty -}				{ Nothing }++> exports :: { [HsExportSpec] }+>	: '(' exportlist optcomma ')'		{ reverse $2 }+>	| '(' optcomma ')'			{ [] }++> optcomma :: { () }+>	: ','					{ () }+>	| {- empty -}				{ () }++> exportlist :: { [HsExportSpec] }+> 	:  exportlist ',' export		{ $3 : $1 }+> 	|  export				{ [$1]  }++> export :: { HsExportSpec }+> 	:  qvar					{ HsEVar $1 }+> 	|  qtyconorcls				{ HsEAbs $1 }+> 	|  qtyconorcls '(' '..' ')'		{ HsEThingAll $1 }+> 	|  qtyconorcls '(' ')'		        { HsEThingWith $1 [] }+>	|  qtyconorcls '(' cnames ')'		{ HsEThingWith $1 (reverse $3) }+> 	|  'module' modid			{ HsEModuleContents $2 }++-----------------------------------------------------------------------------+Import Declarations++> impdecls :: { [HsImportDecl] }+>	: impdecls semis impdecl		{ $3 : $1 }+>	| impdecl				{ [$1] }++> impdecl :: { HsImportDecl }+>	: srcloc 'import' optqualified modid maybeas maybeimpspec+>				{ HsImportDecl $1 $4 $3 $5 $6 }++> optqualified :: { Bool }+>       : 'qualified'                           { True  }+>       | {- empty -}				{ False }++> maybeas :: { Maybe Module }+>       : 'as' modid                            { Just $2 }+>       | {- empty -}				{ Nothing }+++> maybeimpspec :: { Maybe (Bool, [HsImportSpec]) }+>	: impspec				{ Just $1 }+>	| {- empty -}				{ Nothing }++> impspec :: { (Bool, [HsImportSpec]) }+>	: opthiding '(' importlist optcomma ')'	{ ($1, reverse $3) }+>	| opthiding '(' optcomma ')'		{ ($1, []) }++> opthiding :: { Bool }+>	: 'hiding'				{ True }+>	| {- empty -}				{ False }++> importlist :: { [HsImportSpec] }+> 	:  importlist ',' importspec		{ $3 : $1 }+> 	|  importspec				{ [$1]  }++> importspec :: { HsImportSpec }+> 	:  var					{ HsIVar $1 }+> 	|  tyconorcls				{ HsIAbs $1 }+> 	|  tyconorcls '(' '..' ')'		{ HsIThingAll $1 }+> 	|  tyconorcls '(' ')'		        { HsIThingWith $1 [] }+> 	|  tyconorcls '(' cnames ')'		{ HsIThingWith $1 (reverse $3) }++> cnames :: { [HsCName] }+> 	:  cnames ',' cname			{ $3 : $1 }+> 	|  cname				{ [$1]  }++> cname :: { HsCName }+>	:  var					{ HsVarName $1 }+> 	|  con					{ HsConName $1 }++-----------------------------------------------------------------------------+Fixity Declarations++> fixdecl :: { HsDecl }+> 	: srcloc infix prec ops			{ HsInfixDecl $1 $2 $3 (reverse $4) }++> prec :: { Int }+>	: {- empty -}				{ 9 }+>	| INT					{% checkPrec $1 }++> infix :: { HsAssoc }+>	: 'infix'				{ HsAssocNone  }+>	| 'infixl'				{ HsAssocLeft  }+>	| 'infixr'				{ HsAssocRight }++> ops   :: { [HsOp] }+>	: ops ',' op				{ $3 : $1 }+>	| op					{ [$1] }++-----------------------------------------------------------------------------+Top-Level Declarations++Note: The report allows topdecls to be empty. This would result in another+shift/reduce-conflict, so we don't handle this case here, but in bodyaux.++> topdecls :: { [HsDecl] }+>	: topdecls1 optsemis		{% checkRevDecls $1 }++> topdecls1 :: { [HsDecl] }+>	: topdecls1 semis topdecl	{ $3 : $1 }+>	| topdecl			{ [$1] }++> topdecl :: { HsDecl }+>	: srcloc 'type' simpletype '=' type+>			{ HsTypeDecl $1 (fst $3) (snd $3) $5 }+>	| srcloc 'data' ctype '=' constrs deriving+>			{% do { (cs,c,t) <- checkDataHeader $3;+>				return (HsDataDecl $1 cs c t (reverse $5) $6) } }+>	| srcloc 'newtype' ctype '=' constr deriving+>			{% do { (cs,c,t) <- checkDataHeader $3;+>				return (HsNewTypeDecl $1 cs c t $5 $6) } }+>	| srcloc 'class' ctype optcbody+>			{% do { (cs,c,vs) <- checkClassHeader $3;+>				return (HsClassDecl $1 cs c vs $4) } }+>	| srcloc 'instance' ctype optvaldefs+>			{% do { (cs,c,ts) <- checkInstHeader $3;+>				return (HsInstDecl $1 cs c ts $4) } }+>	| srcloc 'default' '(' typelist ')'+>			{ HsDefaultDecl $1 $4 }+>	| foreigndecl	{ $1 }+>       | decl		{ $1 }++> typelist :: { [HsType] }+>	: types				{ reverse $1 }+>	| type				{ [$1] }+>	| {- empty -}			{ [] }++> decls :: { [HsDecl] }+>	: optsemis decls1 optsemis	{% checkRevDecls $2 }+>	| optsemis			{ [] }++> decls1 :: { [HsDecl] }+>	: decls1 semis decl		{ $3 : $1 }+>	| decl				{ [$1] }++> decl :: { HsDecl }+>	: signdecl			{ $1 }+>	| fixdecl			{ $1 }+>	| valdef			{ $1 }++> decllist :: { [HsDecl] }+>	: '{'  decls '}'		{ $2 }+>	| open decls close		{ $2 }++> signdecl :: { HsDecl }+>	: srcloc vars '::' ctype	{ HsTypeSig $1 (reverse $2) $4 }++ATTENTION: Dirty Hackery Ahead! If the second alternative of vars is var+instead of qvar, we get another shift/reduce-conflict. Consider the+following programs:++   { (+) :: ... }          only var+   { (+) x y  = ... }      could (incorrectly) be qvar++We re-use expressions for patterns, so a qvar would be allowed in patterns+instead of a var only (which would be correct). But deciding what the + is,+would require more lookahead. So let's check for ourselves...++> vars	:: { [HsName] }+>	: vars ',' var			{ $3 : $1 }+>	| qvar				{% do { n <- checkUnQual $1;+>						return [n] } }++Foreign declarations+- calling conventions are uninterpreted+- external entities are not parsed+- special ids are not allowed as internal names++> foreigndecl :: { HsDecl }+>	: srcloc 'foreign' 'import' VARID optsafety optentity fvar '::' type+>			{ HsForeignImport $1 $4 $5 $6 $7 $9 }+>	| srcloc 'foreign' 'export' VARID optentity fvar '::' type+>			{ HsForeignExport $1 $4 $5 $6 $8 }++> optsafety :: { HsSafety }+>	: 'safe'			{ HsSafe }+>	| 'unsafe'			{ HsUnsafe }+>	| {- empty -}			{ HsSafe }++> optentity :: { String }+>	: STRING			{ $1 }+>	| {- empty -}			{ "" }++> fvar :: { HsName }+>	: VARID				{ HsIdent $1 }+>	| '(' varsym ')'		{ $2 }++-----------------------------------------------------------------------------+Types++> type :: { HsType }+>	: btype '->' type		{ HsTyFun $1 $3 }+>	| btype				{ $1 }++> btype :: { HsType }+>	: btype atype			{ HsTyApp $1 $2 }+>	| atype				{ $1 }++> atype :: { HsType }+>	: gtycon			{ HsTyCon $1 }+>	| tyvar				{ HsTyVar $1 }+>	| '(' types ')'			{ HsTyTuple (reverse $2) }+>	| '[' type ']'			{ HsTyApp list_tycon $2 }+>	| '(' type ')'			{ $2 }++> gtycon :: { HsQName }+>	: qconid			{ $1 }+>	| '(' ')'			{ unit_tycon_name }+>	| '(' '->' ')'			{ fun_tycon_name }+>	| '[' ']'			{ list_tycon_name }+>	| '(' commas ')'		{ tuple_tycon_name $2 }+++(Slightly edited) Comment from GHC's hsparser.y:+"context => type" vs  "type" is a problem, because you can't distinguish between++	foo :: (Baz a, Baz a)+	bar :: (Baz a, Baz a) => [a] -> [a] -> [a]++with one token of lookahead.  The HACK is to parse the context as a btype+(more specifically as a tuple type), then check that it has the right form+C a, or (C1 a, C2 b, ... Cn z) and convert it into a context.  Blaach!++> ctype :: { HsQualType }+>	: context '=>' type		{ HsQualType $1 $3 }+>	| type				{ HsQualType [] $1 }++> context :: { HsContext }+>	: btype				{% checkContext $1 }++> types	:: { [HsType] }+>	: types ',' type		{ $3 : $1 }+>	| type  ',' type		{ [$3, $1] }++> simpletype :: { (HsName, [HsName]) }+>	: tycon tyvars			{ ($1,reverse $2) }++> tyvars :: { [HsName] }+>	: tyvars tyvar			{ $2 : $1 }+>	| {- empty -}			{ [] }++-----------------------------------------------------------------------------+Datatype declarations++> constrs :: { [HsConDecl] }+>	: constrs '|' constr		{ $3 : $1 }+>	| constr			{ [$1] }++> constr :: { HsConDecl }+>	: srcloc scontype		{ HsConDecl $1 (fst $2) (snd $2) }+>	| srcloc sbtype conop sbtype	{ HsConDecl $1 $3 [$2,$4] }+>	| srcloc con '{' '}'		{ HsRecDecl $1 $2 [] }+>	| srcloc con '{' fielddecls '}' { HsRecDecl $1 $2 (reverse $4) }++> scontype :: { (HsName, [HsBangType]) }+>	: btype				{% do { (c,ts) <- splitTyConApp $1;+>						return (c,map HsUnBangedTy ts) } }+>	| scontype1			{ $1 }++> scontype1 :: { (HsName, [HsBangType]) }+>	: btype '!' atype		{% do { (c,ts) <- splitTyConApp $1;+>						return (c,map HsUnBangedTy ts+++>							[HsBangedTy $3]) } }+>	| scontype1 satype		{ (fst $1, snd $1 ++ [$2] ) }++> satype :: { HsBangType }+>	: atype				{ HsUnBangedTy $1 }+>	| '!' atype			{ HsBangedTy   $2 }++> sbtype :: { HsBangType }+>	: btype				{ HsUnBangedTy $1 }+>	| '!' atype			{ HsBangedTy   $2 }++> fielddecls :: { [([HsName],HsBangType)] }+>	: fielddecls ',' fielddecl	{ $3 : $1 }+>	| fielddecl			{ [$1] }++> fielddecl :: { ([HsName],HsBangType) }+>	: vars '::' stype		{ (reverse $1, $3) }++> stype :: { HsBangType }+>	: type				{ HsUnBangedTy $1 }	+>	| '!' atype			{ HsBangedTy   $2 }++> deriving :: { [HsQName] }+>	: {- empty -}			{ [] }+>	| 'deriving' qtycls		{ [$2] }+>	| 'deriving' '('          ')'	{ [] }+>	| 'deriving' '(' dclasses ')'	{ reverse $3 }++> dclasses :: { [HsQName] }+>	: dclasses ',' qtycls		{ $3 : $1 }+>       | qtycls			{ [$1] }++-----------------------------------------------------------------------------+Class declarations++> optcbody :: { [HsDecl] }+>	: 'where' decllist		{% checkClassBody $2 }+>	| {- empty -}			{ [] }++-----------------------------------------------------------------------------+Instance declarations++> optvaldefs :: { [HsDecl] }+>	: 'where' '{'  valdefs '}'	{% checkClassBody $3 }+>	| 'where' open valdefs close	{% checkClassBody $3 }+>	| {- empty -}			{ [] }++> valdefs :: { [HsDecl] }+>	: optsemis valdefs1 optsemis	{% checkRevDecls $2 }+>	| optsemis			{ [] }++> valdefs1 :: { [HsDecl] }+>	: valdefs1 semis valdef		{ $3 : $1 }+>	| valdef			{ [$1] }++-----------------------------------------------------------------------------+Value definitions++> valdef :: { HsDecl }+>	: srcloc exp0b rhs optwhere	{% checkValDef $1 $2 $3 $4 }++> optwhere :: { [HsDecl] }+>	: 'where' decllist		{ $2 }+>	| {- empty -}			{ [] }++> rhs	:: { HsRhs }+>	: '=' exp			{% do { e <- checkExpr $2;+>						return (HsUnGuardedRhs e) } }+>	| gdrhs				{ HsGuardedRhss  (reverse $1) }++> gdrhs :: { [HsGuardedRhs] }+>	: gdrhs gdrh			{ $2 : $1 }+>	| gdrh				{ [$1] }++> gdrh :: { HsGuardedRhs }+>	: srcloc '|' exp0 '=' exp	{% do { g <- checkExpr $3;+>						e <- checkExpr $5;+>						return (HsGuardedRhs $1 g e) } }++-----------------------------------------------------------------------------+Expressions++Note: The Report specifies a meta-rule for lambda, let and if expressions+(the exp's that end with a subordinate exp): they extend as far to+the right as possible.  That means they cannot be followed by a type+signature or infix application.  To implement this without shift/reduce+conflicts, we split exp10 into these expressions (exp10a) and the others+(exp10b).  That also means that only an exp0 ending in an exp10b (an exp0b)+can followed by a type signature or infix application.  So we duplicate+the exp0 productions to distinguish these from the others (exp0a).++> exp   :: { HsExp }+>	: exp0b '::' srcloc ctype  	{ HsExpTypeSig $3 $1 $4 }+>	| exp0				{ $1 }++> exp0 :: { HsExp }+>	: exp0a				{ $1 }+>	| exp0b				{ $1 }++> exp0a :: { HsExp }+>	: exp0b qop exp10a		{ HsInfixApp $1 $2 $3 }+>	| exp10a			{ $1 }++> exp0b :: { HsExp }+>	: exp0b qop exp10b		{ HsInfixApp $1 $2 $3 }+>	| exp10b			{ $1 }++> exp10a :: { HsExp }+>	: '\\' srcloc apats '->' exp	{ HsLambda $2 (reverse $3) $5 }+>  	| 'let' decllist 'in' exp	{ HsLet $2 $4 }+>	| 'if' exp 'then' exp 'else' exp { HsIf $2 $4 $6 }+>	| 'proc' apat '->' cmd		{ ArrSyn.translate $2 $4 }++> exp10b :: { HsExp }+>	: 'case' exp 'of' altslist	{ HsCase $2 $4 }+>	| '-' fexp			{ HsNegApp $2 }+>  	| 'do' stmtlist			{ HsDo $2 }+>	| fexp				{ $1 }++> fexp :: { HsExp }+>	: fexp aexp			{ HsApp $1 $2 }+>  	| aexp				{ $1 }++> apats :: { [HsPat] }+>	: apats apat			{ $2 : $1 }+>  	| apat				{ [$1] }++> apat :: { HsPat }+>	: aexp				{% checkPattern $1 }++UGLY: Because patterns and expressions are mixed, aexp has to be split into+two rules: One right-recursive and one left-recursive. Otherwise we get two+reduce/reduce-errors (for as-patterns and irrefutable patters).++Even though the variable in an as-pattern cannot be qualified, we use+qvar here to avoid a shift/reduce conflict, and then check it ourselves+(as for vars above).++> aexp	:: { HsExp }+>	: qvar '@' aexp			{% do { n <- checkUnQual $1;+>						return (HsAsPat n $3) } }+>	| '~' aexp			{ HsIrrPat $2 }+>  	| aexp1				{ $1 }++Note: The first two alternatives of aexp1 are not necessarily record+updates: they could be labeled constructions.++> aexp1	:: { HsExp }+>  	: aexp1 '{' '}' 		{% mkRecConstrOrUpdate $1 [] }+>  	| aexp1 '{' fbinds '}' 		{% mkRecConstrOrUpdate $1 (reverse $3) }+>  	| aexp2				{ $1 }++According to the Report, the left section (e op) is legal iff (e op x)+parses equivalently to ((e) op x).  Thus e must be an exp0b.++> aexp2	:: { HsExp }+>	: qvar				{ HsVar $1 }+>	| gcon				{ $1 }+>  	| literal			{ HsLit $1 }+>	| '[|' exp '|]' 	        { hsQuote $2 }  -- for template haskell+>	| '$(' exp ')'			{ hsSplice $2 } -- for template haskell+>	| '(' exp ')'			{ HsParen $2 }+>	| '(' texps ')'			{ HsTuple (reverse $2) }+>	| '[' list ']'                  { $2 }+>	| '(' exp0b qop ')'		{ HsLeftSection $2 $3  }+>	| '(' qopm exp0 ')'		{ HsRightSection $2 $3 }+>	| '_'				{ HsWildCard }++> commas :: { Int }+>	: commas ','			{ $1 + 1 }+>	| ','				{ 1 }++> texps :: { [HsExp] }+>	: texps ',' exp			{ $3 : $1 }+>	| exp ',' exp			{ [$3,$1] }++-----------------------------------------------------------------------------+List expressions++The rules below are little bit contorted to keep lexps left-recursive while+avoiding another shift/reduce-conflict.++> list :: { HsExp }+>	: exp				{ HsList [$1] }+>	| lexps 			{ HsList (reverse $1) }+>	| exp '..'			{ HsEnumFrom $1 }+>	| exp ',' exp '..' 		{ HsEnumFromThen $1 $3 }+>	| exp '..' exp	 		{ HsEnumFromTo $1 $3 }+>	| exp ',' exp '..' exp		{ HsEnumFromThenTo $1 $3 $5 }+>	| exp '|' quals			{ HsListComp $1 (reverse $3) }++> lexps :: { [HsExp] }+>	: lexps ',' exp 		{ $3 : $1 }+>	| exp ',' exp			{ [$3,$1] }++-----------------------------------------------------------------------------+List comprehensions++> quals :: { [HsStmt] }+>	: quals ',' qual		{ $3 : $1 }+>	| qual				{ [$1] }++> qual  :: { HsStmt }+>	: pat srcloc '<-' exp		{ HsGenerator $2 $1 $4 }+>	| exp				{ HsQualifier $1 }+>  	| 'let' decllist		{ HsLetStmt $2 }++-----------------------------------------------------------------------------+Case alternatives++> altslist :: { [HsAlt] }+>	: '{'  alts '}'			{ $2 }+>	| open alts close		{ $2 }++> alts :: { [HsAlt] }+>	: optsemis alts1 optsemis	{ reverse $2 }++> alts1 :: { [HsAlt] }+>	: alts1 semis alt		{ $3 : $1 }+>	| alt				{ [$1] }++> alt :: { HsAlt }+>	: srcloc pat ralt optwhere	{ HsAlt $1 $2 $3 $4 }++> ralt :: { HsGuardedAlts }+>	: '->' exp			{ HsUnGuardedAlt $2 }+>	| gdpats			{ HsGuardedAlts (reverse $1) }++> gdpats :: { [HsGuardedAlt] }+>	: gdpats gdpat			{ $2 : $1 }+>	| gdpat				{ [$1] }++> gdpat	:: { HsGuardedAlt }+>	: srcloc '|' exp0 '->' exp	{ HsGuardedAlt $1 $3 $5 }++> pat :: { HsPat }+>	: exp0b				{% checkPattern $1 }++-----------------------------------------------------------------------------+Statement sequences++As per the Report, but with stmt expanded to simplify building the list+without introducing conflicts.  This also ensures that the last stmt is+an expression.++> stmtlist :: { [HsStmt] }+>	: '{'  stmts '}'		{ $2 }+>	| open stmts close		{ $2 }++> stmts :: { [HsStmt] }+>	: 'let' decllist ';' stmts	{ HsLetStmt $2 : $4 }+>	| pat srcloc '<-' exp ';' stmts	{ HsGenerator $2 $1 $4 : $6 }+>	| exp ';' stmts			{ HsQualifier $1 : $3 }+>	| ';' stmts			{ $2 }+>	| exp ';'			{ [HsQualifier $1] }+>	| exp				{ [HsQualifier $1] }++-----------------------------------------------------------------------------+Record Field Update/Construction++> fbinds :: { [HsFieldUpdate] }+>	: fbinds ',' fbind		{ $3 : $1 }+>	| fbind				{ [$1] }++> fbind	:: { HsFieldUpdate }+>	: qvar '=' exp			{ HsFieldUpdate $1 $3 }++-----------------------------------------------------------------------------+Commands (for arrow expressions)+Largely analogous to the treatment of exp (qv), including the distinctions+exp0a/exp0b and exp10a/exp10b.++> cmd :: { ArrSyn.Cmd }+>	: exp0b '-<' exp		{ ArrSyn.Input $1 $3 }+>	| exp0b '-<<' exp		{ ArrSyn.Input $1 $3 }+>	| exp0b '>-' exp		{ ArrSyn.Input $3 $1 }+>	| exp0b '>>-' exp		{ ArrSyn.Input $3 $1 }+>	| cmd0				{ $1 }++> cmd0 :: { ArrSyn.Cmd }+>	: cmd0a				{ $1 }+>	| cmd0b				{ $1 }++> cmd0a :: { ArrSyn.Cmd }+>	: cmd0b qop cmd10a		{ ArrSyn.InfixOp $1 $2 $3 }+>	| cmd10a			{ $1 }++> cmd0b :: { ArrSyn.Cmd }+>	: cmd0b qop cmd10b		{ ArrSyn.InfixOp $1 $2 $3 }+>	| cmd10b			{ $1 }++> cmd10a :: { ArrSyn.Cmd }+>	: '\\' srcloc apats '->' cmd	{ ArrSyn.Kappa $2 (reverse $3) $5 }+>	| 'let' decllist 'in' cmd	{ ArrSyn.Let $2 $4 }+>	| 'let' cmddecl 'in' cmd	{ ArrSyn.LetCmd $2 $4 }+>	| 'if' exp 'then' cmd 'else' cmd { ArrSyn.If $2 $4 $6 }++> cmd10b :: { ArrSyn.Cmd }+>	: 'case' exp 'of' altslistA	{ ArrSyn.Case $2 $4 }+>	| 'do' stmtlistA		{ ArrSyn.Do (fst $2) (snd $2) }+>	| fcmd				{ $1 }++> fcmd :: { ArrSyn.Cmd }+>	: fcmd aexp			{ ArrSyn.App $1 $2 }+>	| acmd				{ $1 }++> acmd :: { ArrSyn.Cmd }+>	: '(' cmd ')'			{ ArrSyn.Paren $2 }+>	| '(|' aexp acmds '|)'		{ ArrSyn.Op $2 (reverse $3) }+>	| 'cmd' varid			{ ArrSyn.CmdVar $2 }++> acmds :: { [ArrSyn.Cmd] }+>	: acmds acmd			{ $2 : $1 }+>	| acmd				{ [$1] }++Case commands++> altslistA :: { [ArrSyn.Alt] }+>	: '{'  altsA '}'		{ $2 }+>	| open altsA close		{ $2 }++> altsA :: { [ArrSyn.Alt] }+>	: optsemis alts1A optsemis	{ reverse $2 }++> alts1A :: { [ArrSyn.Alt] }+>	: alts1A semis altA		{ $3 : $1 }+>	| altA				{ [$1] }++> altA :: { ArrSyn.Alt }+>	: srcloc pat raltA optwhere	{ ArrSyn.Alt $1 $2 $3 $4 }++> raltA :: { ArrSyn.GuardedAlts }+>	: '->' cmd			{ ArrSyn.UnGuardedAlt $2 }+>	| gdpatsA			{ ArrSyn.GuardedAlts (reverse $1) }++> gdpatsA :: { [ArrSyn.GuardedAlt] }+>	: gdpatsA gdpatA		{ $2 : $1 }+>	| gdpatA			{ [$1] }++> gdpatA :: { ArrSyn.GuardedAlt }+>	: srcloc '|' exp0 '->' cmd	{ ArrSyn.GuardedAlt $1 $3 $5 }++The arrow version of do statements++> stmtlistA :: { ArrSyn.Stmts }+>	: '{'  stmtsA '}'		{ $2 }+>	| open stmtsA close		{ $2 }++Note that stmts/stmtsA must be right-recursive; otherwise it is not+possible, in situations like++	'proc' pat '->' 'do' '(' 'let' decls . ';'++to choose between the productions++	qual -> 'let' decls+	qualA -> 'let' decls++Now that decision is delayed until the trailing exp/cmd is seen.++> stmtsA :: { ArrSyn.Stmts }+>	: squalA ';' stmtsA		{ ($1 : fst $3, snd $3) }+>	| cmd ';' stmtsA		{ (ArrSyn.Generator undefined HsPWildCard $1 : fst $3, snd $3) }+>	| 'let' decllist ';' stmtsA	{ (ArrSyn.LetStmt $2 : fst $4, snd $4) }+>	| ';' stmtsA			{ $2 }+>	| cmd ';'			{ ([], $1) }+>	| cmd				{ ([], $1) }++> squalA :: { ArrSyn.Stmt }+>	: pat srcloc '<-' cmd		{ ArrSyn.Generator $2 $1 $4 }+>	| cmd '->' srcloc pat		{ ArrSyn.Generator $3 $4 $1 }+>	| 'rec' defnsA			{ ArrSyn.RecStmt (reverse $2) }+>	| 'let' cmddecl			{ ArrSyn.LetCmdStmt $2 }++> cmddecl :: { ArrSyn.VarDecl ArrSyn.Cmd }+>	: srcloc 'cmd' varid '=' cmd	{ ArrSyn.VarDecl $1 $3 $5 }++> defnsA :: { [ArrSyn.Stmt] }+>	: '{'  stmts1A '}'		{ $2 }+>	| open stmts1A close		{ $2 }++> stmts1A :: { [ArrSyn.Stmt] }+>	: stmts1A ';' qualA		{ $3 : $1 }+>	| qualA				{ [$1] }++> qualA :: { ArrSyn.Stmt }+>	: squalA			{ $1 }+>	| 'let' decllist		{ ArrSyn.LetStmt $2 }++-----------------------------------------------------------------------------+Variables, Constructors and Operators.++> gcon :: { HsExp }+>  	: '(' ')'		{ unit_con }+>	| '[' ']'		{ HsList [] }+>	| '(' commas ')'	{ tuple_con $2 }+>  	| qcon			{ HsCon $1 }++> var 	:: { HsName }+>	: varid			{ $1 }+>	| '(' varsym ')'	{ $2 }++> qvar 	:: { HsQName }+>	: qvarid		{ $1 }+>	| '(' qvarsym ')'	{ $2 }++> con	:: { HsName }+>	: conid			{ $1 }+>	| '(' consym ')'        { $2 }++> qcon	:: { HsQName }+>	: qconid		{ $1 }+>	| '(' gconsym ')'	{ $2 }++> varop	:: { HsName }+>	: varsym		{ $1 }+>	| '`' varid '`'		{ $2 }++> qvarop :: { HsQName }+>	: qvarsym		{ $1 }+>	| '`' qvarid '`'	{ $2 }++> qvaropm :: { HsQName }+>	: qvarsymm		{ $1 }+>	| '`' qvarid '`'	{ $2 }++> conop :: { HsName }+>	: consym		{ $1 }	+>	| '`' conid '`'		{ $2 }++> qconop :: { HsQName }+>	: gconsym		{ $1 }+>	| '`' qconid '`'	{ $2 }++> op	:: { HsOp }+>	: varop			{ HsVarOp $1 }+>	| conop 		{ HsConOp $1 }++> qop	:: { HsQOp }+>	: qvarop		{ HsQVarOp $1 }+>	| qconop		{ HsQConOp $1 }++> qopm	:: { HsQOp }+>	: qvaropm		{ HsQVarOp $1 }+>	| qconop		{ HsQConOp $1 }++> gconsym :: { HsQName }+>	: ':'			{ list_cons_name }+>	| qconsym		{ $1 }++-----------------------------------------------------------------------------+Identifiers and Symbols++> qvarid :: { HsQName }+>	: varid			{ UnQual $1 }+>	| QVARID		{ Qual (Module (fst $1)) (HsIdent (snd $1)) }++> varid :: { HsName }+>	: VARID			{ HsIdent $1 }+>	| 'as'			{ HsIdent "as" }+>	| 'export'		{ HsIdent "export" }+>	| 'hiding'		{ HsIdent "hiding" }+>	| 'qualified'		{ HsIdent "qualified" }+>	| 'safe'		{ HsIdent "safe" }+>	| 'unsafe'		{ HsIdent "unsafe" }++> qconid :: { HsQName }+>	: conid			{ UnQual $1 }+>	| QCONID		{ Qual (Module (fst $1)) (HsIdent (snd $1)) }++> conid :: { HsName }+>	: CONID			{ HsIdent $1 }++> qconsym :: { HsQName }+>	: consym		{ UnQual $1 }+>	| QCONSYM		{ Qual (Module (fst $1)) (HsSymbol (snd $1)) }++> consym :: { HsName }+>	: CONSYM		{ HsSymbol $1 }++> qvarsym :: { HsQName }+>	: varsym		{ UnQual $1 }+>	| qvarsym1		{ $1 }++> qvarsymm :: { HsQName }+>	: varsymm		{ UnQual $1 }+>	| qvarsym1		{ $1 }++> varsym :: { HsName }+>	: VARSYM		{ HsSymbol $1 }+>	| '-'			{ HsSymbol "-" }+>	| '!'			{ HsSymbol "!" }++> varsymm :: { HsName } -- varsym not including '-'+>	: VARSYM		{ HsSymbol $1 }+>	| '!'			{ HsSymbol "!" }++> qvarsym1 :: { HsQName }+>	: QVARSYM		{ Qual (Module (fst $1)) (HsSymbol (snd $1)) }++> literal :: { HsLiteral }+>	: INT			{ HsInt $1 }+>	| CHAR 			{ HsChar $1 }+>	| RATIONAL		{ HsFrac $1 }+>	| STRING		{ HsString $1 }++> srcloc :: { SrcLoc }	:	{% getSrcLoc }+ +-----------------------------------------------------------------------------+Layout++> open  :: { () }	:	{% pushCurrentContext }++> close :: { () }+>	: vccurly		{ () } -- context popped in lexer.+>	| error			{% popContext }++-----------------------------------------------------------------------------+Miscellaneous (mostly renamings)++> modid :: { Module }+>	: CONID			{ Module $1 }+>	| QCONID		{ Module (fst $1 ++ '.':snd $1) }++> tyconorcls :: { HsName }+>	: conid			{ $1 }++> tycon :: { HsName }+>	: conid			{ $1 }++> qtyconorcls :: { HsQName }+>	: qconid		{ $1 }++> qtycls :: { HsQName }+>	: qconid		{ $1 }++> tyvar :: { HsName }+>	: varid			{ $1 }++-----------------------------------------------------------------------------++> {+> happyError :: P a+> happyError = fail "Parse error"++> -- | Parse of a string, which should contain a complete Haskell 98 module.+> parseModule :: String -> ParseResult HsModule+> parseModule = runParser parse++> -- | Parse of a string, which should contain a complete Haskell 98 module.+> parseModuleWithMode :: ParseMode -> String -> ParseResult HsModule+> parseModuleWithMode mode = runParserWithMode mode parse+> }
+ preprocessor/State.hs view
@@ -0,0 +1,15 @@+-- A Haskell-98-compatible subset of the Control.Monad.State module.++module State(State, runState, get, put) where++newtype State s a = State { runState :: s -> (a, s) }++instance Monad (State s) where+	return x = State (\n -> (x, n))+	State v >>= f = State (\n -> let (x, n') = v n in runState (f x) n')++get :: State s s+get = State (\s -> (s, s))++put :: s -> State s ()+put s = State (\_ -> ((), s))
+ preprocessor/Utils.lhs view
@@ -0,0 +1,225 @@+Miscellaneous utilities on ordinary Haskell syntax used by the arrow+translator.++> module Utils(+>	FreeVars(freeVars), DefinedVars(definedVars),+>	failureFree, irrPat, paren, parenInfixArg,+>	tuple, tupleP,+>	times, +>       hsQuote, hsSplice, quoteArr, quoteInit     -- for CCA+> ) where++> import Data.Set (Set)+> import qualified Data.Set as Set+> import Language.Haskell.Syntax+> import Data.Generics (everywhere, mkT)++The set of free variables in some construct.++> class FreeVars a where+>	freeVars :: a -> Set HsName++> instance FreeVars a => FreeVars [a] where+>	freeVars = Set.unions . map freeVars++> instance FreeVars HsPat where+>	freeVars (HsPVar n) = Set.singleton n+>	freeVars (HsPLit _) = Set.empty+>	freeVars (HsPNeg p) = freeVars p+>	freeVars (HsPInfixApp p1 _ p2) = freeVars p1 `Set.union` freeVars p2+>	freeVars (HsPApp _ ps) = freeVars ps+>	freeVars (HsPTuple ps) = freeVars ps+>	freeVars (HsPList ps) = freeVars ps+>	freeVars (HsPParen p) = freeVars p+>	freeVars (HsPRec _ pfs) = freeVars pfs+>	freeVars (HsPAsPat n p) = Set.insert n (freeVars p)+>	freeVars (HsPWildCard) = Set.empty+>	freeVars (HsPIrrPat p) = freeVars p++> instance FreeVars HsPatField where+>	freeVars (HsPFieldPat _ p) = freeVars p++> instance FreeVars HsFieldUpdate where+>	freeVars (HsFieldUpdate _ e) = freeVars e++> instance FreeVars HsExp where+>	freeVars (HsVar n) = freeVars n+>	freeVars (HsCon _) = Set.empty+>	freeVars (HsLit _) = Set.empty+>	freeVars (HsInfixApp e1 op e2) =+>		freeVars e1 `Set.union` freeVars op `Set.union` freeVars e2+>	freeVars (HsApp f e) = freeVars f `Set.union` freeVars e+>	freeVars (HsNegApp e) = freeVars e+>	freeVars (HsLambda _ ps e) = freeVars e `Set.difference` freeVars ps+>	freeVars (HsLet decls e) =+>		(freeVars decls `Set.union` freeVars e) `Set.difference`+>			definedVars decls+>	freeVars (HsIf e1 e2 e3) =+>		freeVars e1 `Set.union` freeVars e2 `Set.union` freeVars e3+>	freeVars (HsCase e as) = freeVars e `Set.union` freeVars as+>	freeVars (HsDo ss) = freeVarsStmts ss+>	freeVars (HsTuple es) = freeVars es+>	freeVars (HsList es) = freeVars es+>	freeVars (HsParen e) = freeVars e+>	freeVars (HsLeftSection e op) = freeVars e `Set.union` freeVars op+>	freeVars (HsRightSection op e) = freeVars op `Set.union` freeVars e+>	freeVars (HsRecConstr _ us) = freeVars us+>	freeVars (HsRecUpdate e us) = freeVars e `Set.union` freeVars us+>	freeVars (HsEnumFrom e) = freeVars e+>	freeVars (HsEnumFromTo e1 e2) = freeVars e1 `Set.union` freeVars e2+>	freeVars (HsEnumFromThen e1 e2) = freeVars e1 `Set.union` freeVars e2+>	freeVars (HsEnumFromThenTo e1 e2 e3) =+>		freeVars e1 `Set.union` freeVars e2 `Set.union` freeVars e3+>	freeVars (HsListComp e ss) =+>		freeVars e `Set.union` freeVarsStmts ss+>	freeVars (HsExpTypeSig _ e _) = freeVars e+>	freeVars (HsAsPat _ _) = error "freeVars (x @ p)"+>	freeVars (HsWildCard) = error "freeVars _"+>	freeVars (HsIrrPat _) = error "freeVars ~p"++> instance FreeVars HsQOp where+>	freeVars (HsQVarOp n) = freeVars n+>	freeVars (HsQConOp _) = Set.empty++> instance FreeVars HsQName where+>	freeVars (UnQual v) = Set.singleton v+>	freeVars _ = Set.empty++> instance FreeVars HsAlt where+>	freeVars (HsAlt _ p gas decls) =+>		(freeVars gas `Set.union` freeVars decls) `Set.difference`+>		(freeVars p `Set.union` definedVars decls)++> instance FreeVars HsGuardedAlts where+>	freeVars (HsUnGuardedAlt e) = freeVars e+>	freeVars (HsGuardedAlts alts) = freeVars alts++> instance FreeVars HsGuardedAlt where+>	freeVars (HsGuardedAlt _ e1 e2) = freeVars e1 `Set.union` freeVars e2++> instance FreeVars HsDecl where+>	freeVars (HsFunBind ms) = freeVars ms+>	freeVars (HsPatBind _ p rhs decls) =+>		(freeVars rhs `Set.union` freeVars decls) `Set.difference`+>		(freeVars p `Set.union` definedVars decls)+>	freeVars _ = Set.empty++> instance FreeVars HsMatch where+>	freeVars (HsMatch _ n ps rhs decls) =+>		(freeVars rhs `Set.union` freeVars decls) `Set.difference`+>		(Set.insert n (freeVars ps) `Set.union` definedVars decls)++> instance FreeVars HsRhs where+>	freeVars (HsUnGuardedRhs e) = freeVars e+>	freeVars (HsGuardedRhss grs) = freeVars grs++> instance FreeVars HsGuardedRhs where+>	freeVars (HsGuardedRhs _ e1 e2) = freeVars e1 `Set.union` freeVars e2++> freeVarsStmts :: [HsStmt] -> Set HsName+> freeVarsStmts = foldr addStmt Set.empty+>	where	addStmt (HsGenerator _ p e) s =+>			freeVars e `Set.union` (s `Set.difference` freeVars p)+>		addStmt (HsQualifier e) _s = freeVars e+>		addStmt (HsLetStmt decls) s =+>			(freeVars decls `Set.union` s) `Set.difference` definedVars decls++The set of variables defined by a construct.++> class DefinedVars a where+>	definedVars :: a -> Set HsName++> instance DefinedVars a => DefinedVars [a] where+>	definedVars = Set.unions . map definedVars++> instance DefinedVars HsDecl where+>	definedVars (HsFunBind (HsMatch _ n _ _ _:_)) = Set.singleton n+>	definedVars (HsPatBind _ p _ _) = freeVars p+>	definedVars _ = Set.empty++Is the pattern failure-free?+(This is incomplete at the moment, because patterns made with unique+constructors should be failure-free, but we have no way of detecting them.)++> failureFree :: HsPat -> Bool+> failureFree (HsPVar _) = True+> failureFree (HsPApp n ps) = n == unit_con_name && null ps+> failureFree (HsPTuple ps) = all failureFree ps+> failureFree (HsPParen p) = failureFree p+> failureFree (HsPAsPat _ p) = failureFree p+> failureFree (HsPWildCard) = True+> failureFree (HsPIrrPat _) = True+> failureFree _ = False++Irrefutable version of a pattern++> irrPat :: HsPat -> HsPat+> irrPat p@(HsPVar _) = p+> irrPat (HsPParen p) = HsPParen (irrPat p)+> irrPat (HsPAsPat n p) = HsPAsPat n (irrPat p)+> irrPat p@(HsPWildCard) = p+> irrPat p@(HsPIrrPat _) = p+> irrPat p = HsPIrrPat p++Make an expression into an aexp, by adding parentheses if required.++> paren :: HsExp -> HsExp+> paren e = if isAexp e then e else HsParen e+>	where	isAexp (HsVar _) = True+>		isAexp (HsCon _) = True+>		isAexp (HsLit _) = True+>		isAexp (HsParen _) = True+>		isAexp (HsTuple _) = True+>		isAexp (HsList _) = True+>		isAexp (HsEnumFrom _) = True+>		isAexp (HsEnumFromTo _ _) = True+>		isAexp (HsEnumFromThen _ _) = True+>		isAexp (HsEnumFromThenTo _ _ _) = True+>		isAexp (HsListComp _ _) = True+>		isAexp (HsLeftSection _ _) = True+>		isAexp (HsRightSection _ _) = True+>		isAexp (HsRecConstr _ _) = True+>		isAexp (HsRecUpdate _ _) = True+>		isAexp _ = False++Make an expression into an fexp, by adding parentheses if required.++> parenInfixArg :: HsExp -> HsExp+> parenInfixArg e@(HsApp _ _) = e+> parenInfixArg e = paren e++Tuples++> tuple :: [HsExp] -> HsExp+> tuple [] = unit_con+> tuple [e] = e+> tuple es = HsTuple es++> tupleP :: [HsPat] -> HsPat+> tupleP [] = HsPApp unit_con_name []+> tupleP [e] = e+> tupleP es = HsPTuple es++Compose a function n times.++> times :: Int -> (a -> a) -> a -> a+> times n f a = foldr ($) a (replicate n f)++> -- | helper for template haskell syntax hack+> hsQuote e = HsApp (HsApp lq e) rq+>   where lq = var "[|"+>         rq = var "|]"+> hsSplice e = HsApp (HsApp lq e) rq+>   where lq = var "$("+>         rq = var ")"+> quoteArr :: HsExp -> HsExp+> -- quoteArr f = hsSplice (HsApp (var "arr") (hsQuote f))+> quoteArr f = HsApp (HsApp (var "arr'") (hsQuote f)) f+> quoteInit :: HsExp -> HsExp+> quoteInit = everywhere (mkT aux)+>   where+>--     aux (HsApp (HsVar (UnQual (HsIdent "init"))) i) = hsSplice (HsApp (var "init") (hsQuote i)) +>     aux (HsApp (HsVar (UnQual (HsIdent "init"))) i) = HsApp (HsApp (var "init'") (hsQuote i)) i +>     aux x = x+> var = HsVar . UnQual . HsIdent+
+ src/Control/CCA.lhs view
@@ -0,0 +1,26 @@+> {-# LANGUAGE TemplateHaskell #-}+> {-# LANGUAGE FlexibleInstances #-}++> module Control.CCA +>   ((>>>), (<<<), first, second, (***), (&&&), loop, +>    Arrow, ArrowLoop, ArrowInit, +>    arr, init, arr', init',+>    norm, normOpt) where++> import Control.Arrow hiding (arr, returnA)+> import Control.CCA.Types hiding (init)+> import Control.CCA.CCNF+> import Language.Haskell.TH+> import Language.Haskell.TH.Syntax+> import Language.Haskell.TH.Instances+> import Prelude hiding (init)++> arr :: ExpQ -> ExpQ+> arr e = appE [|arr' e|] e++> init :: ExpQ -> ExpQ+> init i = appE [|init' i|] i++> returnA :: ArrowInit a => a b b+> returnA = arr' [|id|] id+
+ src/Control/CCA/CCNF.lhs view
@@ -0,0 +1,321 @@+> {-# LANGUAGE CPP, TemplateHaskell, FlexibleInstances #-}++> module Control.CCA.CCNF +>   (norm, normOpt, +>    pprNorm, pprNormOpt, printCCA, ASyn) where++#if __GLASGOW_HASKELL__ >= 610++> import Control.Category+> import Prelude hiding ((.), init)++#else++> import Prelude hiding (init)++#endif++> import Control.Arrow +> import Control.CCA.Types+> import Data.Char (isAlpha)+> import Language.Haskell.TH+> import Language.Haskell.TH.Syntax+> import Language.Haskell.TH.Instances+> import qualified Data.Generics as G (everywhere, mkT)++Internal Representation+=======================++We use AExp to syntactically represent an arrow for normalization purposes. ++> data AExp+>   = Arr ExpQ+>   | First AExp+>   | AExp :>>> AExp+>   | Loop AExp+>   | LoopD ExpQ AExp    -- loop with initialized feedback+>   | LoopB ExpQ AExp    -- loop with both immediate and initialized feedback+>   | Init ExpQ+>   | Lft AExp++> infixl 1 :>>>++We use phantom types to make ASyn an Arrow.++> newtype ASyn b c = AExp AExp ++#if __GLASGOW_HASKELL__ >= 610++> instance Category ASyn where+>   id = AExp (Arr [|\x -> x|])+>   AExp g . AExp f = AExp (f :>>> g)++> instance Arrow ASyn where+>   arr f = error "use arr' instead" +>   first (AExp f) = AExp (First f)++#else++> instance Arrow ASyn where+>   arr f = error "use arr' instead" +>   AExp f >>> AExp g = AExp (f :>>> g)+>   first (AExp f) = AExp (First f)++#endif++> instance ArrowLoop ASyn where+>   loop (AExp f) = AExp (Loop f)++> instance ArrowInit ASyn where+>   init i = error "use init' instead"+>   arr' f _ = AExp (Arr f)+>   init' i _ = AExp (Init i)+++ArrowChoice only requires definition for 'left', but the default implementation+for 'right' and '|||' uses arr so we need to redefine them using arr' here.+'+++' is also redefined here for completeness.++> instance ArrowChoice ASyn where+>   left (AExp f) = AExp (Lft f)+>   right f = arr' [| mirror |] mirror >>> left f+>             >>> arr' [| mirror |] mirror+>   f +++ g = left f >>> right g+>   f ||| g = f +++ g >>> arr' [| untag |] untag++These helpers have to be at the top-level because TH cannot splice in a+polymorphic local function.++> mirror (Left x) = Right x+> mirror (Right y) = Left y++> untag (Left x) = x+> untag (Right y) = y++Pretty printing AExp.++> printCCA (AExp x) = printAExp x+> printAExp x = runQ (fromAExp x) >>= putStrLn . simplify . pprint+> simplify = unwords . map (unwords . (map aux) . words) . lines +>   where aux (c:x) | not (isAlpha c) = c : aux x+>         aux x = let (u, v) = break (=='.') x+>                 in if length v > 1 then aux (tail v)+>                                    else x++Traversal over AExp is defined in terms of imap (intermediate map) +and everywhere. ++> type Traversal = AExp -> AExp+> imap :: Traversal -> Traversal+> imap h (First f) = First (h f)+> imap h (f :>>> g) = h f :>>> h g+> imap h (Loop f) = Loop (h f)+> imap h (LoopD i f) = LoopD i (h f)+> imap h (LoopB i f) = LoopB i (h f)+> imap h (Lft f) = Lft (h f)+> imap h x = x++> everywhere :: Traversal -> Traversal +> everywhere h e = h (imap (everywhere h) e)++Normalization+=============++norm is a TH function that normalizes a given CCA, e.g., $(norm e) will+give the CCNF of e. ++> norm :: ASyn t t1 -> ExpQ         -- returns a generic ArrowInit arrow+> norm (AExp e) = fromAExp (normE e)+> normE = everywhere (normalize normE)++normOpt returns the pair of state and pure function as (i, f) from optimized +CCNF in the form loopD i (arr f). ++> normOpt :: ASyn t t1 -> ExpQ      -- returns a pair of state and pure function (s, f)+> normOpt (AExp e) = +>   case toLoopD $ normE e of+>     LoopD i (Arr f) -> tupE [i, f]+>     _         -> error "The given arrow can't be normalized to optimized CCNF." ++pprNorm and pprNormOpt return the pretty printed normal forms as a +string.++> pprNorm = ppr' . norm+> pprNormOpt = ppr' . normOpt+> ppr' e = runQ (fmap toLet e) >>= litE . StringL . simplify . pprint++fromAExp converts AExp back to TH Exp structure.++> fromAExp (Arr f) = appE [|arr|] f+> fromAExp (First f) = appE [|first|] (fromAExp f)+> fromAExp (f :>>> g) = infixE (Just (fromAExp f)) [|(>>>)|] (Just (fromAExp g))+> fromAExp (Loop f) = appE [|loop|] (fromAExp f)+> fromAExp (LoopD i f) = appE (appE [|loopD|] i) (fromAExp f)+> fromAExp (LoopB i f) = appE (appE [|loopB|] i) (fromAExp f)+> fromAExp (Init i) = appE [|init|] i+> fromAExp (Lft f) = appE [|left|] (fromAExp f)++CCNF+====++Arrow laws:++> normalize norm (Arr f :>>> Arr g) = Arr (g `o` f)+> normalize norm (First (Arr f)) = Arr (f `crossE` idE)+> normalize norm (First f :>>> First g) = First ((f :>>> g))++Choice:++> normalize norm (Lft (Arr f)) = Arr [| \x -> case x of+>                                               Left a -> Left ($f a)+>                                               Right b -> Right b |]+> normalize norm (Lft (LoopB i f)) =+>     norm (LoopB i (Arr tagE :>>> Lft f :>>> Arr untagE))+>     where+>       tagE = [| \(inp,s) -> case inp of+>                               Left a -> Left (a, s)+>                               Right c -> Right (c, s) |]+>       untagE = [| \out -> case out of+>                             Left (b,s) -> (Left b, s)+>                             Right (c,s) -> (Right c, s) |]++LoopB laws:++> normalize norm (h :>>> (LoopB i f)) = norm (LoopB i (First h :>>> f))+> normalize norm ((LoopB i f) :>>> h) = norm (LoopB i (f :>>> First h))+> normalize norm (LoopB i (LoopB j f)) = +>   norm (LoopB (tupE [i, j]) (Arr shuffleE :>>> f :>>> Arr shuffleE'))+>   where+>     shuffleE = assocE' `o` (idE `crossE` transposeE)+>     shuffleE' = (idE `crossE` transposeE) `o` assocE+> normalize norm (First (LoopB i f)) = +>  norm (LoopB i (Arr juggleE :>>> First f :>>> Arr juggleE))++LoopD, Loop, and Init are translated to LoopB:++>-- normalize norm (LoopD i f) = norm (Loop (f :>>> secondA (Init i)))+>-- normalize norm (Loop f) = LoopB (Term "()") (norm (Arr assocE' :>>> First f :>>> Arr assocE))+>-- normalize norm (Init i) = LoopB i (Arr (swapE `o` juggleE `o` swapE))++LoopD laws++> normalize norm (h :>>> LoopD i f) = norm (LoopD i (First h :>>> f))+> normalize norm (LoopD i f :>>> h) = norm (LoopD i (f :>>> First h))+> normalize norm (LoopD i (LoopD j f)) = +>   norm (LoopD (tupE [i, j]) (Arr assocE' :>>> f :>>> Arr assocE))+> normalize norm (First (LoopD i f)) = +>   norm (LoopD i (Arr juggleE :>>> First f :>>> Arr juggleE))++Loop laws++> normalize norm (h :>>> Loop f) = norm (Loop (First h :>>> f))+> normalize norm (Loop f :>>> h) = norm (Loop (f :>>> First h))+> normalize norm (Loop (Loop f)) = +>   norm (Loop (Arr assocE' :>>> f :>>> Arr assocE))+> normalize norm (First (Loop f)) = +>   norm (Loop (Arr juggleE :>>> First f :>>> Arr juggleE))++Loop and LoopB++> normalize norm (Loop (LoopB i f)) = +>   norm (LoopB i (Arr shuffleE :>>> f :>>> Arr shuffleE'))+>  where +>    shuffleE = assocE' `o` (idE `crossE` assocE)+>    shuffleE' = (idE `crossE` assocE') `o` assocE++> normalize norm (LoopB i (Loop f)) = +>   norm (LoopB i (Arr shuffleE :>>> f :>>> Arr shuffleE'))+>   where +>     shuffleE = assocE' `o` (idE `crossE` juggleE)+>     shuffleE' = (idE `crossE` juggleE) `o` assocE++Loop and LoopD++> normalize norm (Loop (LoopD i f)) = +>   norm (LoopB i (Arr assocE' :>>> f :>>> Arr assocE))++> normalize norm (LoopD i (Loop f)) = +>   norm (LoopB i (Arr (juggleE `o` assocE') :>>> f :>>> +>                  Arr (assocE' `o` juggleE)))++LoopB AND LoopD++> normalize norm (LoopB i (LoopD j f)) = +>   norm (LoopB (tupE [i, j]) (Arr shuffleE :>>> f :>>> Arr shuffleE'))+>   where+>     shuffleE = assocE' `o` (idE `crossE` assocE')+>     shuffleE' = (idE `crossE` assocE) `o` assocE++> normalize norm (LoopD i (LoopB j f)) = +>   norm (LoopB (tupE [i, j]) (Arr shuffleE :>>> f :>>> Arr shuffleE'))+>   where+>     shuffleE = transposeE `o` assocE'+>     shuffleE' = assocE `o` transposeE++Init++> normalize norm (Init i) = norm (LoopD i (Arr swapE))++All the other cases remain unchanged ++> normalize norm e = e ++Optimized CCNF+==============++to transform loopB to loopD:++   loopB i (arr f) ---> loopD i (arr g)++we must generate the function g from f:++   g (x, z) = let (x', (y, z')) = f (x, (y, z))+              in (x', z')++> toLoopD (LoopB i (Arr f)) = LoopD i (Arr g)+>   where+>     g = do+>       f' <- f+>       [x, y, z, x', z'] <- mapM newName ["x", "y", "z", "x'", "z'"]+>       return $ LamE [TupP [VarP x, VarP z]] $ LetE +>                [ValD (TupP [VarP x', TupP [VarP y, VarP z']]) (NormalB $+>                 AppE f' (TupE [VarE x, TupE [VarE y, VarE z]])) []]+>                (TupE [VarE x', VarE z'])+> toLoopD x = x++Notice the recursively defined variable y, and it'll prevent GHC from inlining+g and f.  So we must further transform f into a set of let-expressions, and+move the definition of y inside. Here is a set of transformations we do to+function g:++1.  Transform function applications to let-expressions.++  (\x -> e1) e2  === let x = e2 in e1++> toLet :: Exp -> Exp+> toLet = G.everywhere (G.mkT aux)+>   where+>     aux (AppE (LamE [pat] body) arg) = LetE [ValD pat (NormalB arg) []] body+>     aux (AppE (LamE (pat:ps) body) arg) = LamE ps (LetE [ValD pat (NormalB arg) []] body)+>     aux x = x++2.  TODO: For every pattern match agains tuples, unfold right-hand-size until it is a+    tuple too, and then break up into a list of let-expressions. ++Auxiliary Functions+===================++> f `o` g = appE (appE [|\f g x -> f (g x)|] f) g+> f `crossE` g = appE (appE [|\f g x -> (f $ fst x, g $ snd x)|] f) g+> idE = [|\x -> x|]+> dupE = [|\x -> (x, x)|]+> swapE = [|\x -> (snd x, fst x)|]+> curryE = [|\f x y -> f (x, y)|]+> uncurryE = [|\f x -> f (fst x) (snd x)|]+> assocE = [|\x -> (fst $ fst x, (snd $ fst x, snd x))|]+> assocE' = [|\x -> ((fst x, fst $ snd x), snd $ snd x)|]+> juggleE = assocE' `o` (idE `crossE` swapE) `o` assocE+> transposeE = [|\x -> ((fst $ fst x, fst $ snd x),+>                       (snd $ fst x, snd $ snd x))|]++
+ src/Control/CCA/Types.lhs view
@@ -0,0 +1,26 @@+> {-# LANGUAGE CPP #-}++> module Control.CCA.Types where++#if __GLASGOW_HASKELL__ >= 610++> import Control.Category++#endif++> import Control.Arrow +> import Language.Haskell.TH+> import Prelude hiding (init)++> class (Arrow a, ArrowLoop a) => ArrowInit a where+>   init :: b -> a b b+>   arr' :: ExpQ -> (b -> c) -> a b c+>   arr' _ = arr+>   init' :: ExpQ -> b -> a b b+>   init' _ = init+>   loopD :: e -> a (b, e) (c, e) -> a b c +>   loopD i f = loop (f >>> second (init i))+>   loopB :: e -> a (b, (d, e)) (c, (d, e)) -> a b c+>   loopB i f = loop (f >>> second (second (init i)))++
+ src/Language/Haskell/TH/Instances.hs view
@@ -0,0 +1,159 @@+{-# OPTIONS -fglasgow-exts #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TypeSynonymInstances #-}++module Language.Haskell.TH.Instances where+import Data.Ratio+import GHC.Exts+import GHC.Prim+import Language.Haskell.TH.Syntax++instance Lift a => Lift (Q a) where+  lift x = x >>= \x -> [| return x |] ++instance Lift Exp where+  lift (VarE name) = [|VarE name|]+  lift (ConE name) = [|ConE name|]+  lift (LitE lit)  = [|LitE lit|]+  lift (AppE e1 e2) = [|AppE e1 e2|]+  lift (InfixE e1 e2 e3) = [|InfixE e1 e2 e3|]+  lift (LamE p e) = [|LamE p e|]+  lift (TupE e) = [|TupE e|]+  lift (CondE e1 e2 e3) = [|CondE e1 e2 e3|]+  lift (LetE d e) = [|LetE d e|]+  lift (CaseE e m) = [|CaseE e m|]+  lift (DoE s) = [|DoE s|]+  lift (CompE s) = [|CompE s|]+  lift (ArithSeqE r) = [|ArithSeqE r|]+  lift (ListE e) = [|ListE e|]+  lift (SigE e t) = [|SigE e t|]+  lift (RecConE n f) = [|RecConE n f|]+  lift (RecUpdE e f) = [|RecUpdE e f|]++instance Lift Name where+  lift (Name o f) = [|Name o f|]++instance Lift OccName where+  lift s = let s' = occString s in [|mkOccName s'|]++fromInt (I# i) = i++instance Lift NameFlavour where+  lift NameS = [|NameS|]+  lift (NameQ n) = [|NameQ n|]+  lift (NameU i) = let i' = I# i in [|NameU (fromInt i')|]+  lift (NameL i) = let i' = I# i in [|NameL (fromInt i')|]+  lift (NameG n p m) = [|NameG n p m|]++instance Lift Range where+  lift (FromR e) = [|FromR e|]+  lift (FromThenR e1 e2) = [|FromThenR e1 e2|]+  lift (FromToR e1 e2) = [|FromToR e1 e2|]+  lift (FromThenToR e1 e2 e3) = [|FromThenToR e1 e2 e3|]++instance Lift Stmt where+  lift (BindS p e) = [|BindS p e|]+  lift (LetS d) = [|LetS d|]+  lift (NoBindS e) = [|NoBindS e|]+  lift (ParS s) = [|ParS s|]++instance Lift Match where+  lift (Match p b d) = [|Match p b d|]++instance Lift Type where+  lift (ForallT n c t) = [|ForallT n c t|]+  lift (VarT n) = [|VarT n|]+  lift (ConT n) = [|ConT n|]+  lift (TupleT i) = [|TupleT i|]+  lift (ArrowT) = [|ArrowT|]+  lift (ListT) = [|ListT|]+  lift (AppT t1 t2) = [|AppT t1 t2|]++instance Lift Pat where+  lift (LitP l) = [|LitP l|]+  lift (VarP n) = [|VarP n|]+  lift (TupP p) = [|TupP p|]+  lift (ConP n p) = [|ConP n p|]+  lift (InfixP p1 n p2) = [|InfixP p1 n p2|]+  lift (TildeP p) = [|TildeP p|]+  lift (AsP n p) = [|AsP n p|]+  lift (WildP) = [|WildP|]+  lift (RecP n f) = [|RecP n f|]+  lift (ListP p) = [|ListP p|]+  lift (SigP p t) = [|SigP p t|]++instance Lift Lit where+  lift (CharL c) = [|CharL c|]+  lift (StringL s) = [|StringL s|]+  lift (IntegerL i) = [|IntegerL i|]+  lift (RationalL r) = [|RationalL r|]+  lift (IntPrimL i) = [|IntPrimL i|]+#if __GLASGOW_HASKELL__ >= 610+  lift (WordPrimL i) = [|WordPrimL i|]+#endif+  lift (FloatPrimL r) = [|FloatPrimL r|]+  lift (DoublePrimL r) = [|DoublePrimL r|]++instance Lift Dec where+  lift (FunD n c) = [|FunD n c|]+  lift (ValD p b d) = [|ValD p b d|]+  lift (DataD c n l1 l2 l3) = [|DataD c n l1 l2 l3|]+  lift (NewtypeD c n l1 c' l2) = [|NewtypeD c n l1 c' l2|]+  lift (TySynD n l t) = [|TySynD n l t|]+  lift (ClassD c n l1 l2 l3) = [|ClassD c n l1 l2 l3|]+  lift (InstanceD c t d) = [|InstanceD c t d|]+  lift (SigD n t) = [|SigD n t|]+  lift (ForeignD f) = [|ForeignD f|]++instance Lift NameSpace where+  lift (VarName) = [|VarName|]+  lift (DataName) = [|DataName|]+  lift (TcClsName) = [|TcClsName|]++instance Lift Body where+  lift (GuardedB l) = [|GuardedB l|]+  lift (NormalB e) = [|NormalB e|]++instance Lift Clause where+  lift (Clause p b d) = [|Clause p b d|]++instance Lift Con where+  lift (NormalC n m) = [|NormalC n m|]+  lift (RecC n s) = [|RecC n s|]+  lift (InfixC s1 n s2) = [|InfixC s1 n s2|]+  lift (ForallC n c c') = [|ForallC n c c'|]++instance Lift FunDep where+  lift (FunDep l1 l) = [|FunDep l1 l|]++instance Lift Foreign where+  lift (ImportF c f s n t) = [|ImportF c f s n t|]+  lift (ExportF c s n t) = [|ExportF c s n t|]++instance Lift Guard where+  lift (NormalG e) = [|NormalG e|]+  lift (PatG s) = [|PatG s|]++instance Lift Strict where+  lift (IsStrict) = [|IsStrict|]+  lift (NotStrict) = [|NotStrict|]++instance Lift Safety where+  lift (Unsafe) = [|Unsafe|]+  lift (safe) = [|safe|]++instance Lift Callconv where+  lift (CCall) = [|CCall|]+  lift (StdCall) = [|StdCall|]++instance Lift Rational where+  lift r = let n = numerator r+               d = denominator r+           in [|n % d|]++instance Lift Double where+  lift d = [| D# $(return (LitE (DoublePrimL (toRational d)))) |]    ++ 
+ test/Main.hs view
@@ -0,0 +1,140 @@+{-# LANGUAGE CPP, TemplateHaskell #-}++module Main where++#if __GLASGOW_HASKELL__ >= 610+import Control.Category+import Prelude hiding ((.), init, exp)+#else+import Prelude hiding (init, exp)+#endif++import Control.Arrow+import Control.CCA.CCNF+import Control.CCA.Types+import System.IO+import System.CPUTime+import Sample ++newtype SF a b = SF { runSF :: (a -> (b, SF a b)) }++#if __GLASGOW_HASKELL__ >= 610+instance Category SF where+  id = SF h where h x = (x, SF h)+  g . f = SF (h f g)+    where+      h f g x =+        let (y, f') = runSF f x+            (z, g') = runSF g y+        in (z, SF (h f' g'))+#endif++instance Arrow SF where+  arr f = g+    where g = SF (\x -> (f x, g))+#if __GLASGOW_HASKELL__ < 610+  f >>> g = SF (h f g)+    where+      h f g x = +        let (y, f') = runSF f x+            (z, g') = runSF g y+        in (z, SF (h f' g'))+#endif+  first f = SF (g f)+    where+      g f (x, z) = ((y, z), SF (g f'))+        where (y, f') = runSF f x+  second f = SF (g f)+    where+      g f (z, x) = ((z, y), SF (g f'))+        where (y, f') = runSF f x+  f &&& g = SF (h f g)+    where+      h f g x =+        let (y, f') = runSF f x+            (z, g') = runSF g x +        in ((y, z), SF (h f' g'))+  f *** g = SF (h f g)+    where+      h f g x =+        let (y, f') = runSF f (fst x)+            (z, g') = runSF g (snd x) +        in ((y, z), SF (h f' g'))++instance ArrowLoop SF where+  loop sf = SF (g sf)+    where+      g f x = (y, SF (g f'))+        where ((y, z), f') = runSF f (x, z)++instance ArrowInit SF where+  init i = SF (f i)+    where f i x = (i, SF (f x))+  loopD i g = SF (f i g)+    where+      f i g x = +        let ((y, i'), g') = runSF g (x, i)+        in (y, SF (f i' g'))+  loopB i g = SF (f i g)+    where+      f i g x = +        let ((y, (z, i')), g') = runSF g (x, (z, i))+        in (y, SF (f i' g'))++run :: SF a b -> [a] -> [b]+run (SF f) (x:xs) =+  let (y, f') = f x +  in y `seq` (y : run f' xs)++unfold :: SF () a -> [a]+unfold = flip run inp+  where inp = () : inp++nth :: Int -> SF () a -> a+nth n (SF f) = x `seq` if n == 0 then x else nth (n - 1) f'+  where (x, f') = f ()++nth' :: Int -> (b, ((), b) -> (a, b)) -> a+nth' n (i, f) = aux n i+  where+    aux n i = x `seq` if n == 0 then x else aux (n-1) i'+      where (x, i') = f ((), i)+ +timer i = do t0 <- getCPUTime+             i `seq` (do+               t1 <- getCPUTime+	       let d = t1 - t0+               putStrLn $ show d ++ "\t" ++ show i+               return d)++gnuplot f l = do+      h <- openFile f WriteMode+      mapM_ (\(x, y) -> hPutStrLn h (show x ++ "\t" ++ show y)) +            (zip [0, dt..] l)+      hClose h++plot3sec fn sf = gnuplot fn (take (sr * 3) (unfold sf))++testcase list = do+  ts <- mapM timer list+  let ts' = map (\x -> 1 / fromIntegral x) ts+  let x = minimum ts'+  let ns = map (/x) ts'+  sequence_ $ [ putStr (show (fromIntegral (floor (x * 100)) / 100) ++ "\t") | x <- ns ]+  putStrLn "\n"++main = do+  let n = 1000000+  putStrLn "Compare exp singal function"+  testcase $ [nth n exp, nth n expNorm, nth' n expOpt]+  putStrLn "Compare sine singal function"+  testcase $ [nth n sine2, nth n sineNorm, nth' n sineOpt]++expNorm = $(norm exp)+expOpt = $(normOpt exp)++sine2 = sine 2+sineNorm = $(norm $ sine 2)+sineOpt = $(normOpt $ sine 2)++
+ test/Makefile view
@@ -0,0 +1,13 @@+GHC = ghc+ARROWP = ccap+FLAGS = -fvia-C -fno-method-sharing -fexcess-precision -O2 -XTemplateHaskell ++Main: Main.hs Sample.hs+	$(GHC) $(FLAGS) --make Main.hs++%.hs: %.as+	$(ARROWP) $< > $@++clean: +	rm -f Main *.o *.hi Sample.hs+
+ test/Sample.as view
@@ -0,0 +1,42 @@+module Sample where++import Control.CCA+import Prelude hiding (init, exp)+import Language.Haskell.TH++sr = 44100 :: Int+dt = 1 / (fromIntegral sr)++exp :: ArrowInit a => a () Double+exp = proc () -> do+  rec let e = 1 + i+      i <- integral -< e+  returnA -< e++integral :: ArrowInit a => a Double Double+integral = proc x -> do+  rec let i' = i + x * dt+      i <- init 0 -< i'+  returnA -< i++sineA :: ArrowInit a => Double -> a () Double+sineA freq = proc _ -> do+              rec +               d2o <- init (sin omh) -< r+               d1o <- init 0 -< d2o+               let r = 2 * cos(omh) * d2o - d1o+              returnA -< r+  where +    omh = 2*pi/(fromIntegral sr)*freq++sine :: ArrowInit a => Double -> a () Double+sine freq = proc _ -> do+  rec x <- init i -< r+      y <- init 0 -< x +      let r = c * x - y+  returnA -< r+  where+    omh = 2 * pi / (fromIntegral sr) * freq+    i = sin omh+    c = 2 * cos omh+