language-python (empty) → 0.1.1
raw patch · 15 files changed
+8132/−0 lines, 15 filesdep +arraydep +basedep +bytestringsetup-changed
Dependencies added: array, base, bytestring, containers, pretty
Files
- LICENSE +27/−0
- Setup.lhs +3/−0
- dist/build/Language/Python/Version3/Parser/Lexer.hs +628/−0
- dist/build/Language/Python/Version3/Parser/Parser.hs +4330/−0
- language-python.cabal +36/−0
- src/Language/Python/Data/SrcLocation.hs +69/−0
- src/Language/Python/Version3/Lexer.hs +61/−0
- src/Language/Python/Version3/Parser.hs +68/−0
- src/Language/Python/Version3/Parser/Lexer.x +485/−0
- src/Language/Python/Version3/Parser/Parser.y +1238/−0
- src/Language/Python/Version3/Parser/ParserMonad.hs +211/−0
- src/Language/Python/Version3/Parser/ParserUtils.hs +136/−0
- src/Language/Python/Version3/Parser/Token.hs +136/−0
- src/Language/Python/Version3/Syntax/AST.hs +405/−0
- src/Language/Python/Version3/Syntax/Pretty.hs +299/−0
+ LICENSE view
@@ -0,0 +1,27 @@+Copyright (c) 2008-2009 Bernard James Pope ++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions+are met:+1. Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.+2. Redistributions in binary form must reproduce the above copyright+ notice, this list of conditions and the following disclaimer in the+ documentation and/or other materials provided with the distribution.+3. Neither the name of the author nor the names of his contributors+ may be used to endorse or promote products derived from this software+ without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.lhs view
@@ -0,0 +1,3 @@+#!/usr/bin/env runhaskell+> import Distribution.Simple+> main = defaultMain
+ dist/build/Language/Python/Version3/Parser/Lexer.hs view
@@ -0,0 +1,628 @@+{-# OPTIONS -fglasgow-exts -cpp #-}+{-# LINE 1 "src/Language/Python/Version3/Parser/Lexer.x" #-}++-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Version3.Parser.Lexer +-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- Implementation of a lexer for Python version 3 programs. Generated by+-- alex. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.Lexer + (initStartCodeStack, lexToken, endOfFileToken, lexCont) where++import Language.Python.Version3.Parser.Token hiding (True, False)+import qualified Language.Python.Version3.Parser.Token as Token+import Language.Python.Version3.Parser.ParserMonad hiding (location)+import Language.Python.Data.SrcLocation+import qualified Data.Map as Map+import Control.Monad (liftM)+import Data.List (foldl')+import Numeric (readHex, readOct)+import qualified Data.ByteString.Char8 as BS (pack)++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+import Data.Char (ord)+import Data.Array.Base (unsafeAt)+#else+import Array+import Char (ord)+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif+alex_base :: AlexAddr+alex_base = AlexA# "\xf8\xff\xff\xff\x6e\x00\x00\x00\x73\x00\x00\x00\x78\x00\x00\x00\xe3\xff\xff\xff\xfd\xff\xff\xff\xfe\xff\xff\xff\x7c\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x03\x00\x00\x00\x6d\x00\x00\x00\x77\x00\x00\x00\xb2\x00\x00\x00\xbe\x00\x00\x00\xdb\x00\x00\x00\xf9\x00\x00\x00\x16\x01\x00\x00\x34\x01\x00\x00\x7d\x01\x00\x00\x8c\x01\x00\x00\xde\xff\xff\xff\x00\x00\x00\x00\x92\x00\x00\x00\x03\x01\x00\x00\x96\x01\x00\x00\xad\x01\x00\x00\x59\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\xf5\xff\xff\xff\xa9\x00\x00\x00\xae\x00\x00\x00\x2a\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\xf4\x00\x00\x00\xfa\x00\x00\x00\xe4\x01\x00\x00\x75\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x5f\x02\x00\x00\xdf\x02\x00\x00\x3d\x03\x00\x00\xb8\x03\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x38\x04\x00\x00\xb8\x04\x00\x00\x16\x05\x00\x00\x91\x05\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\xf5\x00\x00\x00\x32\x01\x00\x00\x88\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x4d\x01\x00\x00\x75\x01\x00\x00\x8c\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x11\x06\x00\x00\x91\x06\x00\x00\x11\x07\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x91\x07\x00\x00\x11\x08\x00\x00\x91\x08\x00\x00\xb3\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\xa4\x00\x00\x00\xa5\x00\x00\x00\xb9\x00\x00\x00\xa6\x00\x00\x00\xc6\x00\x00\x00\xdf\x00\x00\x00\x35\x01\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xac\x00\x00\x00\xaf\x00\x00\x00\xf7\x00\x00\x00\xb1\x00\x00\x00\xfd\x00\x00\x00\x2e\x01\x00\x00\x4b\x01\x00\x00\x36\x01\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\xb6\x00\x00\x00\xb7\x00\x00\x00\x38\x01\x00\x00\xb8\x00\x00\x00\x11\x09\x00\x00\x91\x09\x00\x00\x11\x0a\x00\x00\x91\x0a\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\xd2\x00\x00\x00\xd3\x00\x00\x00\x49\x01\x00\x00\xd4\x00\x00\x00\x11\x0b\x00\x00\x91\x0b\x00\x00\x11\x0c\x00\x00\x91\x0c\x00\x00\x00\x00\x00\x00\x9c\x00\x00\x00\x9d\x00\x00\x00\xde\x00\x00\x00\x1b\x01\x00\x00\xf8\x00\x00\x00\x3f\x01\x00\x00\x4c\x01\x00\x00\x78\x01\x00\x00\x5f\x01\x00\x00\x00\x00\x00\x00\x04\x01\x00\x00\x1f\x01\x00\x00\x4f\x01\x00\x00\x76\x01\x00\x00\x51\x01\x00\x00\x7a\x01\x00\x00\x98\x01\x00\x00\xc6\x01\x00\x00\xae\x01\x00\x00\x00\x00\x00\x00\x52\x01\x00\x00\x53\x01\x00\x00\x56\x01\x00\x00\xc5\x01\x00\x00\x58\x01\x00\x00\x11\x0d\x00\x00\x91\x0d\x00\x00\x11\x0e\x00\x00\x91\x0e\x00\x00\x00\x00\x00\x00\x5a\x01\x00\x00\x5b\x01\x00\x00\x62\x01\x00\x00\xc7\x01\x00\x00\x64\x01\x00\x00\x11\x0f\x00\x00\x91\x0f\x00\x00\x11\x10\x00\x00\x91\x10\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xd0\x00\x00\x00\xe1\x10\x00\x00\x2c\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x01\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xdc\x00\x00\x00\x63\x01\x00\x00\x60\x01\x00\x00\xe2\x00\x00\x00\x4e\x01\x00\x00\x65\x01\x00\x00\xaf\x01\x00\x00\x67\x01\x00\x00\xb8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x6d\x01\x00\x00\x7b\x01\x00\x00\xc3\x01\x00\x00\x00\x00\x00\x00\xc4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA# "\x00\x00\x07\x00\xa0\x00\x07\x00\x07\x00\xa1\x00\x05\x00\xff\xff\xff\xff\x08\x00\xff\xff\xff\xff\x0a\x00\x08\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x07\x00\xc2\x00\x3a\x00\x05\x00\x56\x00\xb8\x00\xc6\x00\x1f\x00\xa8\x00\xa9\x00\xb5\x00\xb3\x00\xd5\x00\xaf\x00\x13\x00\xb6\x00\x12\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\xc8\x00\xd7\x00\xba\x00\xc0\x00\xbc\x00\x22\x00\xd6\x00\xa6\x00\x2e\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\x27\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xaa\x00\x09\x00\xab\x00\xc3\x00\xa6\x00\x20\x00\xa6\x00\x2e\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\x27\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xac\x00\xc4\x00\xad\x00\xb2\x00\x07\x00\xa4\x00\x07\x00\x07\x00\xa5\x00\x07\x00\xa2\x00\x07\x00\x07\x00\xa3\x00\x07\x00\x29\x00\x07\x00\x07\x00\x07\x00\x60\x00\x07\x00\x07\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x26\x00\x07\x00\x6a\x00\x2d\x00\x05\x00\x74\x00\x07\x00\x34\x00\x3d\x00\x05\x00\x3b\x00\x07\x00\x43\x00\x41\x00\x05\x00\x07\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x7e\x00\x14\x00\xff\xff\x47\x00\x88\x00\xff\xff\x16\x00\xff\xff\x92\x00\x9c\x00\xff\xff\x14\x00\x4d\x00\x78\x00\x79\x00\x50\x00\x16\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x09\x00\x51\x00\x50\x00\x53\x00\x5a\x00\x09\x00\x1e\x00\xa0\x00\x14\x00\x5b\x00\x09\x00\x1d\x00\x5a\x00\x16\x00\x5d\x00\xa2\x00\xa4\x00\x64\x00\x14\x00\x65\x00\x64\x00\x67\x00\x52\x00\x16\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0b\x00\x55\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x6e\x00\x6f\x00\x6e\x00\x71\x00\x16\x00\xc9\x00\xff\xff\xff\xff\x78\x00\xff\xff\xff\xff\x14\x00\xff\xff\x21\x00\x55\x00\xff\xff\x16\x00\x0b\x00\x21\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x58\x00\xb0\x00\x39\x00\x00\x00\xce\x00\x7b\x00\x24\x00\x16\x00\x55\x00\x5c\x00\xd4\x00\x14\x00\x23\x00\x58\x00\x14\x00\x5f\x00\x16\x00\x82\x00\x0b\x00\x16\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x58\x00\xff\xff\x7a\x00\x14\x00\xff\xff\x14\x00\x83\x00\x59\x00\x16\x00\x0b\x00\x16\x00\x11\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x28\x00\x3c\x00\x58\x00\x62\x00\x38\x00\x5f\x00\x28\x00\xff\xff\x63\x00\x62\x00\xff\xff\x14\x00\x54\x00\x5f\x00\x14\x00\x66\x00\x16\x00\x7d\x00\x0b\x00\x16\x00\x11\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x7d\x00\x3f\x00\x70\x00\x82\x00\x5e\x00\x85\x00\x8c\x00\x8d\x00\x1c\x00\x80\x00\x8c\x00\x14\x00\x8f\x00\x14\x00\x96\x00\x97\x00\x16\x00\xff\xff\x16\x00\x7d\x00\xff\xff\x18\x00\x96\x00\x81\x00\x99\x00\xca\x00\xae\x00\x00\x00\x62\x00\xcd\x00\x1a\x00\xb4\x00\x3c\x00\xb7\x00\x00\x00\x58\x00\x62\x00\x00\x00\x6c\x00\x00\x00\x1c\x00\x3e\x00\x84\x00\x14\x00\x7c\x00\x80\x00\x87\x00\xcc\x00\x16\x00\x00\x00\xcb\x00\x00\x00\xd2\x00\x18\x00\xd3\x00\x76\x00\xbf\x00\x62\x00\x80\x00\x42\x00\xc1\x00\xb1\x00\x1a\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x15\x00\xd1\x00\x15\x00\x87\x00\x80\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x87\x00\x42\x00\x8a\x00\x8b\x00\x80\x00\x00\x00\x8a\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x8e\x00\x86\x00\x98\x00\xc5\x00\xb9\x00\xbd\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x8a\x00\xbe\x00\xbb\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x25\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x94\x00\x8a\x00\x9e\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2b\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2a\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x35\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x35\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x30\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x32\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x36\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x31\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x36\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x37\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x45\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x48\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x44\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x48\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x49\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4b\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4e\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4a\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4e\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4f\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6d\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x68\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x77\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x72\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x91\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x91\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x95\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x90\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x91\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9b\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9b\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9f\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9a\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9b\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++alex_check :: AlexAddr+alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x23\x00\x0a\x00\x0a\x00\x0a\x00\x0d\x00\x0d\x00\x0d\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\x21\x00\x22\x00\x23\x00\x27\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x0d\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x0a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0d\x00\x0b\x00\x0c\x00\x09\x00\x27\x00\x0b\x00\x0c\x00\x30\x00\x31\x00\x30\x00\x31\x00\x0a\x00\x20\x00\x27\x00\x0a\x00\x23\x00\x27\x00\x20\x00\x0a\x00\x0d\x00\x23\x00\x0a\x00\x20\x00\x0d\x00\x0a\x00\x23\x00\x20\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x45\x00\x0a\x00\x0a\x00\x22\x00\x0d\x00\x4a\x00\x0a\x00\x22\x00\x22\x00\x0d\x00\x45\x00\x0a\x00\x22\x00\x22\x00\x27\x00\x4a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x5c\x00\x27\x00\x27\x00\x27\x00\x27\x00\x5c\x00\x27\x00\x0a\x00\x65\x00\x27\x00\x5c\x00\x27\x00\x27\x00\x6a\x00\x27\x00\x0a\x00\x0a\x00\x27\x00\x65\x00\x27\x00\x27\x00\x27\x00\x27\x00\x6a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2e\x00\x27\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x27\x00\x27\x00\x27\x00\x27\x00\x4a\x00\x3d\x00\x0a\x00\x0a\x00\x22\x00\x0d\x00\x0d\x00\x45\x00\x0a\x00\x5c\x00\x27\x00\x0d\x00\x4a\x00\x2e\x00\x5c\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x5c\x00\x2e\x00\x22\x00\xff\xff\x3d\x00\x22\x00\x27\x00\x6a\x00\x27\x00\x27\x00\x3d\x00\x45\x00\x27\x00\x5c\x00\x65\x00\x27\x00\x4a\x00\x22\x00\x2e\x00\x6a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x5c\x00\x0a\x00\x22\x00\x45\x00\x0d\x00\x65\x00\x22\x00\x0d\x00\x4a\x00\x2e\x00\x6a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x22\x00\x27\x00\x5c\x00\x0a\x00\x0d\x00\x5c\x00\x0d\x00\x45\x00\x27\x00\x27\x00\x65\x00\x27\x00\x4a\x00\x22\x00\x2e\x00\x6a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x22\x00\x27\x00\x22\x00\x27\x00\x22\x00\x22\x00\x22\x00\x42\x00\x5c\x00\x22\x00\x45\x00\x22\x00\x65\x00\x22\x00\x22\x00\x4a\x00\x0a\x00\x6a\x00\x22\x00\x0d\x00\x4f\x00\x22\x00\x0d\x00\x22\x00\x3d\x00\x3e\x00\xff\xff\x5c\x00\x3d\x00\x58\x00\x2a\x00\x5c\x00\x2f\x00\xff\xff\x5c\x00\x5c\x00\xff\xff\x5c\x00\xff\xff\x62\x00\x22\x00\x22\x00\x65\x00\x22\x00\x5c\x00\x22\x00\x3d\x00\x6a\x00\xff\xff\x3d\x00\xff\xff\x3d\x00\x6f\x00\x3d\x00\x5c\x00\x3d\x00\x5c\x00\x5c\x00\x5c\x00\x3d\x00\x2e\x00\x78\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2b\x00\x3d\x00\x2d\x00\x22\x00\x5c\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x5c\x00\x5c\x00\x0d\x00\x5c\x00\xff\xff\x5c\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x22\x00\x22\x00\x26\x00\x3c\x00\x3d\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x5c\x00\x3d\x00\x3e\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\x3d\x00\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x27\x00\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x5c\x00\x5c\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x7c\x00\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\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\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_deflt :: AlexAddr+alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\x00\x06\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\x20\x00\x20\x00\x20\x00\xff\xff\xff\xff\xff\xff\x26\x00\x26\x00\xff\xff\x26\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\x3b\x00\x3b\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x41\x00\x41\x00\x41\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\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\xff\xff\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\xff\xff\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\xff\xff\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\xff\xff\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\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"#++alex_accept = listArray (0::Int,215) [[],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_27))],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[],[],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_4))],[],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_40))],[],[],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_7))],[],[(AlexAcc (alex_action_8))],[],[(AlexAcc (alex_action_9))],[],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_10))],[],[],[],[],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_11))],[],[],[(AlexAcc (alex_action_32))],[],[],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_12))],[],[],[(AlexAcc (alex_action_32))],[],[],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_13))],[],[],[(AlexAcc (alex_action_32))],[],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[],[],[],[],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_15))],[],[],[],[],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_16))],[],[],[],[],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[],[],[],[],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_21))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_22))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_25))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_26))],[],[(AlexAccSkip)],[],[(AlexAccSkip)],[],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_41))],[],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_57))],[],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_69))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_79))]]+{-# LINE 193 "src/Language/Python/Version3/Parser/Lexer.x" #-}++-- Functions for building tokens ++type StartCode = Int+type Action = SrcLocation -> Int -> String -> P Token ++dedentation :: Action+dedentation loc _len _str = do+ let endCol = sloc_column loc + topIndent <- getIndent+ case compare endCol topIndent of+ EQ -> do popStartCode+ lexToken + LT -> do popIndent+ return dedentToken + GT -> failP loc ["indentation error"]++-- Beginning of. BOF = beginning of file, BOL = beginning of line+data BO = BOF | BOL++indentation :: BO -> Action +-- Check if we are at the EOF. If yes, we may need to generate a newline,+-- in case we came here from BOL (but not BOF).+indentation bo _loc _len [] = do+ popStartCode+ case bo of+ BOF -> lexToken+ BOL -> return newlineToken+indentation bo loc _len _str = do+ popStartCode+ parenDepth <- getParenStackDepth+ if parenDepth > 0+ then lexToken+ else do + topIndent <- getIndent+ let endCol = sloc_column loc + case compare endCol topIndent of+ EQ -> case bo of+ BOF -> lexToken+ BOL -> return newlineToken + LT -> do pushStartCode dedent+ return newlineToken + GT -> do pushIndent endCol + return indentToken + where+ -- the location of the newline is not known here + newlineToken = Newline NoLocation+ indentToken = Indent loc ++begin :: StartCode -> Action +begin code loc len inp = do+ pushStartCode code+ lexToken ++symbolToken :: (SrcLocation -> Token) -> Action +symbolToken mkToken location _ _ = return (mkToken location)++token_fail :: String -> Action +token_fail message location _ _ + = failP location [ "Lexical Error !", message]++token :: (SrcLocation -> a -> Token) -> (String -> a) -> Action +token mkToken read location len str + = return $ mkToken location (read $ take len str)++-- a keyword or an identifier (the syntax overlaps)+keywordOrIdent :: String -> SrcLocation -> P Token+keywordOrIdent str location+ = return $ case Map.lookup str keywords of+ Just symbol -> symbol location+ Nothing -> Identifier location str ++-- mapping from strings to keywords+keywords :: Map.Map String (SrcLocation -> Token) +keywords = Map.fromList keywordNames ++keywordNames :: [(String, SrcLocation -> Token)]+keywordNames =+ [ ("False", Token.False), ("class", Class), ("finally", Finally), ("is", Is), ("return", Return)+ , ("None", None), ("continue", Continue), ("for", For), ("lambda", Lambda), ("try", Try)+ , ("True", Token.True), ("def", Def), ("from", From), ("nonlocal", NonLocal), ("while", While)+ , ("and", And), ("del", Delete), ("global", Global), ("not", Not), ("with", With)+ , ("as", As), ("elif", Elif), ("if", If), ("or", Or), ("yield", Yield)+ , ("assert", Assert), ("else", Else), ("import", Import), ("pass", Pass)+ , ("break", Break), ("except", Except), ("in", In), ("raise", Raise)+ ]++-- The lexer starts off in the beginning of file state (bof)+initStartCodeStack :: [Int]+initStartCodeStack = [bof,0]++-- special tokens for the end of file and end of line+endOfFileToken :: Token+endOfFileToken = EOF+newlineToken = Newline NoLocation+dedentToken = Dedent NoLocation++-- Test if we are at the end of the line or file+atEOLorEOF :: a -> AlexInput -> Int -> AlexInput -> Bool+atEOLorEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) + = null inputAfterToken || nextChar == '\n' || nextChar == '\r'+ where+ nextChar = head inputAfterToken ++notEOF :: a -> AlexInput -> Int -> AlexInput -> Bool+notEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) + = not (null inputAfterToken)++readBinary :: String -> Integer+readBinary + = toBinary . drop 2 + where+ toBinary = foldl' acc 0+ acc b '0' = 2 * b+ acc b '1' = 2 * b + 1++{-+floatnumber ::= pointfloat | exponentfloat+pointfloat ::= [intpart] fraction | intpart "."+exponentfloat ::= (intpart | pointfloat) exponent+intpart ::= digit++fraction ::= "." digit++exponent ::= ("e" | "E") ["+" | "-"] digit++-}+readFloat :: String -> Double+readFloat str@('.':cs) = read ('0':readFloatRest str)+readFloat str = read (readFloatRest str)+readFloatRest :: String -> String+readFloatRest [] = []+readFloatRest ['.'] = ".0"+readFloatRest (c:cs) = c : readFloatRest cs++mkString :: Int -> Int -> (SrcLocation -> String -> Token) -> Action+mkString leftSkip rightSkip toToken loc len str = do+ let contentLen = len - (leftSkip + rightSkip)+ let contents = take contentLen $ drop leftSkip str+ -- return $ String loc $ processString contents + return $ toToken loc contents ++stringToken :: SrcLocation -> String -> Token+stringToken loc str = String loc $ unescapeString str++rawStringToken :: SrcLocation -> String -> Token+rawStringToken loc str = String loc $ unescapeRawString str++byteStringToken :: SrcLocation -> String -> Token+byteStringToken loc str = ByteString loc $ BS.pack $ unescapeString str++rawByteStringToken :: SrcLocation -> String -> Token+rawByteStringToken loc str = ByteString loc $ BS.pack $ unescapeRawString str++openParen :: (SrcLocation -> Token) -> Action+openParen mkToken loc _len _str = do+ let token = mkToken loc+ pushParen token + return token ++closeParen :: (SrcLocation -> Token) -> Action+closeParen mkToken loc _len _str = do+ let token = mkToken loc+ topParen <- getParen+ case topParen of+ Nothing -> failP loc err1 + Just open -> if matchParen open token + then popParen >> return token+ else failP loc err2+ where+ -- XXX fix these error messages+ err1 = ["Lexical error ! unmatched closing paren"]+ err2 = ["Lexical error ! unmatched closing paren"]++matchParen :: Token -> Token -> Bool+matchParen (LeftRoundBracket {}) (RightRoundBracket {}) = True+matchParen (LeftBrace {}) (RightBrace {}) = True+matchParen (LeftSquareBracket {}) (RightSquareBracket {}) = True+matchParen _ _ = False++unescapeString :: String -> String+unescapeString ('\\':'\\':cs) = '\\' : unescapeString cs -- Backslash (\)+unescapeString ('\\':'\'':cs) = '\'' : unescapeString cs -- Single quote (')+unescapeString ('\\':'"':cs) = '"' : unescapeString cs -- Double quote (")+unescapeString ('\\':'a':cs) = '\a' : unescapeString cs -- ASCII Bell (BEL)+unescapeString ('\\':'b':cs) = '\b' : unescapeString cs -- ASCII Backspace (BS)+unescapeString ('\\':'f':cs) = '\f' : unescapeString cs -- ASCII Formfeed (FF)+unescapeString ('\\':'n':cs) = '\n' : unescapeString cs -- ASCII Linefeed (LF)+unescapeString ('\\':'r':cs) = '\r' : unescapeString cs -- ASCII Carriage Return (CR)+unescapeString ('\\':'t':cs) = '\t' : unescapeString cs -- ASCII Horizontal Tab (TAB)+unescapeString ('\\':'v':cs) = '\v' : unescapeString cs -- ASCII Vertical Tab (VT)+unescapeString ('\\':'\n':cs) = unescapeString cs -- line continuation+unescapeString ('\\':rest@(o:_))+ | o `elem` octalDigits = unescapeNumeric 3 octalDigits (fst . head . readOct) rest +unescapeString ('\\':'x':rest@(h:_))+ | h `elem` hexDigits = unescapeNumeric 2 hexDigits (fst . head . readHex) rest +unescapeString (c:cs) = c : unescapeString cs +unescapeString [] = []++unescapeRawString :: String -> String+unescapeRawString ('\\':'\'':cs) = '\'' : unescapeRawString cs -- Single quote (')+unescapeRawString ('\\':'"':cs) = '"' : unescapeRawString cs -- Double quote (")+unescapeRawString ('\\':'\n':cs) = unescapeRawString cs -- line continuation+unescapeRawString (c:cs) = c : unescapeRawString cs+unescapeRawString [] = []++{- + This is a bit complicated because Python allows between 1 and 3 octal+ characters after the \, and 1 and 2 hex characters after a \x.+-}+unescapeNumeric :: Int -> String -> (String -> Int) -> String -> String+unescapeNumeric n numericDigits readNumeric str+ = loop n [] str + where+ loop _ acc [] = [numericToChar acc]+ loop 0 acc rest+ = numericToChar acc : unescapeString rest+ loop n acc (c:cs)+ | c `elem` numericDigits = loop (n-1) (c:acc) cs+ | otherwise = numericToChar acc : unescapeString (c:cs)+ numericToChar :: String -> Char+ numericToChar = toEnum . readNumeric . reverse++octalDigits, hexDigits :: String+octalDigits = "01234567"+hexDigits = "0123456789abcdef"+ ++-- -----------------------------------------------------------------------------+-- Functionality required by Alex ++type AlexInput = (SrcLocation, String)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar _ = error "alexInputPrevChar not used"++alexGetChar :: AlexInput -> Maybe (Char, AlexInput)+alexGetChar (loc, input) + | null input = Nothing+ | otherwise = Just (nextChar, (nextLoc, rest))+ where+ nextChar = head input+ rest = tail input + nextLoc = moveChar nextChar loc++moveChar :: Char -> SrcLocation -> SrcLocation +moveChar '\n' = incLine 1 +moveChar '\t' = incTab +moveChar '\r' = id +moveChar _ = incColumn 1 ++lexicalError :: P a+lexicalError = do+ location <- getLocation+ c <- liftM head getInput+ failP location + ["Lexical error !",+ "The character " ++ show c ++ " does not fit here."]++parseError :: P a+parseError = do+ token <- getLastToken+ failP (location token)+ ["Syntax error !",+ "The symbol `" ++ show token ++ "' does not fit here."]++lexToken :: P Token+lexToken = do+ location <- getLocation+ input <- getInput+ startCode <- getStartCode+ case alexScan (location, input) startCode of+ AlexEOF -> do+ depth <- getIndentStackDepth+ if depth <= 1 + then return endOfFileToken+ else do + popIndent+ return dedentToken+ AlexError _ -> lexicalError+ AlexSkip (nextLocation, rest) len -> do+ setLocation nextLocation + setInput rest + lexToken+ AlexToken (nextLocation, rest) len action -> do+ setLocation nextLocation + setInput rest + token <- action location len input + setLastToken token+ return token++lexCont :: (Token -> P a) -> P a+lexCont cont = do+ tok <- lexToken+ cont tok+++bof,bol,dedent :: Int+bof = 1+bol = 2+dedent = 3+alex_action_3 = token Token.Float readFloat +alex_action_4 = token Token.Integer read +alex_action_5 = token Token.Imaginary (readFloat.init) +alex_action_6 = token Token.Integer read +alex_action_7 = token Token.Integer read +alex_action_8 = token Token.Integer read +alex_action_9 = token Token.Integer readBinary +alex_action_10 = mkString 1 1 stringToken +alex_action_11 = mkString 2 1 rawStringToken +alex_action_12 = mkString 2 1 byteStringToken +alex_action_13 = mkString 3 1 rawByteStringToken +alex_action_14 = mkString 1 1 stringToken +alex_action_15 = mkString 2 1 rawStringToken +alex_action_16 = mkString 2 1 byteStringToken +alex_action_17 = mkString 3 1 rawByteStringToken +alex_action_18 = mkString 3 3 stringToken +alex_action_19 = mkString 4 3 rawStringToken +alex_action_20 = mkString 4 3 byteStringToken +alex_action_21 = mkString 5 3 rawByteStringToken +alex_action_22 = mkString 3 3 stringToken +alex_action_23 = mkString 4 3 rawStringToken +alex_action_24 = mkString 4 3 byteStringToken +alex_action_25 = mkString 5 3 rawByteStringToken +alex_action_26 = begin bol +alex_action_27 = dedentation +alex_action_29 = indentation BOL +alex_action_31 = indentation BOF +alex_action_32 = \loc len str -> keywordOrIdent (take len str) loc +alex_action_33 = openParen Token.LeftRoundBracket +alex_action_34 = closeParen Token.RightRoundBracket +alex_action_35 = openParen Token.LeftSquareBracket +alex_action_36 = closeParen Token.RightSquareBracket +alex_action_37 = openParen Token.LeftBrace +alex_action_38 = closeParen Token.RightBrace +alex_action_39 = symbolToken Token.RightArrow +alex_action_40 = symbolToken Token.Dot +alex_action_41 = symbolToken Token.Ellipsis +alex_action_42 = symbolToken Token.Tilde +alex_action_43 = symbolToken Token.Plus +alex_action_44 = symbolToken Token.Minus +alex_action_45 = symbolToken Token.Exponent +alex_action_46 = symbolToken Token.Mult +alex_action_47 = symbolToken Token.Div +alex_action_48 = symbolToken Token.FloorDiv +alex_action_49 = symbolToken Token.Modulo +alex_action_50 = symbolToken Token.ShiftLeft +alex_action_51 = symbolToken Token.ShiftRight +alex_action_52 = symbolToken Token.LessThan +alex_action_53 = symbolToken Token.LessThanEquals +alex_action_54 = symbolToken Token.GreaterThan +alex_action_55 = symbolToken Token.GreaterThanEquals +alex_action_56 = symbolToken Token.Equality +alex_action_57 = symbolToken Token.NotEquals +alex_action_58 = symbolToken Token.Xor +alex_action_59 = symbolToken Token.BinaryOr +alex_action_60 = symbolToken Token.And +alex_action_61 = symbolToken Token.BinaryAnd +alex_action_62 = symbolToken Token.Or +alex_action_63 = symbolToken Token.Colon +alex_action_64 = symbolToken Token.Assign +alex_action_65 = symbolToken Token.PlusAssign +alex_action_66 = symbolToken Token.MinusAssign +alex_action_67 = symbolToken Token.MultAssign +alex_action_68 = symbolToken Token.DivAssign +alex_action_69 = symbolToken Token.ModAssign +alex_action_70 = symbolToken Token.PowAssign +alex_action_71 = symbolToken Token.BinAndAssign +alex_action_72 = symbolToken Token.BinOrAssign +alex_action_73 = symbolToken Token.BinXorAssign +alex_action_74 = symbolToken Token.LeftShiftAssign +alex_action_75 = symbolToken Token.RightShiftAssign +alex_action_76 = symbolToken Token.FloorDivAssign +alex_action_77 = symbolToken Token.Comma +alex_action_78 = symbolToken Token.At +alex_action_79 = symbolToken Token.SemiColon +{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- -----------------------------------------------------------------------------+-- ALEX TEMPLATE+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- INTERNALS and main scanner engine++{-# LINE 35 "templates/GenericTemplate.hs" #-}++{-# LINE 45 "templates/GenericTemplate.hs" #-}+++data AlexAddr = AlexA# Addr#++#if __GLASGOW_HASKELL__ < 503+uncheckedShiftL# = shiftL#+#endif++{-# INLINE alexIndexInt16OffAddr #-}+alexIndexInt16OffAddr (AlexA# arr) off =+#ifdef WORDS_BIGENDIAN+ narrow16Int# i+ where+ i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+ high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+ low = int2Word# (ord# (indexCharOffAddr# arr off'))+ off' = off *# 2#+#else+ indexInt16OffAddr# arr off+#endif++++++{-# INLINE alexIndexInt32OffAddr #-}+alexIndexInt32OffAddr (AlexA# arr) off = +#ifdef WORDS_BIGENDIAN+ narrow32Int# i+ where+ i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`+ (b2 `uncheckedShiftL#` 16#) `or#`+ (b1 `uncheckedShiftL#` 8#) `or#` b0)+ b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))+ b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))+ b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+ b0 = int2Word# (ord# (indexCharOffAddr# arr off'))+ off' = off *# 4#+#else+ indexInt32OffAddr# arr off+#endif++++++#if __GLASGOW_HASKELL__ < 503+quickIndex arr i = arr ! i+#else+-- GHC >= 503, unsafeAt is available from Data.Array.Base.+quickIndex = unsafeAt+#endif+++++-- -----------------------------------------------------------------------------+-- Main lexing routines++data AlexReturn a+ = AlexEOF+ | AlexError !AlexInput+ | AlexSkip !AlexInput !Int+ | AlexToken !AlexInput !Int a++-- alexScan :: AlexInput -> StartCode -> AlexReturn a+alexScan input (I# (sc))+ = alexScanUser undefined input (I# (sc))++alexScanUser user input (I# (sc))+ = case alex_scan_tkn user input 0# input sc AlexNone of+ (AlexNone, input') ->+ case alexGetChar input of+ Nothing -> ++++ AlexEOF+ Just _ ->++++ AlexError input'++ (AlexLastSkip input len, _) ->++++ AlexSkip input len++ (AlexLastAcc k input len, _) ->++++ AlexToken input len k+++-- Push the input through the DFA, remembering the most recent accepting+-- state it encountered.++alex_scan_tkn user orig_input len input s last_acc =+ input `seq` -- strict in the input+ let + new_acc = check_accs (alex_accept `quickIndex` (I# (s)))+ in+ new_acc `seq`+ case alexGetChar input of+ Nothing -> (new_acc, input)+ Just (c, new_input) -> ++++ let+ base = alexIndexInt32OffAddr alex_base s+ (I# (ord_c)) = ord c+ offset = (base +# ord_c)+ check = alexIndexInt16OffAddr alex_check offset+ + new_s = if (offset >=# 0#) && (check ==# ord_c)+ then alexIndexInt16OffAddr alex_table offset+ else alexIndexInt16OffAddr alex_deflt s+ in+ case new_s of + -1# -> (new_acc, input)+ -- on an error, we want to keep the input *before* the+ -- character that failed, not after.+ _ -> alex_scan_tkn user orig_input (len +# 1#) + new_input new_s new_acc++ where+ check_accs [] = last_acc+ check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))+ check_accs (AlexAccSkip : _) = AlexLastSkip input (I# (len))+ check_accs (AlexAccPred a pred : rest)+ | pred user orig_input (I# (len)) input+ = AlexLastAcc a input (I# (len))+ check_accs (AlexAccSkipPred pred : rest)+ | pred user orig_input (I# (len)) input+ = AlexLastSkip input (I# (len))+ check_accs (_ : rest) = check_accs rest++data AlexLastAcc a+ = AlexNone+ | AlexLastAcc a !AlexInput !Int+ | AlexLastSkip !AlexInput !Int++data AlexAcc a user+ = AlexAcc a+ | AlexAccSkip+ | AlexAccPred a (AlexAccPred user)+ | AlexAccSkipPred (AlexAccPred user)++type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool++-- -----------------------------------------------------------------------------+-- Predicates on a rule++alexAndPred p1 p2 user in1 len in2+ = p1 user in1 len in2 && p2 user in1 len in2++--alexPrevCharIsPred :: Char -> AlexAccPred _ +alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input++--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ +alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input++--alexRightContext :: Int -> AlexAccPred _+alexRightContext (I# (sc)) user _ _ input = + case alex_scan_tkn user input 0# input sc AlexNone of+ (AlexNone, _) -> False+ _ -> True+ -- TODO: there's no need to find the longest+ -- match when checking the right context, just+ -- the first match will do.++-- used by wrappers+iUnbox (I# (i)) = i
+ dist/build/Language/Python/Version3/Parser/Parser.hs view
@@ -0,0 +1,4330 @@+{-# OPTIONS -fglasgow-exts -cpp #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Version3.Parser.Parser +-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- Implementation of the Python version 3 parser. Generated by happy. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.Parser (parseFileInput, parseSingleInput, parseEval) where++import Data.Char (isSpace, isAlpha, isDigit)+import Language.Python.Version3.Parser.Lexer+import Language.Python.Version3.Parser.Token hiding (True, False)+import qualified Language.Python.Version3.Parser.Token as Token+import Language.Python.Version3.Syntax.AST as AST+import Language.Python.Version3.Parser.ParserUtils+import Language.Python.Version3.Parser.ParserMonad+import Language.Python.Data.SrcLocation+import Data.List (foldl')+import qualified Data.ByteString.Char8 as BS (ByteString)+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+#else+import Array+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif++-- parser produced by Happy Version 1.17++newtype HappyAbsSyn = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = GHC.Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn6 :: ([Statement]) -> (HappyAbsSyn )+happyIn6 x = unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn ) -> ([Statement])+happyOut6 x = unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: (Module) -> (HappyAbsSyn )+happyIn7 x = unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn ) -> (Module)+happyOut7 x = unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: ([Statement]) -> (HappyAbsSyn )+happyIn8 x = unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn ) -> ([Statement])+happyOut8 x = unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: ([[Statement]]) -> (HappyAbsSyn )+happyIn9 x = unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn ) -> ([[Statement]])+happyOut9 x = unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: ([Statement]) -> (HappyAbsSyn )+happyIn10 x = unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn ) -> ([Statement])+happyOut10 x = unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: (Expr) -> (HappyAbsSyn )+happyIn11 x = unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn ) -> (Expr)+happyOut11 x = unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: (()) -> (HappyAbsSyn )+happyIn12 x = unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn ) -> (())+happyOut12 x = unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: (Decorator) -> (HappyAbsSyn )+happyIn13 x = unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn ) -> (Decorator)+happyOut13 x = unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: ([Decorator]) -> (HappyAbsSyn )+happyIn14 x = unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn ) -> ([Decorator])+happyOut14 x = unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: ([Decorator]) -> (HappyAbsSyn )+happyIn15 x = unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn ) -> ([Decorator])+happyOut15 x = unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: (Statement) -> (HappyAbsSyn )+happyIn16 x = unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn ) -> (Statement)+happyOut16 x = unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: (Statement) -> (HappyAbsSyn )+happyIn17 x = unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn ) -> (Statement)+happyOut17 x = unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (Statement) -> (HappyAbsSyn )+happyIn18 x = unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn ) -> (Statement)+happyOut18 x = unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn19 x = unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut19 x = unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: ([Parameter]) -> (HappyAbsSyn )+happyIn20 x = unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn ) -> ([Parameter])+happyOut20 x = unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: ([Parameter]) -> (HappyAbsSyn )+happyIn21 x = unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn ) -> ([Parameter])+happyOut21 x = unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: ([Parameter]) -> (HappyAbsSyn )+happyIn22 x = unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn ) -> ([Parameter])+happyOut22 x = unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: ([Parameter]) -> (HappyAbsSyn )+happyIn23 x = unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn ) -> ([Parameter])+happyOut23 x = unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: ((Ident, Maybe Expr)) -> (HappyAbsSyn )+happyIn24 x = unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn ) -> ((Ident, Maybe Expr))+happyOut24 x = unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn25 x = unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut25 x = unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn26 x = unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut26 x = unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: (Parameter) -> (HappyAbsSyn )+happyIn27 x = unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn ) -> (Parameter)+happyOut27 x = unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyIn28 :: (Parameter) -> (HappyAbsSyn )+happyIn28 x = unsafeCoerce# x+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn ) -> (Parameter)+happyOut28 x = unsafeCoerce# x+{-# INLINE happyOut28 #-}+happyIn29 :: (Maybe (Ident, Maybe Expr)) -> (HappyAbsSyn )+happyIn29 x = unsafeCoerce# x+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn ) -> (Maybe (Ident, Maybe Expr))+happyOut29 x = unsafeCoerce# x+{-# INLINE happyOut29 #-}+happyIn30 :: (Parameter) -> (HappyAbsSyn )+happyIn30 x = unsafeCoerce# x+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn ) -> (Parameter)+happyOut30 x = unsafeCoerce# x+{-# INLINE happyOut30 #-}+happyIn31 :: ([Parameter]) -> (HappyAbsSyn )+happyIn31 x = unsafeCoerce# x+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn ) -> ([Parameter])+happyOut31 x = unsafeCoerce# x+{-# INLINE happyOut31 #-}+happyIn32 :: ([Parameter]) -> (HappyAbsSyn )+happyIn32 x = unsafeCoerce# x+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn ) -> ([Parameter])+happyOut32 x = unsafeCoerce# x+{-# INLINE happyOut32 #-}+happyIn33 :: ([Parameter]) -> (HappyAbsSyn )+happyIn33 x = unsafeCoerce# x+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn ) -> ([Parameter])+happyOut33 x = unsafeCoerce# x+{-# INLINE happyOut33 #-}+happyIn34 :: (Parameter) -> (HappyAbsSyn )+happyIn34 x = unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn ) -> (Parameter)+happyOut34 x = unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: (Parameter) -> (HappyAbsSyn )+happyIn35 x = unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn ) -> (Parameter)+happyOut35 x = unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: (Maybe (Ident, Maybe Expr)) -> (HappyAbsSyn )+happyIn36 x = unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn ) -> (Maybe (Ident, Maybe Expr))+happyOut36 x = unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: (Parameter) -> (HappyAbsSyn )+happyIn37 x = unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn ) -> (Parameter)+happyOut37 x = unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: (Ident) -> (HappyAbsSyn )+happyIn38 x = unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn ) -> (Ident)+happyOut38 x = unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: (Ident) -> (HappyAbsSyn )+happyIn39 x = unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn ) -> (Ident)+happyOut39 x = unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: ([Statement]) -> (HappyAbsSyn )+happyIn40 x = unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn ) -> ([Statement])+happyOut40 x = unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: ([Statement]) -> (HappyAbsSyn )+happyIn41 x = unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn ) -> ([Statement])+happyOut41 x = unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: (()) -> (HappyAbsSyn )+happyIn42 x = unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn ) -> (())+happyOut42 x = unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: ([Statement]) -> (HappyAbsSyn )+happyIn43 x = unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn ) -> ([Statement])+happyOut43 x = unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: (Statement) -> (HappyAbsSyn )+happyIn44 x = unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn ) -> (Statement)+happyOut44 x = unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: (Statement) -> (HappyAbsSyn )+happyIn45 x = unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn ) -> (Statement)+happyOut45 x = unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: (Either [Expr] (AssignOp, Expr)) -> (HappyAbsSyn )+happyIn46 x = unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn ) -> (Either [Expr] (AssignOp, Expr))+happyOut46 x = unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: ([Expr]) -> (HappyAbsSyn )+happyIn47 x = unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn ) -> ([Expr])+happyOut47 x = unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: ([Expr]) -> (HappyAbsSyn )+happyIn48 x = unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn ) -> ([Expr])+happyOut48 x = unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: (Expr) -> (HappyAbsSyn )+happyIn49 x = unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn ) -> (Expr)+happyOut49 x = unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: ((AssignOp, Expr)) -> (HappyAbsSyn )+happyIn50 x = unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn ) -> ((AssignOp, Expr))+happyOut50 x = unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: (AssignOp) -> (HappyAbsSyn )+happyIn51 x = unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn ) -> (AssignOp)+happyOut51 x = unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: (Statement) -> (HappyAbsSyn )+happyIn52 x = unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn ) -> (Statement)+happyOut52 x = unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: (Statement) -> (HappyAbsSyn )+happyIn53 x = unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn ) -> (Statement)+happyOut53 x = unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: (Statement) -> (HappyAbsSyn )+happyIn54 x = unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn ) -> (Statement)+happyOut54 x = unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: (Statement) -> (HappyAbsSyn )+happyIn55 x = unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn ) -> (Statement)+happyOut55 x = unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: (Statement) -> (HappyAbsSyn )+happyIn56 x = unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn ) -> (Statement)+happyOut56 x = unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: (Statement) -> (HappyAbsSyn )+happyIn57 x = unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn ) -> (Statement)+happyOut57 x = unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: (Statement) -> (HappyAbsSyn )+happyIn58 x = unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn ) -> (Statement)+happyOut58 x = unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: (Statement) -> (HappyAbsSyn )+happyIn59 x = unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn ) -> (Statement)+happyOut59 x = unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: (Maybe (Expr, Maybe Expr)) -> (HappyAbsSyn )+happyIn60 x = unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn ) -> (Maybe (Expr, Maybe Expr))+happyOut60 x = unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn61 x = unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut61 x = unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: (Statement) -> (HappyAbsSyn )+happyIn62 x = unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn ) -> (Statement)+happyOut62 x = unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: (Statement) -> (HappyAbsSyn )+happyIn63 x = unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn ) -> (Statement)+happyOut63 x = unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: (FromItems) -> (HappyAbsSyn )+happyIn64 x = unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn ) -> (FromItems)+happyOut64 x = unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: (ImportModule) -> (HappyAbsSyn )+happyIn65 x = unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn ) -> (ImportModule)+happyOut65 x = unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: (FromItem) -> (HappyAbsSyn )+happyIn66 x = unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn ) -> (FromItem)+happyOut66 x = unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyIn67 :: (FromItems) -> (HappyAbsSyn )+happyIn67 x = unsafeCoerce# x+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn ) -> (FromItems)+happyOut67 x = unsafeCoerce# x+{-# INLINE happyOut67 #-}+happyIn68 :: ([FromItem]) -> (HappyAbsSyn )+happyIn68 x = unsafeCoerce# x+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn ) -> ([FromItem])+happyOut68 x = unsafeCoerce# x+{-# INLINE happyOut68 #-}+happyIn69 :: (Statement) -> (HappyAbsSyn )+happyIn69 x = unsafeCoerce# x+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn ) -> (Statement)+happyOut69 x = unsafeCoerce# x+{-# INLINE happyOut69 #-}+happyIn70 :: ([ImportItem]) -> (HappyAbsSyn )+happyIn70 x = unsafeCoerce# x+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn ) -> ([ImportItem])+happyOut70 x = unsafeCoerce# x+{-# INLINE happyOut70 #-}+happyIn71 :: ([ImportItem]) -> (HappyAbsSyn )+happyIn71 x = unsafeCoerce# x+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn ) -> ([ImportItem])+happyOut71 x = unsafeCoerce# x+{-# INLINE happyOut71 #-}+happyIn72 :: (ImportItem) -> (HappyAbsSyn )+happyIn72 x = unsafeCoerce# x+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn ) -> (ImportItem)+happyOut72 x = unsafeCoerce# x+{-# INLINE happyOut72 #-}+happyIn73 :: (DottedName) -> (HappyAbsSyn )+happyIn73 x = unsafeCoerce# x+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn ) -> (DottedName)+happyOut73 x = unsafeCoerce# x+{-# INLINE happyOut73 #-}+happyIn74 :: (DottedName) -> (HappyAbsSyn )+happyIn74 x = unsafeCoerce# x+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn ) -> (DottedName)+happyOut74 x = unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyIn75 :: (Statement) -> (HappyAbsSyn )+happyIn75 x = unsafeCoerce# x+{-# INLINE happyIn75 #-}+happyOut75 :: (HappyAbsSyn ) -> (Statement)+happyOut75 x = unsafeCoerce# x+{-# INLINE happyOut75 #-}+happyIn76 :: ([Ident]) -> (HappyAbsSyn )+happyIn76 x = unsafeCoerce# x+{-# INLINE happyIn76 #-}+happyOut76 :: (HappyAbsSyn ) -> ([Ident])+happyOut76 x = unsafeCoerce# x+{-# INLINE happyOut76 #-}+happyIn77 :: ([Ident]) -> (HappyAbsSyn )+happyIn77 x = unsafeCoerce# x+{-# INLINE happyIn77 #-}+happyOut77 :: (HappyAbsSyn ) -> ([Ident])+happyOut77 x = unsafeCoerce# x+{-# INLINE happyOut77 #-}+happyIn78 :: (Statement) -> (HappyAbsSyn )+happyIn78 x = unsafeCoerce# x+{-# INLINE happyIn78 #-}+happyOut78 :: (HappyAbsSyn ) -> (Statement)+happyOut78 x = unsafeCoerce# x+{-# INLINE happyOut78 #-}+happyIn79 :: (Statement) -> (HappyAbsSyn )+happyIn79 x = unsafeCoerce# x+{-# INLINE happyIn79 #-}+happyOut79 :: (HappyAbsSyn ) -> (Statement)+happyOut79 x = unsafeCoerce# x+{-# INLINE happyOut79 #-}+happyIn80 :: (Statement) -> (HappyAbsSyn )+happyIn80 x = unsafeCoerce# x+{-# INLINE happyIn80 #-}+happyOut80 :: (HappyAbsSyn ) -> (Statement)+happyOut80 x = unsafeCoerce# x+{-# INLINE happyOut80 #-}+happyIn81 :: (Statement) -> (HappyAbsSyn )+happyIn81 x = unsafeCoerce# x+{-# INLINE happyIn81 #-}+happyOut81 :: (HappyAbsSyn ) -> (Statement)+happyOut81 x = unsafeCoerce# x+{-# INLINE happyOut81 #-}+happyIn82 :: ([(Expr,[Statement])]) -> (HappyAbsSyn )+happyIn82 x = unsafeCoerce# x+{-# INLINE happyIn82 #-}+happyOut82 :: (HappyAbsSyn ) -> ([(Expr,[Statement])])+happyOut82 x = unsafeCoerce# x+{-# INLINE happyOut82 #-}+happyIn83 :: ((Expr, [Statement])) -> (HappyAbsSyn )+happyIn83 x = unsafeCoerce# x+{-# INLINE happyIn83 #-}+happyOut83 :: (HappyAbsSyn ) -> ((Expr, [Statement]))+happyOut83 x = unsafeCoerce# x+{-# INLINE happyOut83 #-}+happyIn84 :: ([(Expr, [Statement])]) -> (HappyAbsSyn )+happyIn84 x = unsafeCoerce# x+{-# INLINE happyIn84 #-}+happyOut84 :: (HappyAbsSyn ) -> ([(Expr, [Statement])])+happyOut84 x = unsafeCoerce# x+{-# INLINE happyOut84 #-}+happyIn85 :: ([(Expr, [Statement])]) -> (HappyAbsSyn )+happyIn85 x = unsafeCoerce# x+{-# INLINE happyIn85 #-}+happyOut85 :: (HappyAbsSyn ) -> ([(Expr, [Statement])])+happyOut85 x = unsafeCoerce# x+{-# INLINE happyOut85 #-}+happyIn86 :: ([Statement]) -> (HappyAbsSyn )+happyIn86 x = unsafeCoerce# x+{-# INLINE happyIn86 #-}+happyOut86 :: (HappyAbsSyn ) -> ([Statement])+happyOut86 x = unsafeCoerce# x+{-# INLINE happyOut86 #-}+happyIn87 :: (Statement) -> (HappyAbsSyn )+happyIn87 x = unsafeCoerce# x+{-# INLINE happyIn87 #-}+happyOut87 :: (HappyAbsSyn ) -> (Statement)+happyOut87 x = unsafeCoerce# x+{-# INLINE happyOut87 #-}+happyIn88 :: (Statement) -> (HappyAbsSyn )+happyIn88 x = unsafeCoerce# x+{-# INLINE happyIn88 #-}+happyOut88 :: (HappyAbsSyn ) -> (Statement)+happyOut88 x = unsafeCoerce# x+{-# INLINE happyOut88 #-}+happyIn89 :: (Statement) -> (HappyAbsSyn )+happyIn89 x = unsafeCoerce# x+{-# INLINE happyIn89 #-}+happyOut89 :: (HappyAbsSyn ) -> (Statement)+happyOut89 x = unsafeCoerce# x+{-# INLINE happyOut89 #-}+happyIn90 :: (([Handler], [Statement], [Statement])) -> (HappyAbsSyn )+happyIn90 x = unsafeCoerce# x+{-# INLINE happyIn90 #-}+happyOut90 :: (HappyAbsSyn ) -> (([Handler], [Statement], [Statement]))+happyOut90 x = unsafeCoerce# x+{-# INLINE happyOut90 #-}+happyIn91 :: ([Statement]) -> (HappyAbsSyn )+happyIn91 x = unsafeCoerce# x+{-# INLINE happyIn91 #-}+happyOut91 :: (HappyAbsSyn ) -> ([Statement])+happyOut91 x = unsafeCoerce# x+{-# INLINE happyOut91 #-}+happyIn92 :: ([Handler]) -> (HappyAbsSyn )+happyIn92 x = unsafeCoerce# x+{-# INLINE happyIn92 #-}+happyOut92 :: (HappyAbsSyn ) -> ([Handler])+happyOut92 x = unsafeCoerce# x+{-# INLINE happyOut92 #-}+happyIn93 :: ([Handler]) -> (HappyAbsSyn )+happyIn93 x = unsafeCoerce# x+{-# INLINE happyIn93 #-}+happyOut93 :: (HappyAbsSyn ) -> ([Handler])+happyOut93 x = unsafeCoerce# x+{-# INLINE happyOut93 #-}+happyIn94 :: (Handler) -> (HappyAbsSyn )+happyIn94 x = unsafeCoerce# x+{-# INLINE happyIn94 #-}+happyOut94 :: (HappyAbsSyn ) -> (Handler)+happyOut94 x = unsafeCoerce# x+{-# INLINE happyOut94 #-}+happyIn95 :: (Statement) -> (HappyAbsSyn )+happyIn95 x = unsafeCoerce# x+{-# INLINE happyIn95 #-}+happyOut95 :: (HappyAbsSyn ) -> (Statement)+happyOut95 x = unsafeCoerce# x+{-# INLINE happyOut95 #-}+happyIn96 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn96 x = unsafeCoerce# x+{-# INLINE happyIn96 #-}+happyOut96 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut96 x = unsafeCoerce# x+{-# INLINE happyOut96 #-}+happyIn97 :: (ExceptClause) -> (HappyAbsSyn )+happyIn97 x = unsafeCoerce# x+{-# INLINE happyIn97 #-}+happyOut97 :: (HappyAbsSyn ) -> (ExceptClause)+happyOut97 x = unsafeCoerce# x+{-# INLINE happyOut97 #-}+happyIn98 :: (ExceptClause) -> (HappyAbsSyn )+happyIn98 x = unsafeCoerce# x+{-# INLINE happyIn98 #-}+happyOut98 :: (HappyAbsSyn ) -> (ExceptClause)+happyOut98 x = unsafeCoerce# x+{-# INLINE happyOut98 #-}+happyIn99 :: (Maybe Ident) -> (HappyAbsSyn )+happyIn99 x = unsafeCoerce# x+{-# INLINE happyIn99 #-}+happyOut99 :: (HappyAbsSyn ) -> (Maybe Ident)+happyOut99 x = unsafeCoerce# x+{-# INLINE happyOut99 #-}+happyIn100 :: ([Statement]) -> (HappyAbsSyn )+happyIn100 x = unsafeCoerce# x+{-# INLINE happyIn100 #-}+happyOut100 :: (HappyAbsSyn ) -> ([Statement])+happyOut100 x = unsafeCoerce# x+{-# INLINE happyOut100 #-}+happyIn101 :: ([Statement]) -> (HappyAbsSyn )+happyIn101 x = unsafeCoerce# x+{-# INLINE happyIn101 #-}+happyOut101 :: (HappyAbsSyn ) -> ([Statement])+happyOut101 x = unsafeCoerce# x+{-# INLINE happyOut101 #-}+happyIn102 :: ([[Statement]]) -> (HappyAbsSyn )+happyIn102 x = unsafeCoerce# x+{-# INLINE happyIn102 #-}+happyOut102 :: (HappyAbsSyn ) -> ([[Statement]])+happyOut102 x = unsafeCoerce# x+{-# INLINE happyOut102 #-}+happyIn103 :: (Expr) -> (HappyAbsSyn )+happyIn103 x = unsafeCoerce# x+{-# INLINE happyIn103 #-}+happyOut103 :: (HappyAbsSyn ) -> (Expr)+happyOut103 x = unsafeCoerce# x+{-# INLINE happyOut103 #-}+happyIn104 :: (Maybe (Expr, Expr)) -> (HappyAbsSyn )+happyIn104 x = unsafeCoerce# x+{-# INLINE happyIn104 #-}+happyOut104 :: (HappyAbsSyn ) -> (Maybe (Expr, Expr))+happyOut104 x = unsafeCoerce# x+{-# INLINE happyOut104 #-}+happyIn105 :: (Expr) -> (HappyAbsSyn )+happyIn105 x = unsafeCoerce# x+{-# INLINE happyIn105 #-}+happyOut105 :: (HappyAbsSyn ) -> (Expr)+happyOut105 x = unsafeCoerce# x+{-# INLINE happyOut105 #-}+happyIn106 :: (Expr) -> (HappyAbsSyn )+happyIn106 x = unsafeCoerce# x+{-# INLINE happyIn106 #-}+happyOut106 :: (HappyAbsSyn ) -> (Expr)+happyOut106 x = unsafeCoerce# x+{-# INLINE happyOut106 #-}+happyIn107 :: (Expr) -> (HappyAbsSyn )+happyIn107 x = unsafeCoerce# x+{-# INLINE happyIn107 #-}+happyOut107 :: (HappyAbsSyn ) -> (Expr)+happyOut107 x = unsafeCoerce# x+{-# INLINE happyOut107 #-}+happyIn108 :: (Expr) -> (HappyAbsSyn )+happyIn108 x = unsafeCoerce# x+{-# INLINE happyIn108 #-}+happyOut108 :: (HappyAbsSyn ) -> (Expr)+happyOut108 x = unsafeCoerce# x+{-# INLINE happyOut108 #-}+happyIn109 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn109 x = unsafeCoerce# x+{-# INLINE happyIn109 #-}+happyOut109 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut109 x = unsafeCoerce# x+{-# INLINE happyOut109 #-}+happyIn110 :: (Expr) -> (HappyAbsSyn )+happyIn110 x = unsafeCoerce# x+{-# INLINE happyIn110 #-}+happyOut110 :: (HappyAbsSyn ) -> (Expr)+happyOut110 x = unsafeCoerce# x+{-# INLINE happyOut110 #-}+happyIn111 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn111 x = unsafeCoerce# x+{-# INLINE happyIn111 #-}+happyOut111 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut111 x = unsafeCoerce# x+{-# INLINE happyOut111 #-}+happyIn112 :: (Expr) -> (HappyAbsSyn )+happyIn112 x = unsafeCoerce# x+{-# INLINE happyIn112 #-}+happyOut112 :: (HappyAbsSyn ) -> (Expr)+happyOut112 x = unsafeCoerce# x+{-# INLINE happyOut112 #-}+happyIn113 :: (Expr) -> (HappyAbsSyn )+happyIn113 x = unsafeCoerce# x+{-# INLINE happyIn113 #-}+happyOut113 :: (HappyAbsSyn ) -> (Expr)+happyOut113 x = unsafeCoerce# x+{-# INLINE happyOut113 #-}+happyIn114 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn114 x = unsafeCoerce# x+{-# INLINE happyIn114 #-}+happyOut114 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut114 x = unsafeCoerce# x+{-# INLINE happyOut114 #-}+happyIn115 :: (Op) -> (HappyAbsSyn )+happyIn115 x = unsafeCoerce# x+{-# INLINE happyIn115 #-}+happyOut115 :: (HappyAbsSyn ) -> (Op)+happyOut115 x = unsafeCoerce# x+{-# INLINE happyOut115 #-}+happyIn116 :: (Op) -> (HappyAbsSyn )+happyIn116 x = unsafeCoerce# x+{-# INLINE happyIn116 #-}+happyOut116 :: (HappyAbsSyn ) -> (Op)+happyOut116 x = unsafeCoerce# x+{-# INLINE happyOut116 #-}+happyIn117 :: (Op) -> (HappyAbsSyn )+happyIn117 x = unsafeCoerce# x+{-# INLINE happyIn117 #-}+happyOut117 :: (HappyAbsSyn ) -> (Op)+happyOut117 x = unsafeCoerce# x+{-# INLINE happyOut117 #-}+happyIn118 :: (Expr) -> (HappyAbsSyn )+happyIn118 x = unsafeCoerce# x+{-# INLINE happyIn118 #-}+happyOut118 :: (HappyAbsSyn ) -> (Expr)+happyOut118 x = unsafeCoerce# x+{-# INLINE happyOut118 #-}+happyIn119 :: (Expr) -> (HappyAbsSyn )+happyIn119 x = unsafeCoerce# x+{-# INLINE happyIn119 #-}+happyOut119 :: (HappyAbsSyn ) -> (Expr)+happyOut119 x = unsafeCoerce# x+{-# INLINE happyOut119 #-}+happyIn120 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn120 x = unsafeCoerce# x+{-# INLINE happyIn120 #-}+happyOut120 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut120 x = unsafeCoerce# x+{-# INLINE happyOut120 #-}+happyIn121 :: (Expr) -> (HappyAbsSyn )+happyIn121 x = unsafeCoerce# x+{-# INLINE happyIn121 #-}+happyOut121 :: (HappyAbsSyn ) -> (Expr)+happyOut121 x = unsafeCoerce# x+{-# INLINE happyOut121 #-}+happyIn122 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn122 x = unsafeCoerce# x+{-# INLINE happyIn122 #-}+happyOut122 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut122 x = unsafeCoerce# x+{-# INLINE happyOut122 #-}+happyIn123 :: (Expr) -> (HappyAbsSyn )+happyIn123 x = unsafeCoerce# x+{-# INLINE happyIn123 #-}+happyOut123 :: (HappyAbsSyn ) -> (Expr)+happyOut123 x = unsafeCoerce# x+{-# INLINE happyOut123 #-}+happyIn124 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn124 x = unsafeCoerce# x+{-# INLINE happyIn124 #-}+happyOut124 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut124 x = unsafeCoerce# x+{-# INLINE happyOut124 #-}+happyIn125 :: (Expr) -> (HappyAbsSyn )+happyIn125 x = unsafeCoerce# x+{-# INLINE happyIn125 #-}+happyOut125 :: (HappyAbsSyn ) -> (Expr)+happyOut125 x = unsafeCoerce# x+{-# INLINE happyOut125 #-}+happyIn126 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn126 x = unsafeCoerce# x+{-# INLINE happyIn126 #-}+happyOut126 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut126 x = unsafeCoerce# x+{-# INLINE happyOut126 #-}+happyIn127 :: (Op) -> (HappyAbsSyn )+happyIn127 x = unsafeCoerce# x+{-# INLINE happyIn127 #-}+happyOut127 :: (HappyAbsSyn ) -> (Op)+happyOut127 x = unsafeCoerce# x+{-# INLINE happyOut127 #-}+happyIn128 :: (Expr) -> (HappyAbsSyn )+happyIn128 x = unsafeCoerce# x+{-# INLINE happyIn128 #-}+happyOut128 :: (HappyAbsSyn ) -> (Expr)+happyOut128 x = unsafeCoerce# x+{-# INLINE happyOut128 #-}+happyIn129 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn129 x = unsafeCoerce# x+{-# INLINE happyIn129 #-}+happyOut129 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut129 x = unsafeCoerce# x+{-# INLINE happyOut129 #-}+happyIn130 :: (Op) -> (HappyAbsSyn )+happyIn130 x = unsafeCoerce# x+{-# INLINE happyIn130 #-}+happyOut130 :: (HappyAbsSyn ) -> (Op)+happyOut130 x = unsafeCoerce# x+{-# INLINE happyOut130 #-}+happyIn131 :: (Expr) -> (HappyAbsSyn )+happyIn131 x = unsafeCoerce# x+{-# INLINE happyIn131 #-}+happyOut131 :: (HappyAbsSyn ) -> (Expr)+happyOut131 x = unsafeCoerce# x+{-# INLINE happyOut131 #-}+happyIn132 :: ([(Op, Expr)]) -> (HappyAbsSyn )+happyIn132 x = unsafeCoerce# x+{-# INLINE happyIn132 #-}+happyOut132 :: (HappyAbsSyn ) -> ([(Op, Expr)])+happyOut132 x = unsafeCoerce# x+{-# INLINE happyOut132 #-}+happyIn133 :: (Op) -> (HappyAbsSyn )+happyIn133 x = unsafeCoerce# x+{-# INLINE happyIn133 #-}+happyOut133 :: (HappyAbsSyn ) -> (Op)+happyOut133 x = unsafeCoerce# x+{-# INLINE happyOut133 #-}+happyIn134 :: (Expr) -> (HappyAbsSyn )+happyIn134 x = unsafeCoerce# x+{-# INLINE happyIn134 #-}+happyOut134 :: (HappyAbsSyn ) -> (Expr)+happyOut134 x = unsafeCoerce# x+{-# INLINE happyOut134 #-}+happyIn135 :: (Expr) -> (HappyAbsSyn )+happyIn135 x = unsafeCoerce# x+{-# INLINE happyIn135 #-}+happyOut135 :: (HappyAbsSyn ) -> (Expr)+happyOut135 x = unsafeCoerce# x+{-# INLINE happyOut135 #-}+happyIn136 :: ([Trailer]) -> (HappyAbsSyn )+happyIn136 x = unsafeCoerce# x+{-# INLINE happyIn136 #-}+happyOut136 :: (HappyAbsSyn ) -> ([Trailer])+happyOut136 x = unsafeCoerce# x+{-# INLINE happyOut136 #-}+happyIn137 :: ([Trailer]) -> (HappyAbsSyn )+happyIn137 x = unsafeCoerce# x+{-# INLINE happyIn137 #-}+happyOut137 :: (HappyAbsSyn ) -> ([Trailer])+happyOut137 x = unsafeCoerce# x+{-# INLINE happyOut137 #-}+happyIn138 :: (Expr) -> (HappyAbsSyn )+happyIn138 x = unsafeCoerce# x+{-# INLINE happyIn138 #-}+happyOut138 :: (HappyAbsSyn ) -> (Expr)+happyOut138 x = unsafeCoerce# x+{-# INLINE happyOut138 #-}+happyIn139 :: (Expr) -> (HappyAbsSyn )+happyIn139 x = unsafeCoerce# x+{-# INLINE happyIn139 #-}+happyOut139 :: (HappyAbsSyn ) -> (Expr)+happyOut139 x = unsafeCoerce# x+{-# INLINE happyOut139 #-}+happyIn140 :: (Expr) -> (HappyAbsSyn )+happyIn140 x = unsafeCoerce# x+{-# INLINE happyIn140 #-}+happyOut140 :: (HappyAbsSyn ) -> (Expr)+happyOut140 x = unsafeCoerce# x+{-# INLINE happyOut140 #-}+happyIn141 :: (Expr) -> (HappyAbsSyn )+happyIn141 x = unsafeCoerce# x+{-# INLINE happyIn141 #-}+happyOut141 :: (HappyAbsSyn ) -> (Expr)+happyOut141 x = unsafeCoerce# x+{-# INLINE happyOut141 #-}+happyIn142 :: (Expr) -> (HappyAbsSyn )+happyIn142 x = unsafeCoerce# x+{-# INLINE happyIn142 #-}+happyOut142 :: (HappyAbsSyn ) -> (Expr)+happyOut142 x = unsafeCoerce# x+{-# INLINE happyOut142 #-}+happyIn143 :: ([String]) -> (HappyAbsSyn )+happyIn143 x = unsafeCoerce# x+{-# INLINE happyIn143 #-}+happyOut143 :: (HappyAbsSyn ) -> ([String])+happyOut143 x = unsafeCoerce# x+{-# INLINE happyOut143 #-}+happyIn144 :: ([BS.ByteString]) -> (HappyAbsSyn )+happyIn144 x = unsafeCoerce# x+{-# INLINE happyIn144 #-}+happyOut144 :: (HappyAbsSyn ) -> ([BS.ByteString])+happyOut144 x = unsafeCoerce# x+{-# INLINE happyOut144 #-}+happyIn145 :: (Either Expr (Comprehension Expr)) -> (HappyAbsSyn )+happyIn145 x = unsafeCoerce# x+{-# INLINE happyIn145 #-}+happyOut145 :: (HappyAbsSyn ) -> (Either Expr (Comprehension Expr))+happyOut145 x = unsafeCoerce# x+{-# INLINE happyOut145 #-}+happyIn146 :: (Trailer) -> (HappyAbsSyn )+happyIn146 x = unsafeCoerce# x+{-# INLINE happyIn146 #-}+happyOut146 :: (HappyAbsSyn ) -> (Trailer)+happyOut146 x = unsafeCoerce# x+{-# INLINE happyOut146 #-}+happyIn147 :: ([Subscript]) -> (HappyAbsSyn )+happyIn147 x = unsafeCoerce# x+{-# INLINE happyIn147 #-}+happyOut147 :: (HappyAbsSyn ) -> ([Subscript])+happyOut147 x = unsafeCoerce# x+{-# INLINE happyOut147 #-}+happyIn148 :: ([Subscript]) -> (HappyAbsSyn )+happyIn148 x = unsafeCoerce# x+{-# INLINE happyIn148 #-}+happyOut148 :: (HappyAbsSyn ) -> ([Subscript])+happyOut148 x = unsafeCoerce# x+{-# INLINE happyOut148 #-}+happyIn149 :: (Subscript) -> (HappyAbsSyn )+happyIn149 x = unsafeCoerce# x+{-# INLINE happyIn149 #-}+happyOut149 :: (HappyAbsSyn ) -> (Subscript)+happyOut149 x = unsafeCoerce# x+{-# INLINE happyOut149 #-}+happyIn150 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn150 x = unsafeCoerce# x+{-# INLINE happyIn150 #-}+happyOut150 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut150 x = unsafeCoerce# x+{-# INLINE happyOut150 #-}+happyIn151 :: (Maybe (Maybe Expr)) -> (HappyAbsSyn )+happyIn151 x = unsafeCoerce# x+{-# INLINE happyIn151 #-}+happyOut151 :: (HappyAbsSyn ) -> (Maybe (Maybe Expr))+happyOut151 x = unsafeCoerce# x+{-# INLINE happyOut151 #-}+happyIn152 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn152 x = unsafeCoerce# x+{-# INLINE happyIn152 #-}+happyOut152 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut152 x = unsafeCoerce# x+{-# INLINE happyOut152 #-}+happyIn153 :: ([Expr]) -> (HappyAbsSyn )+happyIn153 x = unsafeCoerce# x+{-# INLINE happyIn153 #-}+happyOut153 :: (HappyAbsSyn ) -> ([Expr])+happyOut153 x = unsafeCoerce# x+{-# INLINE happyOut153 #-}+happyIn154 :: (Bool) -> (HappyAbsSyn )+happyIn154 x = unsafeCoerce# x+{-# INLINE happyIn154 #-}+happyOut154 :: (HappyAbsSyn ) -> (Bool)+happyOut154 x = unsafeCoerce# x+{-# INLINE happyOut154 #-}+happyIn155 :: ([Expr]) -> (HappyAbsSyn )+happyIn155 x = unsafeCoerce# x+{-# INLINE happyIn155 #-}+happyOut155 :: (HappyAbsSyn ) -> ([Expr])+happyOut155 x = unsafeCoerce# x+{-# INLINE happyOut155 #-}+happyIn156 :: (Expr) -> (HappyAbsSyn )+happyIn156 x = unsafeCoerce# x+{-# INLINE happyIn156 #-}+happyOut156 :: (HappyAbsSyn ) -> (Expr)+happyOut156 x = unsafeCoerce# x+{-# INLINE happyOut156 #-}+happyIn157 :: ([Expr]) -> (HappyAbsSyn )+happyIn157 x = unsafeCoerce# x+{-# INLINE happyIn157 #-}+happyOut157 :: (HappyAbsSyn ) -> ([Expr])+happyOut157 x = unsafeCoerce# x+{-# INLINE happyOut157 #-}+happyIn158 :: (Expr) -> (HappyAbsSyn )+happyIn158 x = unsafeCoerce# x+{-# INLINE happyIn158 #-}+happyOut158 :: (HappyAbsSyn ) -> (Expr)+happyOut158 x = unsafeCoerce# x+{-# INLINE happyOut158 #-}+happyIn159 :: (Either CompFor [(Expr, Expr)]) -> (HappyAbsSyn )+happyIn159 x = unsafeCoerce# x+{-# INLINE happyIn159 #-}+happyOut159 :: (HappyAbsSyn ) -> (Either CompFor [(Expr, Expr)])+happyOut159 x = unsafeCoerce# x+{-# INLINE happyOut159 #-}+happyIn160 :: ([(Expr, Expr)]) -> (HappyAbsSyn )+happyIn160 x = unsafeCoerce# x+{-# INLINE happyIn160 #-}+happyOut160 :: (HappyAbsSyn ) -> ([(Expr, Expr)])+happyOut160 x = unsafeCoerce# x+{-# INLINE happyOut160 #-}+happyIn161 :: (Either CompFor [Expr]) -> (HappyAbsSyn )+happyIn161 x = unsafeCoerce# x+{-# INLINE happyIn161 #-}+happyOut161 :: (HappyAbsSyn ) -> (Either CompFor [Expr])+happyOut161 x = unsafeCoerce# x+{-# INLINE happyOut161 #-}+happyIn162 :: ([Expr]) -> (HappyAbsSyn )+happyIn162 x = unsafeCoerce# x+{-# INLINE happyIn162 #-}+happyOut162 :: (HappyAbsSyn ) -> ([Expr])+happyOut162 x = unsafeCoerce# x+{-# INLINE happyOut162 #-}+happyIn163 :: (Statement) -> (HappyAbsSyn )+happyIn163 x = unsafeCoerce# x+{-# INLINE happyIn163 #-}+happyOut163 :: (HappyAbsSyn ) -> (Statement)+happyOut163 x = unsafeCoerce# x+{-# INLINE happyOut163 #-}+happyIn164 :: ([Argument]) -> (HappyAbsSyn )+happyIn164 x = unsafeCoerce# x+{-# INLINE happyIn164 #-}+happyOut164 :: (HappyAbsSyn ) -> ([Argument])+happyOut164 x = unsafeCoerce# x+{-# INLINE happyOut164 #-}+happyIn165 :: ([Argument]) -> (HappyAbsSyn )+happyIn165 x = unsafeCoerce# x+{-# INLINE happyIn165 #-}+happyOut165 :: (HappyAbsSyn ) -> ([Argument])+happyOut165 x = unsafeCoerce# x+{-# INLINE happyOut165 #-}+happyIn166 :: ([Argument]) -> (HappyAbsSyn )+happyIn166 x = unsafeCoerce# x+{-# INLINE happyIn166 #-}+happyOut166 :: (HappyAbsSyn ) -> ([Argument])+happyOut166 x = unsafeCoerce# x+{-# INLINE happyOut166 #-}+happyIn167 :: (Argument) -> (HappyAbsSyn )+happyIn167 x = unsafeCoerce# x+{-# INLINE happyIn167 #-}+happyOut167 :: (HappyAbsSyn ) -> (Argument)+happyOut167 x = unsafeCoerce# x+{-# INLINE happyOut167 #-}+happyIn168 :: (CompIter) -> (HappyAbsSyn )+happyIn168 x = unsafeCoerce# x+{-# INLINE happyIn168 #-}+happyOut168 :: (HappyAbsSyn ) -> (CompIter)+happyOut168 x = unsafeCoerce# x+{-# INLINE happyOut168 #-}+happyIn169 :: (CompFor) -> (HappyAbsSyn )+happyIn169 x = unsafeCoerce# x+{-# INLINE happyIn169 #-}+happyOut169 :: (HappyAbsSyn ) -> (CompFor)+happyOut169 x = unsafeCoerce# x+{-# INLINE happyOut169 #-}+happyIn170 :: (Maybe CompIter) -> (HappyAbsSyn )+happyIn170 x = unsafeCoerce# x+{-# INLINE happyIn170 #-}+happyOut170 :: (HappyAbsSyn ) -> (Maybe CompIter)+happyOut170 x = unsafeCoerce# x+{-# INLINE happyOut170 #-}+happyIn171 :: (CompIf) -> (HappyAbsSyn )+happyIn171 x = unsafeCoerce# x+{-# INLINE happyIn171 #-}+happyOut171 :: (HappyAbsSyn ) -> (CompIf)+happyOut171 x = unsafeCoerce# x+{-# INLINE happyOut171 #-}+happyIn172 :: (Expr) -> (HappyAbsSyn )+happyIn172 x = unsafeCoerce# x+{-# INLINE happyIn172 #-}+happyOut172 :: (HappyAbsSyn ) -> (Expr)+happyOut172 x = unsafeCoerce# x+{-# INLINE happyOut172 #-}+happyIn173 :: (Maybe Expr) -> (HappyAbsSyn )+happyIn173 x = unsafeCoerce# x+{-# INLINE happyIn173 #-}+happyOut173 :: (HappyAbsSyn ) -> (Maybe Expr)+happyOut173 x = unsafeCoerce# x+{-# INLINE happyOut173 #-}+happyInTok :: Token -> (HappyAbsSyn )+happyInTok x = unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn ) -> Token+happyOutTok x = unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x00\x00\xb4\x0f\x52\x12\xa8\x02\x00\x00\x6d\x02\x00\x00\x00\x00\x00\x00\xb1\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x02\xbd\x02\x00\x00\xb0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x11\x8f\x11\x68\x11\x00\x00\x00\x00\x00\x00\x12\x00\x12\x00\x79\x12\x12\x00\x3d\x00\x00\x00\x62\x02\x00\x00\x5e\x01\x64\x02\x00\x00\x00\x00\x00\x00\xa5\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x06\x00\x00\x00\x00\xaf\x02\xaf\x02\xaf\x02\x52\x12\x12\x00\x52\x12\x52\x12\x52\x12\x52\x12\x9e\x02\x52\x12\x00\x00\x00\x00\x00\x00\x12\x00\xaa\x02\x03\x00\xaa\x02\xaa\x02\x52\x12\x52\x02\x00\x00\x6e\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x02\x00\x00\x00\x00\x9a\x02\x00\x00\x00\x00\xa6\x02\x00\x00\x03\x00\x03\x00\x9c\x02\x00\x00\x00\x00\x92\x02\x00\x00\x4c\x02\x40\x10\x00\x00\x00\x00\x00\x00\x80\x02\x8e\x02\x5b\x02\x89\x02\x8d\x02\x8c\x02\x00\x00\x84\x02\x00\x00\x78\x02\x00\x00\x00\x00\x87\x02\x00\x00\x41\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x02\x00\x00\x76\x02\x63\x02\x85\x10\x00\x00\x00\x00\x00\x00\x00\x00\x75\x02\x00\x00\x6f\x02\x6e\x02\x00\x00\x72\x02\x00\x00\x77\x02\x77\x02\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x69\x02\x00\x00\x61\x02\x68\x02\x00\x00\x00\x00\x67\x02\x00\x00\x00\x00\x00\x00\x52\x12\x4f\x02\x00\x00\x00\x00\x43\x02\x11\x00\xcd\x00\x1f\x01\xfb\x00\x30\x02\x29\x02\x31\x02\x83\x06\x3f\x02\x35\x02\x00\x00\x79\x12\x2b\x02\x79\x12\x79\x12\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x02\x00\x00\x00\x00\x26\x02\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x10\x52\x12\x57\x02\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x41\x02\x00\x00\x52\x12\x00\x00\x00\x00\x00\x00\x00\x00\x52\x12\x2c\x00\x3d\x00\x52\x12\x00\x00\x00\x00\x40\x10\x52\x12\x00\x00\x00\x00\x00\x00\x41\x11\x00\x00\x4a\x02\x4a\x02\x00\x02\x3a\x00\x3e\x02\xbc\x10\x40\x10\x52\x12\x40\x10\x3c\x02\x12\x00\x00\x00\xff\x00\xfa\x0f\x00\x00\x52\x12\x00\x00\x12\x00\x2a\x02\x00\x00\x00\x00\x39\x00\x05\x02\x45\x02\x52\x12\x00\x00\x45\x02\x2d\x02\x00\x00\x00\x00\x00\x00\x34\x02\x3b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x02\xfa\x0f\x00\x00\x0a\x02\x11\x02\x00\x00\x27\x02\x52\x12\x25\x02\x00\x00\x40\x10\x00\x00\x23\x02\x09\x02\x28\x02\x1a\x02\x24\x02\x1e\x02\x52\x12\x52\x12\x40\x10\x22\x02\x00\x00\x1f\x02\x13\x02\x12\x02\x00\x00\x06\x02\x08\x02\x08\x02\x02\x02\x52\x12\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x03\x02\x00\x00\x00\x00\x01\x02\x00\x00\x52\x12\xcc\x01\x00\x00\x00\x00\xfe\x01\xfc\x01\xfd\x01\x00\x00\xf5\x01\xf9\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\x52\x12\x00\x00\x00\x00\x52\x12\x00\x00\x1a\x11\x00\x00\x79\x12\x00\x00\x00\x00\xf3\x01\x00\x00\x2c\x00\x40\x10\x00\x00\x40\x10\x00\x00\x00\x00\x00\x00\x00\x00\x52\x12\x0e\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x01\xbc\x10\x00\x00\x00\x00\x52\x12\x00\x00\x40\x10\x00\x00\x40\x10\x00\x00\xe8\x01\x40\x10\x00\x00\xda\x01\x00\x00\x00\x00\xf1\x01\x00\x00\xf7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x01\x00\x00\x00\x00\x00\x00\xa6\x01\x00\x00\x00\x00\xeb\x10\x00\x00\x00\x00\xc9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x12\xfe\x00\x00\x00\x00\x00\xc6\x01\x00\x00\x00\x00\x52\x12\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x12\xc4\x01\x0e\x00\x00\x00\xc5\x01\x04\x12\x00\x00\x40\x10\x00\x00\x00\x00\xeb\x10\x00\x00\x04\x12\xfe\x00\x00\x00\x00\x00\x28\x00\x00\x00\xc1\x01\x00\x00\x00\x00\x00\x00\xdd\x11\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\xe1\x01\x01\x00\xd1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x68\x01\x58\x01\x00\x00\x4c\x01\x00\x00\x41\x01\x36\x01\x3a\x01\x22\x01\x2c\x01\x18\x01\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x01\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x07\x6a\x09\x40\x09\x00\x00\x00\x00\x00\x00\x21\x06\xb7\x05\xe4\x0e\x9f\x01\xd7\x01\x00\x00\x00\x00\x00\x00\xf8\xff\x80\x01\x00\x00\x00\x00\x00\x00\x60\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\x32\x01\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x02\x00\x00\x00\x00\xf8\x00\x5f\x01\x5b\x01\x32\x0e\xa8\x03\x0b\x0e\xe4\x0d\x33\x02\xfb\x01\x00\x00\xd2\x0a\x00\x00\x00\x00\x00\x00\x3e\x03\x02\x00\x9d\x00\x47\x00\xfd\xff\xc8\x09\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x01\x00\x00\x00\x00\x20\x00\xe6\xff\xcb\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x27\x01\x2b\x07\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\xb7\x00\x42\x01\x00\x00\x00\x00\x00\x00\xed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x01\x00\x00\xd1\x00\x0b\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xff\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x91\x00\x82\x00\x81\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x7d\x0e\x00\x00\xa2\x0e\xc3\x0e\x7c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\xe6\x04\x50\x05\x1c\x00\x45\x00\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x09\xf3\x09\xca\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x02\x00\x00\x00\x00\x34\x00\x00\x00\x96\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x0d\x95\x00\xe7\x00\x48\x0d\x00\x00\x00\x00\xc1\x06\x21\x0d\x00\x00\x00\x00\x00\x00\xf6\x07\x00\x00\x8b\x00\x58\x00\x9b\x00\x3c\x01\x00\x00\xe8\x08\x57\x06\x9e\x09\xed\x05\x00\x00\x6a\x02\x00\x00\x4b\x01\x0e\x01\x00\x00\xfa\x0c\x00\x00\x12\x04\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x83\x00\xd3\x0c\x00\x00\x68\x00\x66\x00\x00\x00\x00\x00\x00\x00\xe8\xff\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x01\x00\x00\x4f\x00\x92\x00\x00\x00\x00\x00\xab\x0a\x00\x00\x00\x00\x83\x05\x00\x00\x00\x00\x30\x00\x00\x00\xd2\xff\x00\x00\x00\x00\xac\x0c\x85\x0c\x19\x05\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x5c\x00\xf0\xff\x00\x00\x5e\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x37\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x0c\x00\x00\x00\x00\x7b\x0a\x00\x00\x23\x0a\x00\x00\x57\x0e\x00\x00\x00\x00\x91\xff\x00\x00\xf3\xff\xaf\x04\x00\x00\x45\x04\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x0b\xb9\x01\x65\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x08\x00\x00\x00\x00\xc2\x0b\x00\x00\xdb\x03\x00\x00\x71\x03\x00\x00\xc3\xff\x07\x03\x00\x00\xb7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xff\x00\x00\x00\x00\x87\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x0b\x1a\x01\x00\x00\x00\x00\xf2\xff\x00\x00\x00\x00\x50\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x74\x0b\x00\x00\x78\x01\x00\x00\x00\x00\x4a\x0b\x00\x00\x9d\x02\x00\x00\x00\x00\x54\x08\x00\x00\x23\x0b\xc0\x00\x00\x00\x00\x00\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x0a\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xf7\xff\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\x01\xff\xd6\xfe\x46\xff\x45\xff\x3e\xff\x3b\xff\x38\xff\x36\xff\x28\xff\x26\xff\x23\xff\x20\xff\x1d\xff\x18\xff\x13\xff\x0a\xff\x06\xff\x04\xff\x03\xff\x02\xff\xfd\xfe\xfc\xfe\xf2\xff\xdb\xfe\xc1\xff\xef\xfe\xed\xfe\x00\xff\xff\xfe\xfe\xfe\xf2\xfe\x00\x00\x00\x00\xf9\xfe\xf8\xfe\xfa\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xff\xfb\xfe\x00\x00\xee\xff\x00\x00\xef\xff\x68\xff\x6a\xff\xfb\xff\xbd\xff\xbb\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\x9a\xff\x99\xff\x98\xff\x96\xff\x97\xff\xb5\xff\x8b\xff\x8c\xff\xb4\xff\xb3\xff\xb2\xff\xfa\xff\x6f\xff\x61\xff\x63\xff\x6e\xff\x6d\xff\x6c\xff\x6b\xff\xad\xff\x69\xff\x92\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\xfe\xb4\xfe\x00\x00\x90\xff\x9b\xff\x95\xff\x94\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\xf8\xff\xf6\xff\xf4\xff\xc0\xff\xbf\xff\xf5\xff\x70\xff\x73\xff\x71\xff\x74\xff\x75\xff\x77\xff\x00\x00\x84\xff\x86\xff\x85\xff\xc9\xfe\xd9\xfe\x9c\xff\xdb\xfe\x91\xff\x8e\xff\x00\x00\xb3\xfe\xb5\xfe\x93\xff\x53\xff\x00\x00\x00\x00\x00\x00\xc9\xfe\x00\x00\x7d\xff\x7c\xff\x7b\xff\x4e\xff\xb1\xff\xb0\xff\xae\xff\xaf\xff\x00\x00\xa8\xff\xa7\xff\xa6\xff\xa5\xff\xa4\xff\xa3\xff\xa2\xff\xa1\xff\xa0\xff\x9f\xff\x9e\xff\x9d\xff\x66\xff\x64\xff\x67\xff\x00\x00\x00\x00\xbc\xff\xed\xff\xec\xff\xea\xff\xeb\xff\x00\x00\xd1\xff\xcd\xff\xcf\xff\xce\xff\xd8\xff\xc2\xff\xc5\xff\x00\x00\x0b\xff\x39\xff\x0c\xff\x0d\xff\xcc\xfe\x00\x00\xf4\xfe\xd6\xfe\x00\x00\xeb\xfe\xf6\xfe\x00\x00\xf0\xfe\xf1\xfe\xd7\xfe\xda\xfe\xf3\xff\xec\xfe\xee\xfe\x09\xff\x07\xff\x14\xff\x19\xff\x1e\xff\x21\xff\x24\xff\x27\xff\x37\xff\x3c\xff\x3f\xff\x47\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\xff\x33\xff\x34\xff\x32\xff\x31\xff\x30\xff\x00\x00\x2f\xff\x2e\xff\x2a\xff\x00\x00\x00\x00\x00\x00\x00\x00\x1a\xff\x1b\xff\x00\x00\x16\xff\x15\xff\x00\x00\x11\xff\x10\xff\x0f\xff\x0e\xff\x05\xff\xc7\xfe\xe1\xfe\x00\x00\x00\x00\xf1\xff\xd5\xfe\xf7\xfe\xf5\xfe\xea\xfe\x00\x00\xf3\xfe\xd3\xfe\xdb\xfe\xce\xfe\x00\x00\xc3\xff\xc6\xff\xc4\xff\xc7\xff\x00\x00\x00\x00\xd0\xff\x00\x00\xba\xff\xbe\xff\x00\x00\x00\x00\xa9\xff\xaa\xff\xab\xff\x00\x00\x79\xff\x00\x00\x00\x00\xe8\xff\xe4\xff\x00\x00\xc7\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\xff\x00\x00\x00\x00\x8f\xff\x00\x00\xdc\xfe\xda\xfe\x00\x00\x82\xff\x83\xff\x00\x00\x78\xff\x00\x00\x00\x00\x72\xff\x00\x00\x4e\xff\x8a\xff\x7f\xff\x87\xff\xdb\xfe\x00\x00\x89\xff\xf0\xff\xd8\xfe\x8d\xff\x49\xff\x00\x00\x4a\xff\x5d\xff\x61\xff\x58\xff\x57\xff\x00\x00\x50\xff\x00\x00\x52\xff\x00\x00\x65\xff\x00\x00\x61\xff\x01\xff\xbd\xfe\x00\x00\xc4\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xd8\xff\xe1\xff\xe3\xff\xe2\xff\xda\xff\xd4\xff\x00\x00\x00\x00\x00\x00\x7a\xff\x4d\xff\xac\xff\x00\x00\x60\xff\x41\xff\xcc\xff\xcb\xff\xca\xff\xc8\xff\xd7\xff\xd0\xfe\xcd\xfe\xda\xfe\x00\x00\x08\xff\xe7\xfe\xe3\xfe\x00\x00\xdb\xfe\xe5\xfe\x00\x00\x00\x00\x12\xff\x17\xff\x1c\xff\x1f\xff\x22\xff\x25\xff\x2b\xff\x29\xff\x2d\xff\x35\xff\x3a\xff\x3d\xff\x00\x00\x44\xff\xe9\xfe\xe1\xfe\xe6\xfe\xda\xfe\xe8\xfe\x00\x00\xcb\xfe\xd4\xfe\xdb\xfe\xd2\xfe\x00\x00\x00\x00\xe7\xff\x00\x00\xd2\xff\xd3\xff\xd5\xff\xdb\xff\x00\x00\x00\x00\xe4\xff\xd6\xff\xe6\xff\xca\xfe\xc5\xfe\xc6\xfe\xc7\xfe\xc8\xfe\xbc\xfe\x00\x00\x5f\xff\x00\x00\x54\xff\x00\x00\x51\xff\x4e\xff\x00\x00\x56\xff\x5a\xff\x48\xff\x4b\xff\x00\x00\x80\xff\xda\xfe\x81\xff\x76\xff\x7e\xff\x88\xff\x5c\xff\x00\x00\x55\xff\x4f\xff\x5b\xff\x61\xff\xbe\xfe\xc3\xfe\x00\x00\xe0\xff\xdf\xff\xde\xff\xdc\xff\xd9\xff\xe9\xff\x62\xff\xc9\xff\xd1\xfe\xda\xfe\xb8\xfe\xe4\xfe\xe0\xfe\xdf\xfe\xe2\xfe\xde\xfe\xe1\xfe\xb7\xfe\xbb\xfe\xb9\xfe\xba\xfe\x00\x00\x00\x00\x00\x00\xc2\xfe\xc1\xfe\x00\x00\x5e\xff\x00\x00\x59\xff\xbf\xfe\x00\x00\xdd\xff\x00\x00\xb8\xfe\x42\xff\x43\xff\xd0\xff\xdd\xfe\x00\x00\xb6\xfe\xcf\xfe\xc0\xfe\x00\x00\x40\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x00\x00\x12\x00\x0b\x00\x0c\x00\x02\x00\x50\x00\x21\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x55\x00\x0c\x00\x1b\x00\x1c\x00\x02\x00\x21\x00\x1f\x00\x20\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x09\x00\x09\x00\x0b\x00\x0b\x00\x21\x00\x0d\x00\x5d\x00\x3b\x00\x21\x00\x21\x00\x23\x00\x94\x00\x25\x00\x26\x00\x27\x00\x43\x00\x02\x00\x19\x00\x1a\x00\x1b\x00\x02\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x25\x00\x26\x00\x38\x00\x39\x00\x02\x00\x02\x00\x21\x00\x30\x00\x02\x00\x3f\x00\x21\x00\x09\x00\x46\x00\x47\x00\x43\x00\x45\x00\x44\x00\x45\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x27\x00\x94\x00\x3f\x00\x51\x00\x52\x00\x53\x00\x44\x00\x14\x00\x45\x00\x30\x00\x11\x00\x59\x00\x3b\x00\x30\x00\x15\x00\x13\x00\x21\x00\x27\x00\x27\x00\x61\x00\x43\x00\x27\x00\x64\x00\x21\x00\x66\x00\x21\x00\x68\x00\x30\x00\x6a\x00\x6b\x00\x30\x00\x12\x00\x9b\x00\x9c\x00\x70\x00\x71\x00\x17\x00\x73\x00\xa3\x00\x75\x00\xa3\x00\x77\x00\x21\x00\x3c\x00\x7a\x00\x94\x00\x21\x00\x7d\x00\x21\x00\x50\x00\x80\x00\x81\x00\x91\x00\x92\x00\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\x04\x00\x46\x00\x47\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x77\x00\x0c\x00\x9d\x00\x7a\x00\x96\x00\x97\x00\x7d\x00\x42\x00\x43\x00\x80\x00\x81\x00\x9d\x00\x50\x00\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xa6\x00\x0d\x00\x21\x00\x22\x00\x23\x00\x21\x00\x25\x00\x26\x00\x27\x00\x1b\x00\x1c\x00\x4e\x00\x4f\x00\x1f\x00\x20\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x7a\x00\x38\x00\x39\x00\x7d\x00\x5d\x00\x21\x00\x80\x00\x81\x00\x3f\x00\x94\x00\x84\x00\x85\x00\x86\x00\x87\x00\x45\x00\x89\x00\x8a\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x6d\x00\x6e\x00\x3b\x00\x51\x00\x52\x00\x53\x00\x99\x00\x9a\x00\x80\x00\x81\x00\x43\x00\x59\x00\x84\x00\x85\x00\x86\x00\x87\x00\xa3\x00\x89\x00\x8a\x00\x61\x00\x58\x00\x21\x00\x64\x00\x5b\x00\x66\x00\x1e\x00\x68\x00\x20\x00\x6a\x00\x6b\x00\x27\x00\x28\x00\x82\x00\x83\x00\x70\x00\x71\x00\x79\x00\x73\x00\x6f\x00\x75\x00\x7c\x00\x77\x00\x21\x00\x1a\x00\x7a\x00\x1c\x00\x1d\x00\x7d\x00\x1f\x00\x20\x00\x80\x00\x81\x00\x3d\x00\x3e\x00\x84\x00\x85\x00\x86\x00\x87\x00\x7f\x00\x89\x00\x8a\x00\x15\x00\x16\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x21\x00\x0c\x00\x3c\x00\x3d\x00\x3e\x00\x96\x00\x97\x00\x7d\x00\x22\x00\x23\x00\x80\x00\x81\x00\x9d\x00\x8c\x00\x84\x00\x85\x00\x86\x00\x87\x00\x20\x00\x89\x00\x8a\x00\xa6\x00\x21\x00\x22\x00\x23\x00\xa3\x00\x25\x00\x26\x00\x27\x00\x3b\x00\x3c\x00\x40\x00\x41\x00\x42\x00\x43\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x25\x00\x26\x00\x38\x00\x39\x00\x14\x00\x21\x00\x5d\x00\x0f\x00\x10\x00\x3f\x00\x12\x00\x21\x00\x0e\x00\x15\x00\x16\x00\x45\x00\x18\x00\x9e\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x5a\x00\x21\x00\x37\x00\x51\x00\x52\x00\x53\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x94\x00\x59\x00\x3a\x00\x9e\x00\x3c\x00\x3d\x00\x3e\x00\x5f\x00\x60\x00\x61\x00\x12\x00\x13\x00\x64\x00\x44\x00\x66\x00\x10\x00\x68\x00\x12\x00\x6a\x00\x6b\x00\x15\x00\x16\x00\x21\x00\x18\x00\x70\x00\x71\x00\x21\x00\x73\x00\x50\x00\x75\x00\x24\x00\x77\x00\x21\x00\x07\x00\x7a\x00\x11\x00\x12\x00\x7d\x00\x06\x00\x15\x00\x80\x00\x81\x00\x18\x00\x94\x00\x84\x00\x85\x00\x86\x00\x87\x00\x7e\x00\x89\x00\x8a\x00\x21\x00\x78\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x54\x00\x0c\x00\x56\x00\x57\x00\x58\x00\x96\x00\x97\x00\x5b\x00\x7b\x00\x80\x00\x81\x00\x74\x00\x9d\x00\x84\x00\x85\x00\x86\x00\x87\x00\x76\x00\x89\x00\x8a\x00\x72\x00\xa6\x00\x21\x00\x22\x00\x23\x00\x6c\x00\x25\x00\x26\x00\x27\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x21\x00\x69\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x11\x00\x12\x00\x38\x00\x39\x00\x15\x00\x67\x00\x62\x00\x18\x00\x11\x00\x3f\x00\x0f\x00\x11\x00\x05\x00\x11\x00\x0f\x00\x45\x00\x21\x00\x35\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x01\x00\x02\x00\x03\x00\x51\x00\x52\x00\x53\x00\x19\x00\x1a\x00\x11\x00\x1c\x00\x1d\x00\x59\x00\x1f\x00\x20\x00\x19\x00\x1a\x00\x21\x00\x1c\x00\x1d\x00\x61\x00\x1f\x00\x20\x00\x64\x00\x02\x00\x66\x00\x0a\x00\x68\x00\x23\x00\x6a\x00\x6b\x00\x18\x00\x0f\x00\x0f\x00\x0a\x00\x70\x00\x71\x00\x11\x00\x73\x00\x0c\x00\x75\x00\x02\x00\x77\x00\x0f\x00\x41\x00\x7a\x00\x11\x00\x11\x00\x7d\x00\x0f\x00\x11\x00\x80\x00\x81\x00\x15\x00\x11\x00\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\x80\x00\x81\x00\x0f\x00\x0f\x00\x84\x00\x85\x00\x86\x00\x87\x00\x08\x00\x89\x00\x8a\x00\x96\x00\x97\x00\x0a\x00\x0f\x00\x0a\x00\x15\x00\x08\x00\x9d\x00\x61\x00\x22\x00\x11\x00\x64\x00\x11\x00\x66\x00\x11\x00\x68\x00\xa6\x00\x6a\x00\x6b\x00\x02\x00\x35\x00\x35\x00\x1f\x00\x70\x00\x71\x00\x0f\x00\x73\x00\x18\x00\x75\x00\x02\x00\x77\x00\x44\x00\x20\x00\x7a\x00\x02\x00\x11\x00\x7d\x00\x11\x00\x0f\x00\x80\x00\x81\x00\x53\x00\x21\x00\x84\x00\x85\x00\x86\x00\x87\x00\x02\x00\x89\x00\x8a\x00\x61\x00\x37\x00\x41\x00\x64\x00\x35\x00\x66\x00\x39\x00\x68\x00\x2f\x00\x6a\x00\x6b\x00\x96\x00\x97\x00\x38\x00\x3a\x00\x70\x00\x71\x00\x2e\x00\x73\x00\x20\x00\x75\x00\x0a\x00\x77\x00\x30\x00\x0c\x00\x7a\x00\x15\x00\x0e\x00\x7d\x00\x02\x00\x08\x00\x80\x00\x81\x00\x0f\x00\x0f\x00\x84\x00\x85\x00\x86\x00\x87\x00\x20\x00\x89\x00\x8a\x00\x11\x00\x11\x00\x28\x00\x29\x00\x2a\x00\x21\x00\x2c\x00\x2d\x00\x36\x00\x08\x00\x18\x00\x96\x00\x97\x00\x0f\x00\x61\x00\x09\x00\x09\x00\x64\x00\x18\x00\x66\x00\x11\x00\x68\x00\x41\x00\x6a\x00\x6b\x00\x11\x00\x54\x00\x0f\x00\xa7\x00\x70\x00\x71\x00\x09\x00\x73\x00\x01\x00\x75\x00\x0f\x00\x77\x00\x59\x00\x02\x00\x7a\x00\x0f\x00\x11\x00\x7d\x00\x02\x00\x35\x00\x80\x00\x81\x00\x10\x00\x52\x00\x84\x00\x85\x00\x86\x00\x87\x00\x59\x00\x89\x00\x8a\x00\x21\x00\x0f\x00\x23\x00\x04\x00\x25\x00\x26\x00\x27\x00\x03\x00\x59\x00\x16\x00\x20\x00\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xa7\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\x93\x00\x61\x00\x95\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\x93\x00\x61\x00\x95\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\x93\x00\x61\x00\x95\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\x37\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x40\x00\x41\x00\x42\x00\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\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\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x21\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\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x21\x00\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\x2b\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x96\x00\x97\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xa6\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x21\x00\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\x21\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x96\x00\x97\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xa6\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x96\x00\x97\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xa6\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xa0\x00\xa1\x00\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x21\x00\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xa0\x00\xa1\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\x21\x00\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x9f\x00\x73\x00\xa1\x00\x75\x00\xff\xff\x77\x00\xff\xff\x21\x00\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\x9f\x00\x75\x00\xa1\x00\x77\x00\x21\x00\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x9f\x00\x73\x00\xa1\x00\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\x21\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\x98\x00\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\x21\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x96\x00\x97\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\x21\x00\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x96\x00\x97\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\x21\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x97\x00\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\x21\x00\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\x8d\x00\x8e\x00\x8f\x00\x90\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\x21\x00\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x61\x00\x8f\x00\x90\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\x21\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\x90\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x21\x00\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x5c\x00\x36\x00\xff\xff\xff\xff\x90\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\x63\x00\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\x63\x00\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\x21\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x21\x00\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x21\x00\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x66\x00\x21\x00\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x52\x00\x0d\x00\x54\x00\x55\x00\x56\x00\x57\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x52\x00\x0d\x00\x54\x00\x55\x00\x56\x00\x57\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x52\x00\x0d\x00\x54\x00\x55\x00\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\x54\x00\x55\x00\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x3f\x00\x09\x00\xff\xff\x0b\x00\x43\x00\x0d\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\xff\xff\x54\x00\x55\x00\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x37\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x37\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x3f\x00\x11\x00\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\x1d\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\x0e\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\x1d\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\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\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x30\x00\x87\x01\xa5\x00\xa6\x00\x1f\x00\xcd\x01\x74\x00\x31\x00\x32\x00\x33\x00\x34\x00\xa9\x01\x35\x00\xb9\x01\x5c\x01\x1f\x00\x4f\x01\x5d\x01\xad\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\xef\x00\x25\x00\xf0\x00\x26\x00\x70\x00\x27\x00\xac\x01\x21\x01\x06\x00\x74\x00\x36\x00\xba\x01\x37\x00\x38\x00\x39\x00\x76\x00\xaf\x00\x28\x00\x29\x00\x2a\x00\xaf\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x2b\x00\x2c\x00\x42\x00\x43\x00\x1f\x00\x1f\x00\x06\x00\x52\x01\xaf\x00\x44\x00\x74\x00\x2f\x01\x71\x00\x72\x00\x79\x00\x45\x00\x78\x00\x79\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\xb0\x00\x7b\x01\x2e\x00\x4c\x00\x4d\x00\x4e\x00\xf1\x00\x8e\x01\x30\x00\xb1\x00\xfd\x00\x4f\x00\x22\x01\xb1\x00\xf8\x00\x8a\x01\x29\x01\x30\x01\x51\x01\x07\x00\x76\x00\xb0\x00\x08\x00\x06\x00\x09\x00\x70\x00\x0a\x00\x52\x01\x0b\x00\x0c\x00\xb1\x00\x88\x01\xf9\x00\xfa\x00\x0d\x00\x0e\x00\x89\x01\x0f\x00\x95\x01\x10\x00\xfb\x00\x11\x00\x74\x00\xa7\x01\x12\x00\xa3\x01\x4f\x01\x13\x00\x06\x00\x97\x01\x14\x00\x15\x00\xc0\x01\xc1\x01\x16\x00\x17\x00\x18\x00\x19\x00\xa6\x01\x1a\x00\x1b\x00\x6a\x00\x73\x00\x72\x00\x31\x00\x32\x00\x33\x00\x34\x00\x6e\x01\x35\x00\xa7\x00\x12\x00\x50\x00\x1d\x00\x13\x00\x54\x01\x8c\x00\x14\x00\x15\x00\x51\x00\x9f\x01\x16\x00\x17\x00\x18\x00\x19\x00\x27\x01\x1a\x00\x1b\x00\x52\x00\x52\x01\x06\x00\x6b\x00\x6c\x00\x55\x01\x37\x00\x38\x00\x39\x00\x5b\x01\x5c\x01\x9e\x00\x9f\x00\x5d\x01\xad\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x74\x00\x6d\x01\x42\x00\x43\x00\x13\x00\xa5\x01\x06\x00\x14\x00\x15\x00\x44\x00\x60\x01\x16\x00\x17\x00\x18\x00\x19\x00\x45\x00\x1a\x00\x1b\x00\x46\x00\x47\x00\x6d\x00\x49\x00\x4a\x00\x4b\x00\xd4\x00\xd5\x00\x75\x00\x4c\x00\x4d\x00\x4e\x00\x80\x01\x81\x01\x63\x01\x15\x00\x76\x00\x4f\x00\x16\x00\x17\x00\x18\x00\x19\x00\x82\x01\x1a\x00\x1b\x00\x07\x00\x9e\x01\x64\x01\x08\x00\x3a\x01\x09\x00\xfe\x00\x0a\x00\xff\x00\x0b\x00\x0c\x00\xea\x00\xeb\x00\xc4\x00\xc5\x00\x0d\x00\x0e\x00\xe2\x00\x0f\x00\x71\x01\x10\x00\xe5\x00\x11\x00\x29\x01\x5a\x01\x12\x00\xaa\x00\xab\x00\x13\x00\xac\x00\xad\x00\x14\x00\x15\x00\xec\x00\xed\x00\x16\x00\x17\x00\x18\x00\x19\x00\xe8\x00\x1a\x00\x1b\x00\xf8\x00\xc8\x01\x31\x00\x32\x00\x33\x00\x34\x00\x74\x00\x35\x00\x2b\x01\xa2\x01\x2d\x01\x50\x00\x1d\x00\x6c\x01\x3c\x01\x3d\x01\x14\x00\x15\x00\x51\x00\xed\x00\x16\x00\x17\x00\x18\x00\x19\x00\xfd\x00\x1a\x00\x1b\x00\x52\x00\x06\x00\x33\x01\x6c\x00\xf6\x00\x37\x00\x38\x00\x39\x00\xe4\x00\xe5\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\xe7\x00\xe8\x00\x42\x00\x43\x00\x00\x01\x06\x00\x0d\x01\x49\x01\x4a\x01\x44\x00\x4b\x01\x29\x01\x10\x01\x4c\x01\x4d\x01\x45\x00\x4e\x01\x12\x01\x46\x00\x47\x00\x6d\x00\x49\x00\x4a\x00\x4b\x00\x17\x01\x4f\x01\x1c\x01\x4c\x00\x4d\x00\x4e\x00\xc3\x01\xc4\x01\xda\x01\xc6\x01\x1e\x01\x4f\x00\x2a\x01\x20\x01\x2b\x01\x2c\x01\x2d\x01\x34\x01\x35\x01\x07\x00\x55\x00\x56\x00\x08\x00\x24\x01\x09\x00\xb2\x01\x0a\x00\x4b\x01\x0b\x00\x0c\x00\x4c\x01\x4d\x01\x87\x00\x4e\x01\x0d\x00\x0e\x00\x88\x00\x0f\x00\xa0\x00\x10\x00\xa2\x00\x11\x00\x4f\x01\xa4\x00\x12\x00\xd2\x01\x4b\x01\x13\x00\xc1\x00\xb4\x01\x14\x00\x15\x00\xb5\x01\xbf\x00\x16\x00\x17\x00\x18\x00\x19\x00\xc6\x00\x1a\x00\x1b\x00\x4f\x01\xc8\x00\x31\x00\x32\x00\x33\x00\x34\x00\x36\x01\x35\x00\x37\x01\x38\x01\x39\x01\x50\x00\x1d\x00\x3a\x01\xc7\x00\x6b\x01\x15\x00\xca\x00\x51\x00\x16\x00\x17\x00\x18\x00\x19\x00\xc9\x00\x1a\x00\x1b\x00\xcb\x00\x52\x00\x06\x00\xa0\x01\x6c\x00\xcc\x00\x37\x00\x38\x00\x39\x00\xc3\x01\xc4\x01\xc5\x01\xc6\x01\x06\x00\xcd\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\xb3\x01\x4b\x01\x42\x00\x43\x00\xb4\x01\xce\x00\xcf\x00\xb5\x01\xde\x01\x44\x00\xd2\x01\xd4\x01\x05\x00\xc3\x01\xca\x01\x45\x00\x4f\x01\xa2\x00\x46\x00\x47\x00\x6d\x00\x49\x00\x4a\x00\x4b\x00\x67\x00\x68\x00\x69\x00\x4c\x00\x4d\x00\x4e\x00\xd9\x01\xa9\x00\xcf\x01\xaa\x00\xab\x00\x4f\x00\xac\x00\xad\x00\xa8\x00\xa9\x00\x06\x00\xaa\x00\xab\x00\x07\x00\xac\x00\xad\x00\x08\x00\x1f\x00\x09\x00\xa9\x01\x0a\x00\xab\x01\x0b\x00\x0c\x00\x0f\x01\xb2\x01\xbc\x01\x7a\x01\x0d\x00\x0e\x00\x7b\x01\x0f\x00\x7e\x01\x10\x00\x1f\x00\x11\x00\x7d\x01\x7f\x01\x12\x00\xe0\xfe\x85\x01\x13\x00\x84\x01\x87\x01\x14\x00\x15\x00\xf8\x00\x8c\x01\x16\x00\x17\x00\x18\x00\x19\x00\x06\x00\x1a\x00\x1b\x00\xb1\x00\x15\x00\x8d\x01\x8e\x01\x16\x00\x17\x00\x18\x00\x19\x00\x02\x01\x1a\x00\x1b\x00\x50\x00\x1d\x00\x90\x01\x94\x01\x95\x01\xf8\x00\x97\x01\x51\x00\x07\x00\x3c\x01\x99\x01\x08\x00\x9b\x01\x09\x00\x9e\x01\x0a\x00\x52\x00\x0b\x00\x0c\x00\x1f\x00\xa2\x00\xa2\x00\xa2\x01\x0d\x00\x0e\x00\xa5\x01\x0f\x00\x0f\x01\x10\x00\x1f\x00\x11\x00\x29\x01\x31\x01\x12\x00\x1f\x00\x3f\x01\x13\x00\x49\x01\x62\x01\x14\x00\x15\x00\x54\x01\x06\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1f\x00\x1a\x00\x1b\x00\x07\x00\x73\x01\x74\x01\x08\x00\x78\x01\x09\x00\xe1\x00\x0a\x00\xd3\x00\x0b\x00\x0c\x00\x1c\x00\x1d\x00\xe0\x00\xe2\x00\x0d\x00\x0e\x00\xd4\x00\x0f\x00\xf3\x00\x10\x00\xf5\x00\x11\x00\xf2\x00\xf6\x00\x12\x00\xf8\x00\xf9\x00\x13\x00\xaf\x00\x02\x01\x14\x00\x15\x00\x03\x01\x04\x01\x16\x00\x17\x00\x18\x00\x19\x00\x07\x01\x1a\x00\x1b\x00\x05\x01\x08\x01\x8d\x00\x8e\x00\x8f\x00\x06\x00\x90\x00\x91\x00\x09\x01\x0d\x01\x0f\x01\x80\x00\x1d\x00\x10\x01\x07\x00\x12\x01\x14\x01\x08\x00\x19\x01\x09\x00\x15\x01\x0a\x00\x16\x01\x0b\x00\x0c\x00\x17\x01\x1e\x01\x20\x01\x81\x00\x0d\x00\x0e\x00\x14\x01\x0f\x00\x24\x01\x10\x00\x26\x01\x11\x00\xff\xff\x1f\x00\x12\x00\x27\x01\x80\x00\x13\x00\x1f\x00\xa2\x00\x14\x00\x15\x00\xa4\x00\x63\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\x1a\x00\x1b\x00\x06\x00\xc1\x00\x19\x01\xc3\x00\x37\x00\x38\x00\x39\x00\xc4\x00\xff\xff\xd1\x00\x05\x00\x80\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x00\x00\x82\x00\x3d\x01\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x7a\x00\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x01\x00\x00\x62\x01\x07\x00\x7c\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x7a\x00\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x01\x00\x00\x7b\x00\x07\x00\x7c\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x7a\x00\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\x00\x00\x85\x00\x07\x00\x7c\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x31\x01\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x74\x01\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x70\x01\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x6f\x01\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x06\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\xb3\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\xb4\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x01\x00\x00\x00\x00\x07\x00\x00\x00\xdc\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\xdd\x00\xde\x00\xdf\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x06\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb8\x00\x56\x01\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x50\x00\x1d\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x52\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x06\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xbc\x00\x1a\x00\x1b\x00\xbd\x00\x09\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x1d\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x42\x01\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x0a\x01\x1d\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x0b\x01\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x42\x01\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x01\x0a\x01\x1d\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x0b\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x42\x01\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\xdc\x01\xcb\x01\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x42\x01\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\xca\x01\xcb\x01\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x42\x01\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\xb0\x01\x0f\x00\x45\x01\x10\x00\x00\x00\x11\x00\x00\x00\x06\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x44\x01\x10\x00\x45\x01\x11\x00\x06\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x6a\x01\x0f\x00\x45\x01\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x06\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb8\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x06\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\xba\x00\x1d\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x06\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x40\x01\x1d\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x06\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x65\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x06\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x66\x01\x67\x01\x68\x01\x69\x01\x65\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x06\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\xbe\x01\xbd\x01\x69\x01\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x06\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\xbe\x01\x00\x00\x00\x00\x08\x00\xd8\x01\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x06\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x9b\x01\x7d\x00\x00\x00\x00\x00\xbf\x01\x9c\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x7e\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\xde\x01\x00\x00\xd5\x01\xd6\x01\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xdb\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xd0\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\xd4\x01\x00\x00\xd5\x01\xd6\x01\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xc8\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xaf\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xb6\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x78\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x7f\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x85\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x91\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x92\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xf3\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x32\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x57\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x59\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x5e\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x5f\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xf3\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x83\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x84\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x06\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x86\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x06\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xbc\x01\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x06\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\xd1\x00\x06\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x06\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x76\x01\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x75\x01\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb2\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x6f\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x63\x00\x27\x00\x64\x00\x65\x00\x66\x00\x67\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x05\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x63\x00\x27\x00\x64\x00\x65\x00\x66\x00\x67\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x63\x00\x27\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2e\x00\x25\x00\x00\x00\x26\x00\x2f\x00\x27\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x47\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x01\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2d\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x01\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2d\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2e\x00\xe1\xfe\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x5c\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\xb8\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\xbc\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x5c\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\xd8\x01\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\xd8\x01\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = array (3, 332) [+ (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)+ ]++happy_n_terms = 90 :: Int+happy_n_nonterms = 168 :: Int++happyReduce_3 = happySpecReduce_1 0# happyReduction_3+happyReduction_3 happy_x_1+ = happyIn6+ ([]+ )++happyReduce_4 = happySpecReduce_1 0# happyReduction_4+happyReduction_4 happy_x_1+ = case happyOut41 happy_x_1 of { happy_var_1 -> + happyIn6+ (happy_var_1+ )}++happyReduce_5 = happySpecReduce_1 0# happyReduction_5+happyReduction_5 happy_x_1+ = case happyOut80 happy_x_1 of { happy_var_1 -> + happyIn6+ ([happy_var_1]+ )}++happyReduce_6 = happySpecReduce_1 1# happyReduction_6+happyReduction_6 happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + happyIn7+ (Module happy_var_1+ )}++happyReduce_7 = happySpecReduce_1 2# happyReduction_7+happyReduction_7 happy_x_1+ = case happyOut9 happy_x_1 of { happy_var_1 -> + happyIn8+ (concat (reverse happy_var_1)+ )}++happyReduce_8 = happySpecReduce_0 3# happyReduction_8+happyReduction_8 = happyIn9+ ([]+ )++happyReduce_9 = happySpecReduce_2 3# happyReduction_9+happyReduction_9 happy_x_2+ happy_x_1+ = case happyOut9 happy_x_1 of { happy_var_1 -> + case happyOut10 happy_x_2 of { happy_var_2 -> + happyIn9+ (happy_var_2 : happy_var_1+ )}}++happyReduce_10 = happySpecReduce_1 4# happyReduction_10+happyReduction_10 happy_x_1+ = happyIn10+ ([]+ )++happyReduce_11 = happySpecReduce_1 4# happyReduction_11+happyReduction_11 happy_x_1+ = case happyOut40 happy_x_1 of { happy_var_1 -> + happyIn10+ (happy_var_1+ )}++happyReduce_12 = happySpecReduce_2 5# happyReduction_12+happyReduction_12 happy_x_2+ happy_x_1+ = case happyOut156 happy_x_1 of { happy_var_1 -> + happyIn11+ (happy_var_1+ )}++happyReduce_13 = happySpecReduce_0 6# happyReduction_13+happyReduction_13 = happyIn12+ (()+ )++happyReduce_14 = happySpecReduce_2 6# happyReduction_14+happyReduction_14 happy_x_2+ happy_x_1+ = happyIn12+ (()+ )++happyReduce_15 = happyReduce 4# 7# happyReduction_15+happyReduction_15 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut73 happy_x_2 of { happy_var_2 -> + case happyOut164 happy_x_3 of { happy_var_3 -> + happyIn13+ (Decorator { decorator_name = happy_var_2, decorator_args = happy_var_3 }+ ) `HappyStk` happyRest}}++happyReduce_16 = happySpecReduce_1 8# happyReduction_16+happyReduction_16 happy_x_1+ = case happyOut15 happy_x_1 of { happy_var_1 -> + happyIn14+ (reverse happy_var_1+ )}++happyReduce_17 = happySpecReduce_1 9# happyReduction_17+happyReduction_17 happy_x_1+ = case happyOut13 happy_x_1 of { happy_var_1 -> + happyIn15+ ([happy_var_1]+ )}++happyReduce_18 = happySpecReduce_2 9# happyReduction_18+happyReduction_18 happy_x_2+ happy_x_1+ = case happyOut15 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_2 of { happy_var_2 -> + happyIn15+ (happy_var_2 : happy_var_1+ )}}++happyReduce_19 = happySpecReduce_2 10# happyReduction_19+happyReduction_19 happy_x_2+ happy_x_1+ = case happyOut14 happy_x_1 of { happy_var_1 -> + case happyOut17 happy_x_2 of { happy_var_2 -> + happyIn16+ (Decorated { decorated_decorators = happy_var_1, decorated_def = happy_var_2 }+ )}}++happyReduce_20 = happySpecReduce_1 11# happyReduction_20+happyReduction_20 happy_x_1+ = case happyOut163 happy_x_1 of { happy_var_1 -> + happyIn17+ (happy_var_1+ )}++happyReduce_21 = happySpecReduce_1 11# happyReduction_21+happyReduction_21 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn17+ (happy_var_1+ )}++happyReduce_22 = happyReduce 6# 12# happyReduction_22+happyReduction_22 (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 happyOut39 happy_x_2 of { happy_var_2 -> + case happyOut20 happy_x_3 of { happy_var_3 -> + case happyOut19 happy_x_4 of { happy_var_4 -> + case happyOut100 happy_x_6 of { happy_var_6 -> + happyIn18+ (Fun { fun_name = happy_var_2 , fun_args = happy_var_3, fun_result_annotation = happy_var_4, fun_body = happy_var_6 }+ ) `HappyStk` happyRest}}}}++happyReduce_23 = happySpecReduce_0 13# happyReduction_23+happyReduction_23 = happyIn19+ (Nothing+ )++happyReduce_24 = happySpecReduce_2 13# happyReduction_24+happyReduction_24 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_2 of { happy_var_2 -> + happyIn19+ (Just happy_var_2+ )}++happyReduce_25 = happySpecReduce_3 14# happyReduction_25+happyReduction_25 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut21 happy_x_2 of { happy_var_2 -> + happyIn20+ (happy_var_2+ )}++happyReduce_26 = happySpecReduce_1 15# happyReduction_26+happyReduction_26 happy_x_1+ = case happyOut22 happy_x_1 of { happy_var_1 -> + happyIn21+ (happy_var_1+ )}++happyReduce_27 = happySpecReduce_0 16# happyReduction_27+happyReduction_27 = happyIn22+ ([]+ )++happyReduce_28 = happySpecReduce_1 16# happyReduction_28+happyReduction_28 happy_x_1+ = case happyOut28 happy_x_1 of { happy_var_1 -> + happyIn22+ ([happy_var_1]+ )}++happyReduce_29 = happySpecReduce_1 16# happyReduction_29+happyReduction_29 happy_x_1+ = case happyOut30 happy_x_1 of { happy_var_1 -> + happyIn22+ ([happy_var_1]+ )}++happyReduce_30 = happySpecReduce_1 16# happyReduction_30+happyReduction_30 happy_x_1+ = case happyOut27 happy_x_1 of { happy_var_1 -> + happyIn22+ ([happy_var_1]+ )}++happyReduce_31 = happySpecReduce_3 16# happyReduction_31+happyReduction_31 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut27 happy_x_1 of { happy_var_1 -> + case happyOut22 happy_x_3 of { happy_var_3 -> + happyIn22+ (happy_var_1 : happy_var_3+ )}}++happyReduce_32 = happySpecReduce_3 16# happyReduction_32+happyReduction_32 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut28 happy_x_1 of { happy_var_1 -> + case happyOut23 happy_x_3 of { happy_var_3 -> + happyIn22+ (happy_var_1 : happy_var_3+ )}}++happyReduce_33 = happySpecReduce_1 17# happyReduction_33+happyReduction_33 happy_x_1+ = case happyOut27 happy_x_1 of { happy_var_1 -> + happyIn23+ ([happy_var_1]+ )}++happyReduce_34 = happySpecReduce_3 17# happyReduction_34+happyReduction_34 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut27 happy_x_1 of { happy_var_1 -> + case happyOut23 happy_x_3 of { happy_var_3 -> + happyIn23+ (happy_var_1 : happy_var_3+ )}}++happyReduce_35 = happySpecReduce_1 17# happyReduction_35+happyReduction_35 happy_x_1+ = case happyOut30 happy_x_1 of { happy_var_1 -> + happyIn23+ ([happy_var_1]+ )}++happyReduce_36 = happySpecReduce_2 18# happyReduction_36+happyReduction_36 happy_x_2+ happy_x_1+ = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut25 happy_x_2 of { happy_var_2 -> + happyIn24+ ((happy_var_1, happy_var_2)+ )}}++happyReduce_37 = happySpecReduce_0 19# happyReduction_37+happyReduction_37 = happyIn25+ (Nothing+ )++happyReduce_38 = happySpecReduce_2 19# happyReduction_38+happyReduction_38 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_2 of { happy_var_2 -> + happyIn25+ (Just happy_var_2+ )}++happyReduce_39 = happySpecReduce_0 20# happyReduction_39+happyReduction_39 = happyIn26+ (Nothing+ )++happyReduce_40 = happySpecReduce_2 20# happyReduction_40+happyReduction_40 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_2 of { happy_var_2 -> + happyIn26+ (Just happy_var_2+ )}++happyReduce_41 = happySpecReduce_2 21# happyReduction_41+happyReduction_41 happy_x_2+ happy_x_1+ = case happyOut24 happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_2 of { happy_var_2 -> + happyIn27+ (makeParam happy_var_1 happy_var_2+ )}}++happyReduce_42 = happySpecReduce_2 22# happyReduction_42+happyReduction_42 happy_x_2+ happy_x_1+ = case happyOut29 happy_x_2 of { happy_var_2 -> + happyIn28+ (makeStarParam happy_var_2+ )}++happyReduce_43 = happySpecReduce_0 23# happyReduction_43+happyReduction_43 = happyIn29+ (Nothing+ )++happyReduce_44 = happySpecReduce_1 23# happyReduction_44+happyReduction_44 happy_x_1+ = case happyOut24 happy_x_1 of { happy_var_1 -> + happyIn29+ (Just happy_var_1+ )}++happyReduce_45 = happySpecReduce_2 24# happyReduction_45+happyReduction_45 happy_x_2+ happy_x_1+ = case happyOut24 happy_x_2 of { happy_var_2 -> + happyIn30+ (makeStarStarParam happy_var_2+ )}++happyReduce_46 = happySpecReduce_1 25# happyReduction_46+happyReduction_46 happy_x_1+ = case happyOut32 happy_x_1 of { happy_var_1 -> + happyIn31+ (happy_var_1+ )}++happyReduce_47 = happySpecReduce_0 26# happyReduction_47+happyReduction_47 = happyIn32+ ([]+ )++happyReduce_48 = happySpecReduce_1 26# happyReduction_48+happyReduction_48 happy_x_1+ = case happyOut35 happy_x_1 of { happy_var_1 -> + happyIn32+ ([happy_var_1]+ )}++happyReduce_49 = happySpecReduce_1 26# happyReduction_49+happyReduction_49 happy_x_1+ = case happyOut37 happy_x_1 of { happy_var_1 -> + happyIn32+ ([happy_var_1]+ )}++happyReduce_50 = happySpecReduce_1 26# happyReduction_50+happyReduction_50 happy_x_1+ = case happyOut34 happy_x_1 of { happy_var_1 -> + happyIn32+ ([happy_var_1]+ )}++happyReduce_51 = happySpecReduce_3 26# happyReduction_51+happyReduction_51 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut34 happy_x_1 of { happy_var_1 -> + case happyOut32 happy_x_3 of { happy_var_3 -> + happyIn32+ (happy_var_1 : happy_var_3+ )}}++happyReduce_52 = happySpecReduce_3 26# happyReduction_52+happyReduction_52 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut35 happy_x_1 of { happy_var_1 -> + case happyOut33 happy_x_3 of { happy_var_3 -> + happyIn32+ (happy_var_1 : happy_var_3+ )}}++happyReduce_53 = happySpecReduce_1 27# happyReduction_53+happyReduction_53 happy_x_1+ = case happyOut34 happy_x_1 of { happy_var_1 -> + happyIn33+ ([happy_var_1]+ )}++happyReduce_54 = happySpecReduce_3 27# happyReduction_54+happyReduction_54 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut34 happy_x_1 of { happy_var_1 -> + case happyOut33 happy_x_3 of { happy_var_3 -> + happyIn33+ (happy_var_1 : happy_var_3+ )}}++happyReduce_55 = happySpecReduce_1 27# happyReduction_55+happyReduction_55 happy_x_1+ = case happyOut37 happy_x_1 of { happy_var_1 -> + happyIn33+ ([happy_var_1]+ )}++happyReduce_56 = happySpecReduce_2 28# happyReduction_56+happyReduction_56 happy_x_2+ happy_x_1+ = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_2 of { happy_var_2 -> + happyIn34+ (makeParam (happy_var_1, Nothing) happy_var_2+ )}}++happyReduce_57 = happySpecReduce_2 29# happyReduction_57+happyReduction_57 happy_x_2+ happy_x_1+ = case happyOut36 happy_x_2 of { happy_var_2 -> + happyIn35+ (makeStarParam happy_var_2+ )}++happyReduce_58 = happySpecReduce_0 30# happyReduction_58+happyReduction_58 = happyIn36+ (Nothing+ )++happyReduce_59 = happySpecReduce_1 30# happyReduction_59+happyReduction_59 happy_x_1+ = case happyOut38 happy_x_1 of { happy_var_1 -> + happyIn36+ (Just (happy_var_1, Nothing)+ )}++happyReduce_60 = happySpecReduce_2 31# happyReduction_60+happyReduction_60 happy_x_2+ happy_x_1+ = case happyOut38 happy_x_2 of { happy_var_2 -> + happyIn37+ (makeStarStarParam (happy_var_2, Nothing)+ )}++happyReduce_61 = happySpecReduce_1 32# happyReduction_61+happyReduction_61 happy_x_1+ = case happyOutTok happy_x_1 of { (Token.Identifier _ happy_var_1) -> + happyIn38+ (Ident happy_var_1+ )}++happyReduce_62 = happySpecReduce_1 33# happyReduction_62+happyReduction_62 happy_x_1+ = case happyOutTok happy_x_1 of { (Token.Identifier _ happy_var_1) -> + happyIn39+ (Ident happy_var_1+ )}++happyReduce_63 = happySpecReduce_1 34# happyReduction_63+happyReduction_63 happy_x_1+ = case happyOut41 happy_x_1 of { happy_var_1 -> + happyIn40+ (happy_var_1+ )}++happyReduce_64 = happySpecReduce_1 34# happyReduction_64+happyReduction_64 happy_x_1+ = case happyOut80 happy_x_1 of { happy_var_1 -> + happyIn40+ ([happy_var_1]+ )}++happyReduce_65 = happySpecReduce_3 35# happyReduction_65+happyReduction_65 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut43 happy_x_1 of { happy_var_1 -> + happyIn41+ (reverse happy_var_1+ )}++happyReduce_66 = happySpecReduce_0 36# happyReduction_66+happyReduction_66 = happyIn42+ (()+ )++happyReduce_67 = happySpecReduce_1 36# happyReduction_67+happyReduction_67 happy_x_1+ = happyIn42+ (()+ )++happyReduce_68 = happySpecReduce_1 37# happyReduction_68+happyReduction_68 happy_x_1+ = case happyOut44 happy_x_1 of { happy_var_1 -> + happyIn43+ ([happy_var_1]+ )}++happyReduce_69 = happySpecReduce_3 37# happyReduction_69+happyReduction_69 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut43 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn43+ (happy_var_3 : happy_var_1+ )}}++happyReduce_70 = happySpecReduce_1 38# happyReduction_70+happyReduction_70 happy_x_1+ = case happyOut45 happy_x_1 of { happy_var_1 -> + happyIn44+ (happy_var_1+ )}++happyReduce_71 = happySpecReduce_1 38# happyReduction_71+happyReduction_71 happy_x_1+ = case happyOut52 happy_x_1 of { happy_var_1 -> + happyIn44+ (happy_var_1+ )}++happyReduce_72 = happySpecReduce_1 38# happyReduction_72+happyReduction_72 happy_x_1+ = case happyOut53 happy_x_1 of { happy_var_1 -> + happyIn44+ (happy_var_1+ )}++happyReduce_73 = happySpecReduce_1 38# happyReduction_73+happyReduction_73 happy_x_1+ = case happyOut54 happy_x_1 of { happy_var_1 -> + happyIn44+ (happy_var_1+ )}++happyReduce_74 = happySpecReduce_1 38# happyReduction_74+happyReduction_74 happy_x_1+ = case happyOut62 happy_x_1 of { happy_var_1 -> + happyIn44+ (happy_var_1+ )}++happyReduce_75 = happySpecReduce_1 38# happyReduction_75+happyReduction_75 happy_x_1+ = case happyOut75 happy_x_1 of { happy_var_1 -> + happyIn44+ (happy_var_1+ )}++happyReduce_76 = happySpecReduce_1 38# happyReduction_76+happyReduction_76 happy_x_1+ = case happyOut78 happy_x_1 of { happy_var_1 -> + happyIn44+ (happy_var_1+ )}++happyReduce_77 = happySpecReduce_1 38# happyReduction_77+happyReduction_77 happy_x_1+ = case happyOut79 happy_x_1 of { happy_var_1 -> + happyIn44+ (happy_var_1+ )}++happyReduce_78 = happySpecReduce_2 39# happyReduction_78+happyReduction_78 happy_x_2+ happy_x_1+ = case happyOut156 happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_2 of { happy_var_2 -> + happyIn45+ (makeAssignmentOrExpr happy_var_1 happy_var_2+ )}}++happyReduce_79 = happySpecReduce_1 40# happyReduction_79+happyReduction_79 happy_x_1+ = case happyOut47 happy_x_1 of { happy_var_1 -> + happyIn46+ (Left happy_var_1+ )}++happyReduce_80 = happySpecReduce_1 40# happyReduction_80+happyReduction_80 happy_x_1+ = case happyOut50 happy_x_1 of { happy_var_1 -> + happyIn46+ (Right happy_var_1+ )}++happyReduce_81 = happySpecReduce_1 41# happyReduction_81+happyReduction_81 happy_x_1+ = case happyOut48 happy_x_1 of { happy_var_1 -> + happyIn47+ (reverse happy_var_1+ )}++happyReduce_82 = happySpecReduce_0 42# happyReduction_82+happyReduction_82 = happyIn48+ ([]+ )++happyReduce_83 = happySpecReduce_3 42# happyReduction_83+happyReduction_83 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut48 happy_x_1 of { happy_var_1 -> + case happyOut49 happy_x_3 of { happy_var_3 -> + happyIn48+ (happy_var_3 : happy_var_1+ )}}++happyReduce_84 = happySpecReduce_1 43# happyReduction_84+happyReduction_84 happy_x_1+ = case happyOut172 happy_x_1 of { happy_var_1 -> + happyIn49+ (happy_var_1+ )}++happyReduce_85 = happySpecReduce_1 43# happyReduction_85+happyReduction_85 happy_x_1+ = case happyOut156 happy_x_1 of { happy_var_1 -> + happyIn49+ (happy_var_1+ )}++happyReduce_86 = happySpecReduce_2 44# happyReduction_86+happyReduction_86 happy_x_2+ happy_x_1+ = case happyOut51 happy_x_1 of { happy_var_1 -> + case happyOut49 happy_x_2 of { happy_var_2 -> + happyIn50+ ((happy_var_1, happy_var_2)+ )}}++happyReduce_87 = happySpecReduce_1 45# happyReduction_87+happyReduction_87 happy_x_1+ = happyIn51+ (AST.PlusAssign+ )++happyReduce_88 = happySpecReduce_1 45# happyReduction_88+happyReduction_88 happy_x_1+ = happyIn51+ (AST.MinusAssign+ )++happyReduce_89 = happySpecReduce_1 45# happyReduction_89+happyReduction_89 happy_x_1+ = happyIn51+ (AST.MultAssign+ )++happyReduce_90 = happySpecReduce_1 45# happyReduction_90+happyReduction_90 happy_x_1+ = happyIn51+ (AST.DivAssign+ )++happyReduce_91 = happySpecReduce_1 45# happyReduction_91+happyReduction_91 happy_x_1+ = happyIn51+ (AST.ModAssign+ )++happyReduce_92 = happySpecReduce_1 45# happyReduction_92+happyReduction_92 happy_x_1+ = happyIn51+ (AST.PowAssign+ )++happyReduce_93 = happySpecReduce_1 45# happyReduction_93+happyReduction_93 happy_x_1+ = happyIn51+ (AST.BinAndAssign+ )++happyReduce_94 = happySpecReduce_1 45# happyReduction_94+happyReduction_94 happy_x_1+ = happyIn51+ (AST.BinOrAssign+ )++happyReduce_95 = happySpecReduce_1 45# happyReduction_95+happyReduction_95 happy_x_1+ = happyIn51+ (AST.BinXorAssign+ )++happyReduce_96 = happySpecReduce_1 45# happyReduction_96+happyReduction_96 happy_x_1+ = happyIn51+ (AST.LeftShiftAssign+ )++happyReduce_97 = happySpecReduce_1 45# happyReduction_97+happyReduction_97 happy_x_1+ = happyIn51+ (AST.RightShiftAssign+ )++happyReduce_98 = happySpecReduce_1 45# happyReduction_98+happyReduction_98 happy_x_1+ = happyIn51+ (AST.FloorDivAssign+ )++happyReduce_99 = happySpecReduce_2 46# happyReduction_99+happyReduction_99 happy_x_2+ happy_x_1+ = case happyOut153 happy_x_2 of { happy_var_2 -> + happyIn52+ (AST.Delete { del_exprs = happy_var_2 }+ )}++happyReduce_100 = happySpecReduce_1 47# happyReduction_100+happyReduction_100 happy_x_1+ = happyIn53+ (AST.Pass+ )++happyReduce_101 = happySpecReduce_1 48# happyReduction_101+happyReduction_101 happy_x_1+ = case happyOut55 happy_x_1 of { happy_var_1 -> + happyIn54+ (happy_var_1+ )}++happyReduce_102 = happySpecReduce_1 48# happyReduction_102+happyReduction_102 happy_x_1+ = case happyOut56 happy_x_1 of { happy_var_1 -> + happyIn54+ (happy_var_1+ )}++happyReduce_103 = happySpecReduce_1 48# happyReduction_103+happyReduction_103 happy_x_1+ = case happyOut57 happy_x_1 of { happy_var_1 -> + happyIn54+ (happy_var_1+ )}++happyReduce_104 = happySpecReduce_1 48# happyReduction_104+happyReduction_104 happy_x_1+ = case happyOut59 happy_x_1 of { happy_var_1 -> + happyIn54+ (happy_var_1+ )}++happyReduce_105 = happySpecReduce_1 48# happyReduction_105+happyReduction_105 happy_x_1+ = case happyOut58 happy_x_1 of { happy_var_1 -> + happyIn54+ (happy_var_1+ )}++happyReduce_106 = happySpecReduce_1 49# happyReduction_106+happyReduction_106 happy_x_1+ = happyIn55+ (AST.Break+ )++happyReduce_107 = happySpecReduce_1 50# happyReduction_107+happyReduction_107 happy_x_1+ = happyIn56+ (AST.Continue+ )++happyReduce_108 = happySpecReduce_2 51# happyReduction_108+happyReduction_108 happy_x_2+ happy_x_1+ = case happyOut173 happy_x_2 of { happy_var_2 -> + happyIn57+ (AST.Return { return_expr = happy_var_2 }+ )}++happyReduce_109 = happySpecReduce_1 52# happyReduction_109+happyReduction_109 happy_x_1+ = case happyOut172 happy_x_1 of { happy_var_1 -> + happyIn58+ (StmtExpr { stmt_expr = happy_var_1 }+ )}++happyReduce_110 = happySpecReduce_2 53# happyReduction_110+happyReduction_110 happy_x_2+ happy_x_1+ = case happyOut60 happy_x_2 of { happy_var_2 -> + happyIn59+ (AST.Raise { raise_expr = happy_var_2 }+ )}++happyReduce_111 = happySpecReduce_0 54# happyReduction_111+happyReduction_111 = happyIn60+ (Nothing+ )++happyReduce_112 = happySpecReduce_2 54# happyReduction_112+happyReduction_112 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_1 of { happy_var_1 -> + case happyOut61 happy_x_2 of { happy_var_2 -> + happyIn60+ (Just (happy_var_1, happy_var_2)+ )}}++happyReduce_113 = happySpecReduce_0 55# happyReduction_113+happyReduction_113 = happyIn61+ (Nothing+ )++happyReduce_114 = happySpecReduce_2 55# happyReduction_114+happyReduction_114 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_2 of { happy_var_2 -> + happyIn61+ (Just happy_var_2+ )}++happyReduce_115 = happySpecReduce_1 56# happyReduction_115+happyReduction_115 happy_x_1+ = case happyOut69 happy_x_1 of { happy_var_1 -> + happyIn62+ (happy_var_1+ )}++happyReduce_116 = happySpecReduce_1 56# happyReduction_116+happyReduction_116 happy_x_1+ = case happyOut63 happy_x_1 of { happy_var_1 -> + happyIn62+ (happy_var_1+ )}++happyReduce_117 = happyReduce 4# 57# happyReduction_117+happyReduction_117 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut65 happy_x_2 of { happy_var_2 -> + case happyOut64 happy_x_4 of { happy_var_4 -> + happyIn63+ (FromImport { from_module = happy_var_2, from_items = happy_var_4 }+ ) `HappyStk` happyRest}}++happyReduce_118 = happySpecReduce_1 58# happyReduction_118+happyReduction_118 happy_x_1+ = happyIn64+ (ImportEverything+ )++happyReduce_119 = happySpecReduce_3 58# happyReduction_119+happyReduction_119 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut67 happy_x_2 of { happy_var_2 -> + happyIn64+ (happy_var_2+ )}++happyReduce_120 = happySpecReduce_1 58# happyReduction_120+happyReduction_120 happy_x_1+ = case happyOut67 happy_x_1 of { happy_var_1 -> + happyIn64+ (happy_var_1+ )}++happyReduce_121 = happySpecReduce_1 59# happyReduction_121+happyReduction_121 happy_x_1+ = happyIn65+ (ImportDot+ )++happyReduce_122 = happySpecReduce_1 59# happyReduction_122+happyReduction_122 happy_x_1+ = happyIn65+ (ImportRelative (ImportRelative ImportDot)+ )++happyReduce_123 = happySpecReduce_1 59# happyReduction_123+happyReduction_123 happy_x_1+ = case happyOut73 happy_x_1 of { happy_var_1 -> + happyIn65+ (ImportName happy_var_1+ )}++happyReduce_124 = happySpecReduce_2 59# happyReduction_124+happyReduction_124 happy_x_2+ happy_x_1+ = case happyOut65 happy_x_2 of { happy_var_2 -> + happyIn65+ (ImportRelative happy_var_2+ )}++happyReduce_125 = happySpecReduce_2 59# happyReduction_125+happyReduction_125 happy_x_2+ happy_x_1+ = case happyOut65 happy_x_2 of { happy_var_2 -> + happyIn65+ (ImportRelative (ImportRelative (ImportRelative happy_var_2))+ )}++happyReduce_126 = happySpecReduce_2 60# happyReduction_126+happyReduction_126 happy_x_2+ happy_x_1+ = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_2 of { happy_var_2 -> + happyIn66+ (FromItem { from_item_name = happy_var_1, from_as_name = happy_var_2 }+ )}}++happyReduce_127 = happySpecReduce_2 61# happyReduction_127+happyReduction_127 happy_x_2+ happy_x_1+ = case happyOut68 happy_x_1 of { happy_var_1 -> + happyIn67+ (FromItems (reverse happy_var_1)+ )}++happyReduce_128 = happySpecReduce_1 62# happyReduction_128+happyReduction_128 happy_x_1+ = case happyOut66 happy_x_1 of { happy_var_1 -> + happyIn68+ ([happy_var_1]+ )}++happyReduce_129 = happySpecReduce_3 62# happyReduction_129+happyReduction_129 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut68 happy_x_1 of { happy_var_1 -> + case happyOut66 happy_x_3 of { happy_var_3 -> + happyIn68+ (happy_var_3 : happy_var_1+ )}}++happyReduce_130 = happySpecReduce_2 63# happyReduction_130+happyReduction_130 happy_x_2+ happy_x_1+ = case happyOut70 happy_x_2 of { happy_var_2 -> + happyIn69+ (AST.Import { import_items = happy_var_2 }+ )}++happyReduce_131 = happySpecReduce_1 64# happyReduction_131+happyReduction_131 happy_x_1+ = case happyOut71 happy_x_1 of { happy_var_1 -> + happyIn70+ (reverse happy_var_1+ )}++happyReduce_132 = happySpecReduce_1 65# happyReduction_132+happyReduction_132 happy_x_1+ = case happyOut72 happy_x_1 of { happy_var_1 -> + happyIn71+ ([happy_var_1]+ )}++happyReduce_133 = happySpecReduce_3 65# happyReduction_133+happyReduction_133 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut71 happy_x_1 of { happy_var_1 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn71+ (happy_var_3 : happy_var_1+ )}}++happyReduce_134 = happySpecReduce_2 66# happyReduction_134+happyReduction_134 happy_x_2+ happy_x_1+ = case happyOut73 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_2 of { happy_var_2 -> + happyIn72+ (ImportItem { import_item_name = happy_var_1, import_as_name = happy_var_2 }+ )}}++happyReduce_135 = happySpecReduce_2 67# happyReduction_135+happyReduction_135 happy_x_2+ happy_x_1+ = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut74 happy_x_2 of { happy_var_2 -> + happyIn73+ (happy_var_1 : reverse happy_var_2+ )}}++happyReduce_136 = happySpecReduce_0 68# happyReduction_136+happyReduction_136 = happyIn74+ ([]+ )++happyReduce_137 = happySpecReduce_3 68# happyReduction_137+happyReduction_137 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut74 happy_x_1 of { happy_var_1 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn74+ (happy_var_3 : happy_var_1+ )}}++happyReduce_138 = happySpecReduce_2 69# happyReduction_138+happyReduction_138 happy_x_2+ happy_x_1+ = case happyOut76 happy_x_2 of { happy_var_2 -> + happyIn75+ (AST.Global { global_vars = happy_var_2 }+ )}++happyReduce_139 = happySpecReduce_1 70# happyReduction_139+happyReduction_139 happy_x_1+ = case happyOut77 happy_x_1 of { happy_var_1 -> + happyIn76+ (reverse happy_var_1+ )}++happyReduce_140 = happySpecReduce_1 71# happyReduction_140+happyReduction_140 happy_x_1+ = case happyOut39 happy_x_1 of { happy_var_1 -> + happyIn77+ ([happy_var_1]+ )}++happyReduce_141 = happySpecReduce_3 71# happyReduction_141+happyReduction_141 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut77 happy_x_1 of { happy_var_1 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn77+ (happy_var_3 : happy_var_1+ )}}++happyReduce_142 = happySpecReduce_2 72# happyReduction_142+happyReduction_142 happy_x_2+ happy_x_1+ = case happyOut76 happy_x_2 of { happy_var_2 -> + happyIn78+ (AST.NonLocal { nonLocal_vars = happy_var_2 }+ )}++happyReduce_143 = happySpecReduce_2 73# happyReduction_143+happyReduction_143 happy_x_2+ happy_x_1+ = case happyOut157 happy_x_2 of { happy_var_2 -> + happyIn79+ (AST.Assert { assert_exprs = reverse happy_var_2 }+ )}++happyReduce_144 = happySpecReduce_1 74# happyReduction_144+happyReduction_144 happy_x_1+ = case happyOut81 happy_x_1 of { happy_var_1 -> + happyIn80+ (happy_var_1+ )}++happyReduce_145 = happySpecReduce_1 74# happyReduction_145+happyReduction_145 happy_x_1+ = case happyOut87 happy_x_1 of { happy_var_1 -> + happyIn80+ (happy_var_1+ )}++happyReduce_146 = happySpecReduce_1 74# happyReduction_146+happyReduction_146 happy_x_1+ = case happyOut88 happy_x_1 of { happy_var_1 -> + happyIn80+ (happy_var_1+ )}++happyReduce_147 = happySpecReduce_1 74# happyReduction_147+happyReduction_147 happy_x_1+ = case happyOut89 happy_x_1 of { happy_var_1 -> + happyIn80+ (happy_var_1+ )}++happyReduce_148 = happySpecReduce_1 74# happyReduction_148+happyReduction_148 happy_x_1+ = case happyOut95 happy_x_1 of { happy_var_1 -> + happyIn80+ (happy_var_1+ )}++happyReduce_149 = happySpecReduce_1 74# happyReduction_149+happyReduction_149 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn80+ (happy_var_1+ )}++happyReduce_150 = happySpecReduce_1 74# happyReduction_150+happyReduction_150 happy_x_1+ = case happyOut163 happy_x_1 of { happy_var_1 -> + happyIn80+ (happy_var_1+ )}++happyReduce_151 = happySpecReduce_1 74# happyReduction_151+happyReduction_151 happy_x_1+ = case happyOut16 happy_x_1 of { happy_var_1 -> + happyIn80+ (happy_var_1+ )}++happyReduce_152 = happySpecReduce_2 75# happyReduction_152+happyReduction_152 happy_x_2+ happy_x_1+ = case happyOut82 happy_x_1 of { happy_var_1 -> + case happyOut86 happy_x_2 of { happy_var_2 -> + happyIn81+ (Conditional { cond_guards = happy_var_1, cond_else = happy_var_2 }+ )}}++happyReduce_153 = happySpecReduce_2 76# happyReduction_153+happyReduction_153 happy_x_2+ happy_x_1+ = case happyOut83 happy_x_1 of { happy_var_1 -> + case happyOut84 happy_x_2 of { happy_var_2 -> + happyIn82+ (happy_var_1 : happy_var_2+ )}}++happyReduce_154 = happyReduce 4# 77# happyReduction_154+happyReduction_154 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut103 happy_x_2 of { happy_var_2 -> + case happyOut100 happy_x_4 of { happy_var_4 -> + happyIn83+ ((happy_var_2, happy_var_4)+ ) `HappyStk` happyRest}}++happyReduce_155 = happySpecReduce_1 78# happyReduction_155+happyReduction_155 happy_x_1+ = case happyOut85 happy_x_1 of { happy_var_1 -> + happyIn84+ (reverse happy_var_1+ )}++happyReduce_156 = happySpecReduce_0 79# happyReduction_156+happyReduction_156 = happyIn85+ ([]+ )++happyReduce_157 = happyReduce 5# 79# happyReduction_157+happyReduction_157 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut85 happy_x_1 of { happy_var_1 -> + case happyOut103 happy_x_3 of { happy_var_3 -> + case happyOut100 happy_x_5 of { happy_var_5 -> + happyIn85+ ((happy_var_3, happy_var_5) : happy_var_1+ ) `HappyStk` happyRest}}}++happyReduce_158 = happySpecReduce_0 80# happyReduction_158+happyReduction_158 = happyIn86+ ([]+ )++happyReduce_159 = happySpecReduce_3 80# happyReduction_159+happyReduction_159 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut100 happy_x_3 of { happy_var_3 -> + happyIn86+ (happy_var_3+ )}++happyReduce_160 = happyReduce 5# 81# happyReduction_160+happyReduction_160 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut103 happy_x_2 of { happy_var_2 -> + case happyOut100 happy_x_4 of { happy_var_4 -> + case happyOut86 happy_x_5 of { happy_var_5 -> + happyIn87+ (AST.While { while_cond = happy_var_2 , while_body = happy_var_4, while_else = happy_var_5 }+ ) `HappyStk` happyRest}}}++happyReduce_161 = happyReduce 7# 82# happyReduction_161+happyReduction_161 (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 happyOut153 happy_x_2 of { happy_var_2 -> + case happyOut156 happy_x_4 of { happy_var_4 -> + case happyOut100 happy_x_6 of { happy_var_6 -> + case happyOut86 happy_x_7 of { happy_var_7 -> + happyIn88+ (AST.For { for_targets = happy_var_2, for_generator = happy_var_4, for_body = happy_var_6, for_else = happy_var_7 }+ ) `HappyStk` happyRest}}}}++happyReduce_162 = happyReduce 4# 83# happyReduction_162+happyReduction_162 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut100 happy_x_3 of { happy_var_3 -> + case happyOut90 happy_x_4 of { happy_var_4 -> + happyIn89+ (makeTry happy_var_3 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_163 = happySpecReduce_3 84# happyReduction_163+happyReduction_163 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut92 happy_x_1 of { happy_var_1 -> + case happyOut86 happy_x_2 of { happy_var_2 -> + case happyOut91 happy_x_3 of { happy_var_3 -> + happyIn90+ ((happy_var_1, happy_var_2, happy_var_3)+ )}}}++happyReduce_164 = happySpecReduce_3 84# happyReduction_164+happyReduction_164 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut100 happy_x_3 of { happy_var_3 -> + happyIn90+ (([], [], happy_var_3)+ )}++happyReduce_165 = happySpecReduce_0 85# happyReduction_165+happyReduction_165 = happyIn91+ ([]+ )++happyReduce_166 = happySpecReduce_3 85# happyReduction_166+happyReduction_166 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut100 happy_x_3 of { happy_var_3 -> + happyIn91+ (happy_var_3+ )}++happyReduce_167 = happySpecReduce_1 86# happyReduction_167+happyReduction_167 happy_x_1+ = case happyOut93 happy_x_1 of { happy_var_1 -> + happyIn92+ (reverse happy_var_1+ )}++happyReduce_168 = happySpecReduce_1 87# happyReduction_168+happyReduction_168 happy_x_1+ = case happyOut94 happy_x_1 of { happy_var_1 -> + happyIn93+ ([happy_var_1]+ )}++happyReduce_169 = happySpecReduce_2 87# happyReduction_169+happyReduction_169 happy_x_2+ happy_x_1+ = case happyOut93 happy_x_1 of { happy_var_1 -> + case happyOut94 happy_x_2 of { happy_var_2 -> + happyIn93+ (happy_var_2 : happy_var_1+ )}}++happyReduce_170 = happySpecReduce_3 88# happyReduction_170+happyReduction_170 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut97 happy_x_1 of { happy_var_1 -> + case happyOut100 happy_x_3 of { happy_var_3 -> + happyIn94+ ((happy_var_1, happy_var_3)+ )}}++happyReduce_171 = happyReduce 5# 89# happyReduction_171+happyReduction_171 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut103 happy_x_2 of { happy_var_2 -> + case happyOut96 happy_x_3 of { happy_var_3 -> + case happyOut100 happy_x_5 of { happy_var_5 -> + happyIn95+ (AST.With { with_context = happy_var_2, with_as = happy_var_3, with_body = happy_var_5 }+ ) `HappyStk` happyRest}}}++happyReduce_172 = happySpecReduce_0 90# happyReduction_172+happyReduction_172 = happyIn96+ (Nothing+ )++happyReduce_173 = happySpecReduce_2 90# happyReduction_173+happyReduction_173 happy_x_2+ happy_x_1+ = case happyOut119 happy_x_2 of { happy_var_2 -> + happyIn96+ (Just happy_var_2+ )}++happyReduce_174 = happySpecReduce_2 91# happyReduction_174+happyReduction_174 happy_x_2+ happy_x_1+ = case happyOut98 happy_x_2 of { happy_var_2 -> + happyIn97+ (happy_var_2+ )}++happyReduce_175 = happySpecReduce_0 92# happyReduction_175+happyReduction_175 = happyIn98+ (Nothing+ )++happyReduce_176 = happySpecReduce_2 92# happyReduction_176+happyReduction_176 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_2 of { happy_var_2 -> + happyIn98+ (Just (happy_var_1, happy_var_2)+ )}}++happyReduce_177 = happySpecReduce_0 93# happyReduction_177+happyReduction_177 = happyIn99+ (Nothing+ )++happyReduce_178 = happySpecReduce_2 93# happyReduction_178+happyReduction_178 happy_x_2+ happy_x_1+ = case happyOut39 happy_x_2 of { happy_var_2 -> + happyIn99+ (Just happy_var_2+ )}++happyReduce_179 = happySpecReduce_1 94# happyReduction_179+happyReduction_179 happy_x_1+ = case happyOut41 happy_x_1 of { happy_var_1 -> + happyIn100+ (happy_var_1+ )}++happyReduce_180 = happySpecReduce_3 94# happyReduction_180+happyReduction_180 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut101 happy_x_2 of { happy_var_2 -> + happyIn100+ (happy_var_2+ )}++happyReduce_181 = happySpecReduce_1 95# happyReduction_181+happyReduction_181 happy_x_1+ = case happyOut102 happy_x_1 of { happy_var_1 -> + happyIn101+ (reverse (concat happy_var_1)+ )}++happyReduce_182 = happySpecReduce_1 96# happyReduction_182+happyReduction_182 happy_x_1+ = case happyOut40 happy_x_1 of { happy_var_1 -> + happyIn102+ ([happy_var_1]+ )}++happyReduce_183 = happySpecReduce_2 96# happyReduction_183+happyReduction_183 happy_x_2+ happy_x_1+ = case happyOut102 happy_x_1 of { happy_var_1 -> + case happyOut40 happy_x_2 of { happy_var_2 -> + happyIn102+ (happy_var_2 : happy_var_1+ )}}++happyReduce_184 = happySpecReduce_2 97# happyReduction_184+happyReduction_184 happy_x_2+ happy_x_1+ = case happyOut108 happy_x_1 of { happy_var_1 -> + case happyOut104 happy_x_2 of { happy_var_2 -> + happyIn103+ (makeConditionalExpr happy_var_1 happy_var_2+ )}}++happyReduce_185 = happySpecReduce_1 97# happyReduction_185+happyReduction_185 happy_x_1+ = case happyOut106 happy_x_1 of { happy_var_1 -> + happyIn103+ (happy_var_1+ )}++happyReduce_186 = happySpecReduce_0 98# happyReduction_186+happyReduction_186 = happyIn104+ (Nothing+ )++happyReduce_187 = happyReduce 4# 98# happyReduction_187+happyReduction_187 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut108 happy_x_2 of { happy_var_2 -> + case happyOut103 happy_x_4 of { happy_var_4 -> + happyIn104+ (Just (happy_var_2, happy_var_4)+ ) `HappyStk` happyRest}}++happyReduce_188 = happySpecReduce_1 99# happyReduction_188+happyReduction_188 happy_x_1+ = case happyOut108 happy_x_1 of { happy_var_1 -> + happyIn105+ (happy_var_1+ )}++happyReduce_189 = happySpecReduce_1 99# happyReduction_189+happyReduction_189 happy_x_1+ = case happyOut107 happy_x_1 of { happy_var_1 -> + happyIn105+ (happy_var_1+ )}++happyReduce_190 = happyReduce 4# 100# happyReduction_190+happyReduction_190 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut31 happy_x_2 of { happy_var_2 -> + case happyOut103 happy_x_4 of { happy_var_4 -> + happyIn106+ (AST.Lambda happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_191 = happyReduce 4# 101# happyReduction_191+happyReduction_191 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut31 happy_x_2 of { happy_var_2 -> + case happyOut105 happy_x_4 of { happy_var_4 -> + happyIn107+ (AST.Lambda happy_var_2 happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_192 = happySpecReduce_2 102# happyReduction_192+happyReduction_192 happy_x_2+ happy_x_1+ = case happyOut110 happy_x_1 of { happy_var_1 -> + case happyOut109 happy_x_2 of { happy_var_2 -> + happyIn108+ (makeBinOp happy_var_1 happy_var_2+ )}}++happyReduce_193 = happySpecReduce_0 103# happyReduction_193+happyReduction_193 = happyIn109+ ([]+ )++happyReduce_194 = happySpecReduce_3 103# happyReduction_194+happyReduction_194 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut109 happy_x_1 of { happy_var_1 -> + case happyOut110 happy_x_3 of { happy_var_3 -> + happyIn109+ ((AST.Or, happy_var_3) : happy_var_1+ )}}++happyReduce_195 = happySpecReduce_2 104# happyReduction_195+happyReduction_195 happy_x_2+ happy_x_1+ = case happyOut112 happy_x_1 of { happy_var_1 -> + case happyOut111 happy_x_2 of { happy_var_2 -> + happyIn110+ (makeBinOp happy_var_1 happy_var_2+ )}}++happyReduce_196 = happySpecReduce_0 105# happyReduction_196+happyReduction_196 = happyIn111+ ([]+ )++happyReduce_197 = happySpecReduce_3 105# happyReduction_197+happyReduction_197 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut111 happy_x_1 of { happy_var_1 -> + case happyOut112 happy_x_3 of { happy_var_3 -> + happyIn111+ ((AST.And, happy_var_3) : happy_var_1+ )}}++happyReduce_198 = happySpecReduce_2 106# happyReduction_198+happyReduction_198 happy_x_2+ happy_x_1+ = case happyOut112 happy_x_2 of { happy_var_2 -> + happyIn112+ (UnaryOp {operator = AST.Not, op_arg = happy_var_2}+ )}++happyReduce_199 = happySpecReduce_1 106# happyReduction_199+happyReduction_199 happy_x_1+ = case happyOut113 happy_x_1 of { happy_var_1 -> + happyIn112+ (happy_var_1+ )}++happyReduce_200 = happySpecReduce_2 107# happyReduction_200+happyReduction_200 happy_x_2+ happy_x_1+ = case happyOut118 happy_x_1 of { happy_var_1 -> + case happyOut114 happy_x_2 of { happy_var_2 -> + happyIn113+ (makeBinOp happy_var_1 happy_var_2+ )}}++happyReduce_201 = happySpecReduce_0 108# happyReduction_201+happyReduction_201 = happyIn114+ ([]+ )++happyReduce_202 = happySpecReduce_3 108# happyReduction_202+happyReduction_202 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut114 happy_x_1 of { happy_var_1 -> + case happyOut115 happy_x_2 of { happy_var_2 -> + case happyOut118 happy_x_3 of { happy_var_3 -> + happyIn114+ ((happy_var_2, happy_var_3) : happy_var_1+ )}}}++happyReduce_203 = happySpecReduce_1 109# happyReduction_203+happyReduction_203 happy_x_1+ = happyIn115+ (AST.LessThan+ )++happyReduce_204 = happySpecReduce_1 109# happyReduction_204+happyReduction_204 happy_x_1+ = happyIn115+ (AST.GreaterThan+ )++happyReduce_205 = happySpecReduce_1 109# happyReduction_205+happyReduction_205 happy_x_1+ = happyIn115+ (AST.Equality+ )++happyReduce_206 = happySpecReduce_1 109# happyReduction_206+happyReduction_206 happy_x_1+ = happyIn115+ (AST.GreaterThanEquals+ )++happyReduce_207 = happySpecReduce_1 109# happyReduction_207+happyReduction_207 happy_x_1+ = happyIn115+ (AST.LessThanEquals+ )++happyReduce_208 = happySpecReduce_1 109# happyReduction_208+happyReduction_208 happy_x_1+ = happyIn115+ (AST.NotEquals+ )++happyReduce_209 = happySpecReduce_1 109# happyReduction_209+happyReduction_209 happy_x_1+ = happyIn115+ (AST.In+ )++happyReduce_210 = happySpecReduce_2 109# happyReduction_210+happyReduction_210 happy_x_2+ happy_x_1+ = happyIn115+ (AST.NotIn+ )++happyReduce_211 = happySpecReduce_1 109# happyReduction_211+happyReduction_211 happy_x_1+ = case happyOut116 happy_x_1 of { happy_var_1 -> + happyIn115+ (happy_var_1+ )}++happyReduce_212 = happySpecReduce_2 110# happyReduction_212+happyReduction_212 happy_x_2+ happy_x_1+ = case happyOut117 happy_x_2 of { happy_var_2 -> + happyIn116+ (happy_var_2+ )}++happyReduce_213 = happySpecReduce_0 111# happyReduction_213+happyReduction_213 = happyIn117+ (AST.Is+ )++happyReduce_214 = happySpecReduce_1 111# happyReduction_214+happyReduction_214 happy_x_1+ = happyIn117+ (AST.IsNot+ )++happyReduce_215 = happySpecReduce_1 112# happyReduction_215+happyReduction_215 happy_x_1+ = case happyOut119 happy_x_1 of { happy_var_1 -> + happyIn118+ (happy_var_1+ )}++happyReduce_216 = happySpecReduce_2 113# happyReduction_216+happyReduction_216 happy_x_2+ happy_x_1+ = case happyOut121 happy_x_1 of { happy_var_1 -> + case happyOut120 happy_x_2 of { happy_var_2 -> + happyIn119+ (makeBinOp happy_var_1 happy_var_2+ )}}++happyReduce_217 = happySpecReduce_0 114# happyReduction_217+happyReduction_217 = happyIn120+ ([]+ )++happyReduce_218 = happySpecReduce_3 114# happyReduction_218+happyReduction_218 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut120 happy_x_1 of { happy_var_1 -> + case happyOut121 happy_x_3 of { happy_var_3 -> + happyIn120+ ((AST.BinaryOr, happy_var_3) : happy_var_1+ )}}++happyReduce_219 = happySpecReduce_2 115# happyReduction_219+happyReduction_219 happy_x_2+ happy_x_1+ = case happyOut123 happy_x_1 of { happy_var_1 -> + case happyOut122 happy_x_2 of { happy_var_2 -> + happyIn121+ (makeBinOp happy_var_1 happy_var_2+ )}}++happyReduce_220 = happySpecReduce_0 116# happyReduction_220+happyReduction_220 = happyIn122+ ([]+ )++happyReduce_221 = happySpecReduce_3 116# happyReduction_221+happyReduction_221 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut122 happy_x_1 of { happy_var_1 -> + case happyOut123 happy_x_3 of { happy_var_3 -> + happyIn122+ ((AST.Xor, happy_var_3) : happy_var_1+ )}}++happyReduce_222 = happySpecReduce_2 117# happyReduction_222+happyReduction_222 happy_x_2+ happy_x_1+ = case happyOut125 happy_x_1 of { happy_var_1 -> + case happyOut124 happy_x_2 of { happy_var_2 -> + happyIn123+ (makeBinOp happy_var_1 happy_var_2+ )}}++happyReduce_223 = happySpecReduce_0 118# happyReduction_223+happyReduction_223 = happyIn124+ ([]+ )++happyReduce_224 = happySpecReduce_3 118# happyReduction_224+happyReduction_224 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut124 happy_x_1 of { happy_var_1 -> + case happyOut125 happy_x_3 of { happy_var_3 -> + happyIn124+ ((AST.BinaryAnd, happy_var_3) : happy_var_1+ )}}++happyReduce_225 = happySpecReduce_2 119# happyReduction_225+happyReduction_225 happy_x_2+ happy_x_1+ = case happyOut128 happy_x_1 of { happy_var_1 -> + case happyOut126 happy_x_2 of { happy_var_2 -> + happyIn125+ (makeBinOp happy_var_1 happy_var_2+ )}}++happyReduce_226 = happySpecReduce_0 120# happyReduction_226+happyReduction_226 = happyIn126+ ([]+ )++happyReduce_227 = happySpecReduce_3 120# happyReduction_227+happyReduction_227 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut126 happy_x_1 of { happy_var_1 -> + case happyOut127 happy_x_2 of { happy_var_2 -> + case happyOut128 happy_x_3 of { happy_var_3 -> + happyIn126+ ((happy_var_2, happy_var_3) : happy_var_1+ )}}}++happyReduce_228 = happySpecReduce_1 121# happyReduction_228+happyReduction_228 happy_x_1+ = happyIn127+ (AST.ShiftLeft+ )++happyReduce_229 = happySpecReduce_1 121# happyReduction_229+happyReduction_229 happy_x_1+ = happyIn127+ (AST.ShiftRight+ )++happyReduce_230 = happySpecReduce_2 122# happyReduction_230+happyReduction_230 happy_x_2+ happy_x_1+ = case happyOut131 happy_x_1 of { happy_var_1 -> + case happyOut129 happy_x_2 of { happy_var_2 -> + happyIn128+ (makeBinOp happy_var_1 happy_var_2+ )}}++happyReduce_231 = happySpecReduce_0 123# happyReduction_231+happyReduction_231 = happyIn129+ ([]+ )++happyReduce_232 = happySpecReduce_3 123# happyReduction_232+happyReduction_232 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut129 happy_x_1 of { happy_var_1 -> + case happyOut130 happy_x_2 of { happy_var_2 -> + case happyOut131 happy_x_3 of { happy_var_3 -> + happyIn129+ ((happy_var_2, happy_var_3) : happy_var_1+ )}}}++happyReduce_233 = happySpecReduce_1 124# happyReduction_233+happyReduction_233 happy_x_1+ = happyIn130+ (AST.Plus+ )++happyReduce_234 = happySpecReduce_1 124# happyReduction_234+happyReduction_234 happy_x_1+ = happyIn130+ (AST.Minus+ )++happyReduce_235 = happySpecReduce_2 125# happyReduction_235+happyReduction_235 happy_x_2+ happy_x_1+ = case happyOut134 happy_x_1 of { happy_var_1 -> + case happyOut132 happy_x_2 of { happy_var_2 -> + happyIn131+ (makeBinOp happy_var_1 happy_var_2+ )}}++happyReduce_236 = happySpecReduce_0 126# happyReduction_236+happyReduction_236 = happyIn132+ ([]+ )++happyReduce_237 = happySpecReduce_3 126# happyReduction_237+happyReduction_237 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut132 happy_x_1 of { happy_var_1 -> + case happyOut133 happy_x_2 of { happy_var_2 -> + case happyOut134 happy_x_3 of { happy_var_3 -> + happyIn132+ ((happy_var_2, happy_var_3) : happy_var_1+ )}}}++happyReduce_238 = happySpecReduce_1 127# happyReduction_238+happyReduction_238 happy_x_1+ = happyIn133+ (AST.Multiply+ )++happyReduce_239 = happySpecReduce_1 127# happyReduction_239+happyReduction_239 happy_x_1+ = happyIn133+ (AST.Divide+ )++happyReduce_240 = happySpecReduce_1 127# happyReduction_240+happyReduction_240 happy_x_1+ = happyIn133+ (AST.Modulo+ )++happyReduce_241 = happySpecReduce_1 127# happyReduction_241+happyReduction_241 happy_x_1+ = happyIn133+ (AST.FloorDivide+ )++happyReduce_242 = happySpecReduce_2 128# happyReduction_242+happyReduction_242 happy_x_2+ happy_x_1+ = case happyOut134 happy_x_2 of { happy_var_2 -> + happyIn134+ (UnaryOp { operator = AST.Plus, op_arg = happy_var_2 }+ )}++happyReduce_243 = happySpecReduce_2 128# happyReduction_243+happyReduction_243 happy_x_2+ happy_x_1+ = case happyOut134 happy_x_2 of { happy_var_2 -> + happyIn134+ (UnaryOp { operator = AST.Minus, op_arg = happy_var_2 }+ )}++happyReduce_244 = happySpecReduce_2 128# happyReduction_244+happyReduction_244 happy_x_2+ happy_x_1+ = case happyOut134 happy_x_2 of { happy_var_2 -> + happyIn134+ (UnaryOp { operator = AST.Invert, op_arg = happy_var_2 }+ )}++happyReduce_245 = happySpecReduce_1 128# happyReduction_245+happyReduction_245 happy_x_1+ = case happyOut135 happy_x_1 of { happy_var_1 -> + happyIn134+ (happy_var_1+ )}++happyReduce_246 = happySpecReduce_2 129# happyReduction_246+happyReduction_246 happy_x_2+ happy_x_1+ = case happyOut138 happy_x_1 of { happy_var_1 -> + case happyOut136 happy_x_2 of { happy_var_2 -> + happyIn135+ (addTrailer happy_var_1 happy_var_2+ )}}++happyReduce_247 = happyReduce 4# 129# happyReduction_247+happyReduction_247 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut138 happy_x_1 of { happy_var_1 -> + case happyOut136 happy_x_2 of { happy_var_2 -> + case happyOut134 happy_x_4 of { happy_var_4 -> + happyIn135+ (makeBinOp (addTrailer happy_var_1 happy_var_2) [(AST.Exponent, happy_var_4)]+ ) `HappyStk` happyRest}}}++happyReduce_248 = happySpecReduce_1 130# happyReduction_248+happyReduction_248 happy_x_1+ = case happyOut137 happy_x_1 of { happy_var_1 -> + happyIn136+ (reverse happy_var_1+ )}++happyReduce_249 = happySpecReduce_0 131# happyReduction_249+happyReduction_249 = happyIn137+ ([]+ )++happyReduce_250 = happySpecReduce_2 131# happyReduction_250+happyReduction_250 happy_x_2+ happy_x_1+ = case happyOut137 happy_x_1 of { happy_var_1 -> + case happyOut146 happy_x_2 of { happy_var_2 -> + happyIn137+ (happy_var_2 : happy_var_1+ )}}++happyReduce_251 = happySpecReduce_1 132# happyReduction_251+happyReduction_251 happy_x_1+ = case happyOut139 happy_x_1 of { happy_var_1 -> + happyIn138+ (happy_var_1+ )}++happyReduce_252 = happySpecReduce_1 132# happyReduction_252+happyReduction_252 happy_x_1+ = case happyOut140 happy_x_1 of { happy_var_1 -> + happyIn138+ (happy_var_1+ )}++happyReduce_253 = happySpecReduce_1 132# happyReduction_253+happyReduction_253 happy_x_1+ = case happyOut141 happy_x_1 of { happy_var_1 -> + happyIn138+ (happy_var_1+ )}++happyReduce_254 = happySpecReduce_1 132# happyReduction_254+happyReduction_254 happy_x_1+ = case happyOut39 happy_x_1 of { happy_var_1 -> + happyIn138+ (AST.Var happy_var_1+ )}++happyReduce_255 = happySpecReduce_1 132# happyReduction_255+happyReduction_255 happy_x_1+ = case happyOutTok happy_x_1 of { (Token.Integer _ happy_var_1) -> + happyIn138+ (AST.Int happy_var_1+ )}++happyReduce_256 = happySpecReduce_1 132# happyReduction_256+happyReduction_256 happy_x_1+ = case happyOutTok happy_x_1 of { (Token.Float _ happy_var_1) -> + happyIn138+ (AST.Float happy_var_1+ )}++happyReduce_257 = happySpecReduce_1 132# happyReduction_257+happyReduction_257 happy_x_1+ = case happyOutTok happy_x_1 of { (Token.Imaginary _ happy_var_1) -> + happyIn138+ (AST.Imaginary { imaginary_value = happy_var_1 }+ )}++happyReduce_258 = happySpecReduce_1 132# happyReduction_258+happyReduction_258 happy_x_1+ = case happyOut143 happy_x_1 of { happy_var_1 -> + happyIn138+ (AST.Strings (reverse happy_var_1)+ )}++happyReduce_259 = happySpecReduce_1 132# happyReduction_259+happyReduction_259 happy_x_1+ = case happyOut144 happy_x_1 of { happy_var_1 -> + happyIn138+ (AST.ByteStrings (reverse happy_var_1)+ )}++happyReduce_260 = happySpecReduce_1 132# happyReduction_260+happyReduction_260 happy_x_1+ = happyIn138+ (AST.Ellipsis+ )++happyReduce_261 = happySpecReduce_1 132# happyReduction_261+happyReduction_261 happy_x_1+ = happyIn138+ (AST.None+ )++happyReduce_262 = happySpecReduce_1 132# happyReduction_262+happyReduction_262 happy_x_1+ = happyIn138+ (AST.Bool Prelude.True+ )++happyReduce_263 = happySpecReduce_1 132# happyReduction_263+happyReduction_263 happy_x_1+ = happyIn138+ (AST.Bool Prelude.False+ )++happyReduce_264 = happySpecReduce_3 133# happyReduction_264+happyReduction_264 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut142 happy_x_2 of { happy_var_2 -> + happyIn139+ (happy_var_2+ )}++happyReduce_265 = happySpecReduce_2 134# happyReduction_265+happyReduction_265 happy_x_2+ happy_x_1+ = happyIn140+ (List { list_exprs = [] }+ )++happyReduce_266 = happySpecReduce_3 134# happyReduction_266+happyReduction_266 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut145 happy_x_2 of { happy_var_2 -> + happyIn140+ (makeListForm happy_var_2+ )}++happyReduce_267 = happySpecReduce_2 135# happyReduction_267+happyReduction_267 happy_x_2+ happy_x_1+ = happyIn141+ (Dictionary { dict_mappings = [] }+ )++happyReduce_268 = happySpecReduce_3 135# happyReduction_268+happyReduction_268 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut158 happy_x_2 of { happy_var_2 -> + happyIn141+ (happy_var_2+ )}++happyReduce_269 = happySpecReduce_0 136# happyReduction_269+happyReduction_269 = happyIn142+ (Tuple { tuple_exprs = [] }+ )++happyReduce_270 = happySpecReduce_1 136# happyReduction_270+happyReduction_270 happy_x_1+ = case happyOut172 happy_x_1 of { happy_var_1 -> + happyIn142+ (happy_var_1+ )}++happyReduce_271 = happySpecReduce_1 136# happyReduction_271+happyReduction_271 happy_x_1+ = case happyOut145 happy_x_1 of { happy_var_1 -> + happyIn142+ (either id (\c -> Generator { gen_comprehension = c }) happy_var_1+ )}++happyReduce_272 = happySpecReduce_1 137# happyReduction_272+happyReduction_272 happy_x_1+ = case happyOutTok happy_x_1 of { (Token.String _ happy_var_1) -> + happyIn143+ ([happy_var_1]+ )}++happyReduce_273 = happySpecReduce_2 137# happyReduction_273+happyReduction_273 happy_x_2+ happy_x_1+ = case happyOut143 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Token.String _ happy_var_2) -> + happyIn143+ (happy_var_2 : happy_var_1+ )}}++happyReduce_274 = happySpecReduce_1 138# happyReduction_274+happyReduction_274 happy_x_1+ = case happyOutTok happy_x_1 of { (Token.ByteString _ happy_var_1) -> + happyIn144+ ([happy_var_1]+ )}++happyReduce_275 = happySpecReduce_2 138# happyReduction_275+happyReduction_275 happy_x_2+ happy_x_1+ = case happyOut144 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Token.ByteString _ happy_var_2) -> + happyIn144+ (happy_var_2 : happy_var_1+ )}}++happyReduce_276 = happySpecReduce_1 139# happyReduction_276+happyReduction_276 happy_x_1+ = case happyOut156 happy_x_1 of { happy_var_1 -> + happyIn145+ (Left happy_var_1+ )}++happyReduce_277 = happySpecReduce_2 139# happyReduction_277+happyReduction_277 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_1 of { happy_var_1 -> + case happyOut169 happy_x_2 of { happy_var_2 -> + happyIn145+ (Right (makeComprehension happy_var_1 happy_var_2)+ )}}++happyReduce_278 = happySpecReduce_3 140# happyReduction_278+happyReduction_278 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut165 happy_x_2 of { happy_var_2 -> + happyIn146+ (TrailerCall happy_var_2+ )}++happyReduce_279 = happySpecReduce_3 140# happyReduction_279+happyReduction_279 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut147 happy_x_2 of { happy_var_2 -> + happyIn146+ (TrailerSubscript happy_var_2+ )}++happyReduce_280 = happySpecReduce_2 140# happyReduction_280+happyReduction_280 happy_x_2+ happy_x_1+ = case happyOut39 happy_x_2 of { happy_var_2 -> + happyIn146+ (TrailerDot happy_var_2+ )}++happyReduce_281 = happySpecReduce_2 141# happyReduction_281+happyReduction_281 happy_x_2+ happy_x_1+ = case happyOut148 happy_x_1 of { happy_var_1 -> + happyIn147+ (reverse happy_var_1+ )}++happyReduce_282 = happySpecReduce_1 142# happyReduction_282+happyReduction_282 happy_x_1+ = case happyOut149 happy_x_1 of { happy_var_1 -> + happyIn148+ ([happy_var_1]+ )}++happyReduce_283 = happySpecReduce_3 142# happyReduction_283+happyReduction_283 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut148 happy_x_1 of { happy_var_1 -> + case happyOut149 happy_x_3 of { happy_var_3 -> + happyIn148+ (happy_var_3 : happy_var_1+ )}}++happyReduce_284 = happySpecReduce_1 143# happyReduction_284+happyReduction_284 happy_x_1+ = case happyOut103 happy_x_1 of { happy_var_1 -> + happyIn149+ (SubscriptExpr happy_var_1+ )}++happyReduce_285 = happyReduce 4# 143# happyReduction_285+happyReduction_285 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut150 happy_x_1 of { happy_var_1 -> + case happyOut150 happy_x_3 of { happy_var_3 -> + case happyOut151 happy_x_4 of { happy_var_4 -> + happyIn149+ (SubscriptSlice happy_var_1 happy_var_3 happy_var_4+ ) `HappyStk` happyRest}}}++happyReduce_286 = happySpecReduce_0 144# happyReduction_286+happyReduction_286 = happyIn150+ (Nothing+ )++happyReduce_287 = happySpecReduce_1 144# happyReduction_287+happyReduction_287 happy_x_1+ = case happyOut103 happy_x_1 of { happy_var_1 -> + happyIn150+ (Just happy_var_1+ )}++happyReduce_288 = happySpecReduce_0 145# happyReduction_288+happyReduction_288 = happyIn151+ (Nothing+ )++happyReduce_289 = happySpecReduce_1 145# happyReduction_289+happyReduction_289 happy_x_1+ = case happyOut152 happy_x_1 of { happy_var_1 -> + happyIn151+ (Just happy_var_1+ )}++happyReduce_290 = happySpecReduce_2 146# happyReduction_290+happyReduction_290 happy_x_2+ happy_x_1+ = case happyOut150 happy_x_2 of { happy_var_2 -> + happyIn152+ (happy_var_2+ )}++happyReduce_291 = happySpecReduce_2 147# happyReduction_291+happyReduction_291 happy_x_2+ happy_x_1+ = case happyOut155 happy_x_1 of { happy_var_1 -> + happyIn153+ (reverse happy_var_1+ )}++happyReduce_292 = happySpecReduce_0 148# happyReduction_292+happyReduction_292 = happyIn154+ (False+ )++happyReduce_293 = happySpecReduce_1 148# happyReduction_293+happyReduction_293 happy_x_1+ = happyIn154+ (True+ )++happyReduce_294 = happySpecReduce_1 149# happyReduction_294+happyReduction_294 happy_x_1+ = case happyOut118 happy_x_1 of { happy_var_1 -> + happyIn155+ ([happy_var_1]+ )}++happyReduce_295 = happySpecReduce_3 149# happyReduction_295+happyReduction_295 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut155 happy_x_1 of { happy_var_1 -> + case happyOut118 happy_x_3 of { happy_var_3 -> + happyIn155+ (happy_var_3 : happy_var_1+ )}}++happyReduce_296 = happySpecReduce_2 150# happyReduction_296+happyReduction_296 happy_x_2+ happy_x_1+ = case happyOut157 happy_x_1 of { happy_var_1 -> + case happyOut154 happy_x_2 of { happy_var_2 -> + happyIn156+ (makeTupleOrExpr (reverse happy_var_1) happy_var_2+ )}}++happyReduce_297 = happySpecReduce_1 151# happyReduction_297+happyReduction_297 happy_x_1+ = case happyOut103 happy_x_1 of { happy_var_1 -> + happyIn157+ ([happy_var_1]+ )}++happyReduce_298 = happySpecReduce_3 151# happyReduction_298+happyReduction_298 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut157 happy_x_1 of { happy_var_1 -> + case happyOut103 happy_x_3 of { happy_var_3 -> + happyIn157+ (happy_var_3 : happy_var_1+ )}}++happyReduce_299 = happyReduce 4# 152# happyReduction_299+happyReduction_299 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut103 happy_x_1 of { happy_var_1 -> + case happyOut103 happy_x_3 of { happy_var_3 -> + case happyOut159 happy_x_4 of { happy_var_4 -> + happyIn158+ (makeDictionary (happy_var_1, happy_var_3) happy_var_4+ ) `HappyStk` happyRest}}}++happyReduce_300 = happySpecReduce_2 152# happyReduction_300+happyReduction_300 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_1 of { happy_var_1 -> + case happyOut161 happy_x_2 of { happy_var_2 -> + happyIn158+ (makeSet happy_var_1 happy_var_2+ )}}++happyReduce_301 = happySpecReduce_1 153# happyReduction_301+happyReduction_301 happy_x_1+ = case happyOut169 happy_x_1 of { happy_var_1 -> + happyIn159+ (Left happy_var_1+ )}++happyReduce_302 = happySpecReduce_2 153# happyReduction_302+happyReduction_302 happy_x_2+ happy_x_1+ = case happyOut160 happy_x_1 of { happy_var_1 -> + happyIn159+ (Right (reverse happy_var_1)+ )}++happyReduce_303 = happySpecReduce_0 154# happyReduction_303+happyReduction_303 = happyIn160+ ([]+ )++happyReduce_304 = happyReduce 5# 154# happyReduction_304+happyReduction_304 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut160 happy_x_1 of { happy_var_1 -> + case happyOut103 happy_x_3 of { happy_var_3 -> + case happyOut103 happy_x_5 of { happy_var_5 -> + happyIn160+ ((happy_var_3,happy_var_5) : happy_var_1+ ) `HappyStk` happyRest}}}++happyReduce_305 = happySpecReduce_1 155# happyReduction_305+happyReduction_305 happy_x_1+ = case happyOut169 happy_x_1 of { happy_var_1 -> + happyIn161+ (Left happy_var_1+ )}++happyReduce_306 = happySpecReduce_2 155# happyReduction_306+happyReduction_306 happy_x_2+ happy_x_1+ = case happyOut162 happy_x_1 of { happy_var_1 -> + happyIn161+ (Right (reverse happy_var_1)+ )}++happyReduce_307 = happySpecReduce_0 156# happyReduction_307+happyReduction_307 = happyIn162+ ([]+ )++happyReduce_308 = happySpecReduce_3 156# happyReduction_308+happyReduction_308 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut162 happy_x_1 of { happy_var_1 -> + case happyOut103 happy_x_3 of { happy_var_3 -> + happyIn162+ (happy_var_3 : happy_var_1+ )}}++happyReduce_309 = happyReduce 5# 157# happyReduction_309+happyReduction_309 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut39 happy_x_2 of { happy_var_2 -> + case happyOut164 happy_x_3 of { happy_var_3 -> + case happyOut100 happy_x_5 of { happy_var_5 -> + happyIn163+ (AST.Class { class_name = happy_var_2, class_args = happy_var_3, class_body = happy_var_5 }+ ) `HappyStk` happyRest}}}++happyReduce_310 = happySpecReduce_0 158# happyReduction_310+happyReduction_310 = happyIn164+ ([]+ )++happyReduce_311 = happySpecReduce_3 158# happyReduction_311+happyReduction_311 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut165 happy_x_2 of { happy_var_2 -> + happyIn164+ (happy_var_2+ )}++happyReduce_312 = happySpecReduce_0 159# happyReduction_312+happyReduction_312 = happyIn165+ ([]+ )++happyReduce_313 = happySpecReduce_2 159# happyReduction_313+happyReduction_313 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_2 of { happy_var_2 -> + happyIn165+ ([ArgVarArgsPos { arg_expr = happy_var_2 }]+ )}++happyReduce_314 = happySpecReduce_2 159# happyReduction_314+happyReduction_314 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_2 of { happy_var_2 -> + happyIn165+ ([ArgVarArgsKeyword { arg_expr = happy_var_2 }]+ )}++happyReduce_315 = happySpecReduce_1 159# happyReduction_315+happyReduction_315 happy_x_1+ = case happyOut167 happy_x_1 of { happy_var_1 -> + happyIn165+ ([happy_var_1]+ )}++happyReduce_316 = happySpecReduce_3 159# happyReduction_316+happyReduction_316 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut167 happy_x_1 of { happy_var_1 -> + case happyOut165 happy_x_3 of { happy_var_3 -> + happyIn165+ (happy_var_1 : happy_var_3+ )}}++happyReduce_317 = happyReduce 4# 159# happyReduction_317+happyReduction_317 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut103 happy_x_2 of { happy_var_2 -> + case happyOut166 happy_x_4 of { happy_var_4 -> + happyIn165+ (ArgVarArgsPos { arg_expr = happy_var_2 } : happy_var_4+ ) `HappyStk` happyRest}}++happyReduce_318 = happySpecReduce_1 160# happyReduction_318+happyReduction_318 happy_x_1+ = case happyOut167 happy_x_1 of { happy_var_1 -> + happyIn166+ ([happy_var_1]+ )}++happyReduce_319 = happySpecReduce_3 160# happyReduction_319+happyReduction_319 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut167 happy_x_1 of { happy_var_1 -> + case happyOut166 happy_x_3 of { happy_var_3 -> + happyIn166+ (happy_var_1 : happy_var_3+ )}}++happyReduce_320 = happySpecReduce_2 160# happyReduction_320+happyReduction_320 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_2 of { happy_var_2 -> + happyIn166+ ([ArgVarArgsKeyword { arg_expr = happy_var_2 }]+ )}++happyReduce_321 = happySpecReduce_3 161# happyReduction_321+happyReduction_321 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut39 happy_x_1 of { happy_var_1 -> + case happyOut103 happy_x_3 of { happy_var_3 -> + happyIn167+ (ArgKeyword { arg_keyword = happy_var_1, arg_expr = happy_var_3 }+ )}}++happyReduce_322 = happySpecReduce_1 161# happyReduction_322+happyReduction_322 happy_x_1+ = case happyOut103 happy_x_1 of { happy_var_1 -> + happyIn167+ (ArgExpr { arg_expr = happy_var_1 }+ )}++happyReduce_323 = happySpecReduce_2 161# happyReduction_323+happyReduction_323 happy_x_2+ happy_x_1+ = case happyOut103 happy_x_1 of { happy_var_1 -> + case happyOut169 happy_x_2 of { happy_var_2 -> + happyIn167+ (ArgExpr { arg_expr = Generator { gen_comprehension = makeComprehension happy_var_1 happy_var_2 }}+ )}}++happyReduce_324 = happySpecReduce_1 162# happyReduction_324+happyReduction_324 happy_x_1+ = case happyOut169 happy_x_1 of { happy_var_1 -> + happyIn168+ (IterFor happy_var_1+ )}++happyReduce_325 = happySpecReduce_1 162# happyReduction_325+happyReduction_325 happy_x_1+ = case happyOut171 happy_x_1 of { happy_var_1 -> + happyIn168+ (IterIf happy_var_1+ )}++happyReduce_326 = happyReduce 5# 163# happyReduction_326+happyReduction_326 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut153 happy_x_2 of { happy_var_2 -> + case happyOut108 happy_x_4 of { happy_var_4 -> + case happyOut170 happy_x_5 of { happy_var_5 -> + happyIn169+ (CompFor { comp_for_exprs = happy_var_2, comp_in_expr = happy_var_4, comp_for_iter = happy_var_5 }+ ) `HappyStk` happyRest}}}++happyReduce_327 = happySpecReduce_0 164# happyReduction_327+happyReduction_327 = happyIn170+ (Nothing+ )++happyReduce_328 = happySpecReduce_1 164# happyReduction_328+happyReduction_328 happy_x_1+ = case happyOut168 happy_x_1 of { happy_var_1 -> + happyIn170+ (Just happy_var_1+ )}++happyReduce_329 = happySpecReduce_3 165# happyReduction_329+happyReduction_329 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut105 happy_x_2 of { happy_var_2 -> + case happyOut170 happy_x_3 of { happy_var_3 -> + happyIn171+ (CompIf { comp_if = happy_var_2, comp_if_iter = happy_var_3 }+ )}}++happyReduce_330 = happySpecReduce_2 166# happyReduction_330+happyReduction_330 happy_x_2+ happy_x_1+ = case happyOut173 happy_x_2 of { happy_var_2 -> + happyIn172+ (AST.Yield { yield_expr = happy_var_2 }+ )}++happyReduce_331 = happySpecReduce_0 167# happyReduction_331+happyReduction_331 = happyIn173+ (Nothing+ )++happyReduce_332 = happySpecReduce_1 167# happyReduction_332+happyReduction_332 happy_x_1+ = case happyOut156 happy_x_1 of { happy_var_1 -> + happyIn173+ (Just happy_var_1+ )}++happyNewToken action sts stk+ = lexCont(\tk -> + let cont i = happyDoAction i tk action sts stk in+ case tk of {+ Token.EOF -> happyDoAction 89# tk action sts stk;+ Token.Import _ -> cont 1#;+ Token.Identifier _ happy_dollar_dollar -> cont 2#;+ Token.String _ happy_dollar_dollar -> cont 3#;+ Token.ByteString _ happy_dollar_dollar -> cont 4#;+ Token.Integer _ happy_dollar_dollar -> cont 5#;+ Token.Float _ happy_dollar_dollar -> cont 6#;+ Token.Imaginary _ happy_dollar_dollar -> cont 7#;+ Token.Assign _ -> cont 8#;+ Token.LeftRoundBracket _ -> cont 9#;+ Token.RightRoundBracket _ -> cont 10#;+ Token.LeftSquareBracket _ -> cont 11#;+ Token.RightSquareBracket _ -> cont 12#;+ Token.LeftBrace _ -> cont 13#;+ Token.RightBrace _ -> cont 14#;+ Token.Comma _ -> cont 15#;+ Token.SemiColon _ -> cont 16#;+ Token.Colon _ -> cont 17#;+ Token.Def _ -> cont 18#;+ Token.Class _ -> cont 19#;+ Token.While _ -> cont 20#;+ Token.For _ -> cont 21#;+ Token.If _ -> cont 22#;+ Token.With _ -> cont 23#;+ Token.As _ -> cont 24#;+ Token.True _ -> cont 25#;+ Token.False _ -> cont 26#;+ Token.None _ -> cont 27#;+ Token.Return _ -> cont 28#;+ Token.Yield _ -> cont 29#;+ Token.Indent _ -> cont 30#;+ Token.Dedent _ -> cont 31#;+ Token.Newline _ -> cont 32#;+ Token.Try _ -> cont 33#;+ Token.Except _ -> cont 34#;+ Token.Finally _ -> cont 35#;+ Token.Raise _ -> cont 36#;+ Token.Plus _ -> cont 37#;+ Token.Minus _ -> cont 38#;+ Token.Mult _ -> cont 39#;+ Token.Div _ -> cont 40#;+ Token.GreaterThan _ -> cont 41#;+ Token.LessThan _ -> cont 42#;+ Token.Equality _ -> cont 43#;+ Token.GreaterThanEquals _ -> cont 44#;+ Token.LessThanEquals _ -> cont 45#;+ Token.And _ -> cont 46#;+ Token.Or _ -> cont 47#;+ Token.Exponent _ -> cont 48#;+ Token.Pass _ -> cont 49#;+ Token.Break _ -> cont 50#;+ Token.Continue _ -> cont 51#;+ Token.Delete _ -> cont 52#;+ Token.Else _ -> cont 53#;+ Token.Elif _ -> cont 54#;+ Token.Not _ -> cont 55#;+ Token.BinaryOr _ -> cont 56#;+ Token.Xor _ -> cont 57#;+ Token.BinaryAnd _ -> cont 58#;+ Token.ShiftLeft _ -> cont 59#;+ Token.ShiftRight _ -> cont 60#;+ Token.Modulo _ -> cont 61#;+ Token.FloorDiv _ -> cont 62#;+ Token.Tilde _ -> cont 63#;+ Token.NotEquals _ -> cont 64#;+ Token.In _ -> cont 65#;+ Token.Is _ -> cont 66#;+ Token.Lambda _ -> cont 67#;+ Token.Dot _ -> cont 68#;+ Token.Ellipsis _ -> cont 69#;+ Token.PlusAssign _ -> cont 70#;+ Token.MinusAssign _ -> cont 71#;+ Token.MultAssign _ -> cont 72#;+ Token.DivAssign _ -> cont 73#;+ Token.ModAssign _ -> cont 74#;+ Token.PowAssign _ -> cont 75#;+ Token.BinAndAssign _ -> cont 76#;+ Token.BinOrAssign _ -> cont 77#;+ Token.BinXorAssign _ -> cont 78#;+ Token.LeftShiftAssign _ -> cont 79#;+ Token.RightShiftAssign _ -> cont 80#;+ Token.FloorDivAssign _ -> cont 81#;+ Token.At _ -> cont 82#;+ Token.RightArrow _ -> cont 83#;+ Token.From _ -> cont 84#;+ Token.Global _ -> cont 85#;+ Token.NonLocal _ -> cont 86#;+ Token.Assert _ -> cont 87#;+ Token.EOF -> cont 88#;+ _ -> happyError' tk+ })++happyError_ tk = happyError' tk++happyThen :: () => P a -> (a -> P b) -> P b+happyThen = (thenP)+happyReturn :: () => a -> P a+happyReturn = (returnP)+happyThen1 = happyThen+happyReturn1 :: () => a -> P a+happyReturn1 = happyReturn+happyError' :: () => Token -> P a+happyError' tk = parseError tk++parseFileInput = happySomeParser where+ happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut7 x))++parseSingleInput = happySomeParser where+ happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut6 x))++parseEval = happySomeParser where+ happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut11 x))++happySeq = happyDontSeq+++-- Put additional Haskell code in here if needed.+{-# 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 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 <# (0# :: Int#)) -> {- nothing -}++ (happyReduceArr ! rule) i tk st+ where rule = (I# ((negateInt# ((n +# (1# :: Int#))))))+ n -> {- nothing -}+++ happyShift new_state i tk st+ where new_state = (n -# (1# :: Int#))+ where off = indexShortOffAddr happyActOffsets st+ off_i = (off +# i)+ check = if (off_i >=# (0# :: Int#))+ then (indexShortOffAddr happyCheck off_i ==# 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+ narrow16Int# i+#elif __GLASGOW_HASKELL__ == 500+ intToInt16# i+#else+ (i `iShiftL#` 16#) `iShiftRA#` 16#+#endif+ where+#if __GLASGOW_HASKELL__ >= 503+ i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+#else+ i = word2Int# ((high `shiftL#` 8#) `or#` low)+#endif+ high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+ low = int2Word# (ord# (indexCharOffAddr# arr off'))+ off' = off *# 2#++++++data HappyAddr = HappyA# 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 unsafeCoerce# x of { (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 -# (1# :: 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 +# nt)+ new_state = indexShortOffAddr happyTable off_i+++++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n -# (1# :: Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n -# (1#::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 +# 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 ( (unsafeCoerce# (I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions+++happyTcHack :: 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.
+ language-python.cabal view
@@ -0,0 +1,36 @@+name: language-python+version: 0.1.1+cabal-version: >= 1.2+synopsis: Parsing and pretty printing of Python code. +description: language-python is a Haskell library for parsing and pretty printing+ Python code. Currently it only supports Python version 3.0. +category: Language+license: BSD3+license-file: LICENSE+copyright: (c) 2008-2009 Bernard James Pope+author: Bernard James Pope +maintainer: bjpop@csse.unimelb.edu.au+homepage: http://projects.haskell.org/language-python/+build-depends: base+build-type: Simple+stability: experimental+extra-source-files: src/Language/Python/Version3/Parser/Parser.y + src/Language/Python/Version3/Parser/Lexer.x ++Library+ hs-source-dirs: src+ build-depends: base, containers, pretty, bytestring, array+ build-tools: happy, alex+ exposed-modules:+ Language.Python.Data.SrcLocation+ Language.Python.Version3.Parser+ Language.Python.Version3.Lexer+ Language.Python.Version3.Syntax.AST+ Language.Python.Version3.Syntax.Pretty+ other-modules:+ Language.Python.Version3.Parser.Parser+ Language.Python.Version3.Parser.Lexer+ Language.Python.Version3.Parser.ParserMonad+ Language.Python.Version3.Parser.ParserUtils+ Language.Python.Version3.Parser.Token+
+ src/Language/Python/Data/SrcLocation.hs view
@@ -0,0 +1,69 @@+{-# OPTIONS #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Data.SrcLocation +-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- Source location information for the Python parser. +-- XXX We will probably move to source spans at some point.+-----------------------------------------------------------------------------++module Language.Python.Data.SrcLocation (+ -- * Projection of locations from values + Location (..),+ -- * Construction + SrcLocation (..),+ initialSrcLocation,+ -- * Modification+ incColumn, + incLine,+ incTab +) where++-- | A location for a syntactic entity from the source code.+-- The location is specified by its filename, and starting row+-- and column. +data SrcLocation = + Sloc { sloc_filename :: String+ , sloc_row :: !Int+ , sloc_column :: !Int + } + | NoLocation+ deriving (Eq, Ord, Show)++-- | Types which have a source location.+class Location a where+ -- | Project the location from a value.+ location :: a -> SrcLocation + -- | By default a value has no location. + location x = NoLocation++-- | Construct the initial source location for a file.+initialSrcLocation :: String -> SrcLocation+initialSrcLocation filename + = Sloc + { sloc_filename = filename+ , sloc_row = 1+ , sloc_column = 1+ }++-- | Increment the column of a location by one. +incColumn :: Int -> SrcLocation -> SrcLocation+incColumn n loc@(Sloc { sloc_column = col })+ = loc { sloc_column = col + n }++-- | Increment the column of a location by one tab stop.+incTab :: SrcLocation -> SrcLocation+incTab loc@(Sloc { sloc_column = col })+ = loc { sloc_column = newCol } + where+ newCol = col + 8 - (col - 1) `mod` 8++-- | Increment the line number (row) of a location by one.+incLine :: Int -> SrcLocation -> SrcLocation+incLine n loc@(Sloc { sloc_row = row }) + = loc { sloc_column = 1, sloc_row = row + n }
+ src/Language/Python/Version3/Lexer.hs view
@@ -0,0 +1,61 @@+{-# OPTIONS #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Version3.Lexer+-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- A lexer and set of tokens for Python version 3 programs. +-- See: <http://docs.python.org/dev/3.0/reference/lexical_analysis.html>.+-----------------------------------------------------------------------------++module Language.Python.Version3.Lexer (+ -- * Lexical analysis+ lex, + lexOneToken,+ -- * Tokens+ Token(..), + -- * Parse errors+ ParseError(ParseError)) where++import Prelude hiding (lex)+import Language.Python.Version3.Parser.Lexer (lexToken, initStartCodeStack)+import Language.Python.Version3.Parser.Token (Token (..))+import Language.Python.Data.SrcLocation (initialSrcLocation)+import Language.Python.Version3.Parser.ParserMonad + (State(input), P, runParser, execParser, ParseError(ParseError), initialState)++-- | Parse a string into a list of Python Tokens, or return an error. +lex :: String -- ^ The input stream (python source code). + -> String -- ^ The name of the python source (filename or input device).+ -> Either ParseError [Token] -- ^ An error or a list of tokens.+lex input srcName =+ execParser lexer state+ where+ initLoc = initialSrcLocation srcName+ state = initialState initLoc input initStartCodeStack++-- | Try to lex the first token in an input string. Return either a parse error+-- or a pair containing the next token and the rest of the input after the token.+lexOneToken :: String -- ^ The input stream (python source code).+ -> String -- ^ The name of the python source (filename or input device).+ -> Either ParseError (Token, String) -- ^ An error or the next token and the rest of the input after the token. +lexOneToken source srcName =+ case runParser lexToken state of+ Left err -> Left err+ Right (st, tok) -> Right (tok, input st)+ where+ initLoc = initialSrcLocation srcName+ state = initialState initLoc source initStartCodeStack++lexer :: P [Token]+lexer = loop []+ where+ loop toks = do+ tok <- lexToken+ if tok == EOF+ then return (reverse toks)+ else loop (tok:toks)
+ src/Language/Python/Version3/Parser.hs view
@@ -0,0 +1,68 @@+{-# OPTIONS #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Version3.Parser+-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- A parser for Python version 3 programs. Parsers are provided for +-- modules, statements, and expressions. +--+-- See: +--+-- * <http://docs.python.org/dev/3.0/reference/index.html> for an overview of the language. +--+-- * <http://docs.python.org/dev/3.0/reference/grammar.html> for the full grammar.+-- +-- * <http://docs.python.org/dev/3.0/reference/toplevel_components.html> for a description of +-- the various Python top-levels, which correspond to the parsers provided here.+-----------------------------------------------------------------------------++module Language.Python.Version3.Parser (+ -- * Parsing modules+ parseModule, + -- * Parsing statements+ parseStmt, + -- * Parsing expressions+ parseExpr, + -- * Parse errors+ ParseError(ParseError)) where++import Language.Python.Version3.Parser.Parser (parseFileInput, parseSingleInput, parseEval)+import Language.Python.Version3.Syntax.AST (Module, Statement, Expr)+import Language.Python.Data.SrcLocation (initialSrcLocation)+import Language.Python.Version3.Parser.ParserMonad (execParser, ParseError(ParseError), initialState)+import Language.Python.Version3.Parser.Lexer (initStartCodeStack)++-- | Parse a whole Python source file.+parseModule :: String -- ^ The input stream (python module source code). + -> String -- ^ The name of the python source (filename or input device). + -> Either ParseError Module -- ^ An error or the abstract syntax tree (AST) of the python module. +parseModule input srcName = + execParser parseFileInput state + where+ initLoc = initialSrcLocation srcName+ state = initialState initLoc input initStartCodeStack++-- | Parse one compound statement, or a sequence of simple statements. Generally used for interactive input, such as from the command line of an interpreter.+parseStmt :: String -- ^ The input stream (python statement source code). + -> String -- ^ The name of the python source (filename or input device). + -> Either ParseError [Statement] -- ^ An error or maybe the abstract syntax tree (AST) of zero or more python statements. +parseStmt input srcName = + execParser parseSingleInput state + where+ initLoc = initialSrcLocation srcName+ state = initialState initLoc input initStartCodeStack++-- | Parse an expression. Generally used as input for the \'eval\' primitive. +parseExpr :: String -- ^ The input stream (python statement source code). + -> String -- ^ The name of the python source (filename or input device). + -> Either ParseError Expr -- ^ An error or maybe the abstract syntax tree (AST) of the python expression. +parseExpr input srcName = + execParser parseEval state + where+ initLoc = initialSrcLocation srcName+ state = initialState initLoc input initStartCodeStack
+ src/Language/Python/Version3/Parser/Lexer.x view
@@ -0,0 +1,485 @@+{+-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Version3.Parser.Lexer +-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- Implementation of a lexer for Python version 3 programs. Generated by+-- alex. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.Lexer + (initStartCodeStack, lexToken, endOfFileToken, lexCont) where++import Language.Python.Version3.Parser.Token hiding (True, False)+import qualified Language.Python.Version3.Parser.Token as Token+import Language.Python.Version3.Parser.ParserMonad hiding (location)+import Language.Python.Data.SrcLocation+import qualified Data.Map as Map+import Control.Monad (liftM)+import Data.List (foldl')+import Numeric (readHex, readOct)+import qualified Data.ByteString.Char8 as BS (pack)+}++-- character sets+$lf = \n -- line feed+$cr = \r -- carriage return+$eol_char = [$lf $cr] -- any end of line character+$not_eol_char = ~$eol_char -- anything but an end of line character+$white_char = [\ \n\r\f\v\t]+$white_no_nl = $white_char # $eol_char+$ident_letter = [a-zA-Z_]+$digit = 0-9+$non_zero_digit = 1-9+$oct_digit = 0-7+$hex_digit = [$digit a-fA-F]+$bin_digit = 0-1 +$short_str_char = [^ \n \r ' \" \\]+$long_str_char = [. \n] # [' \"]+$short_byte_str_char = \0-\127 # [\n \r ' \" \\]+$long_byte_str_char = \0-\127 # [' \"]+$not_single_quote = [. \n] # '+$not_double_quote = [. \n] # \"++-- macro definitions+@exponent = (e | E) (\+ | \-)? $digit+ +@fraction = \. $digit++@int_part = $digit++@point_float = (@int_part? @fraction) | @int_part \.+@exponent_float = (@int_part | @point_float) @exponent+@float_number = @point_float | @exponent_float+@eol_pattern = $lf | $cr $lf | $cr $lf +@one_single_quote = ' $not_single_quote+@two_single_quotes = '' $not_single_quote+@one_double_quote = \" $not_double_quote+@two_double_quotes = \"\" $not_double_quote+@byte_str_prefix = b | B+@raw_str_prefix = r | R+@raw_byte_str_prefix = @byte_str_prefix @raw_str_prefix+@backslash_pair = \\ (\\|'|\"|@eol_pattern|$short_str_char)+@backslash_pair_bs = \\ (\\|'|\"|@eol_pattern|$short_byte_str_char)+@short_str_item_single = $short_str_char|@backslash_pair|\"+@short_str_item_double = $short_str_char|@backslash_pair|'+@short_byte_str_item_single = $short_byte_str_char|@backslash_pair_bs|\"+@short_byte_str_item_double = $short_byte_str_char|@backslash_pair_bs|'+@long_str_item_single = $long_str_char|@backslash_pair|@one_single_quote|@two_single_quotes|\"+@long_str_item_double = $long_str_char|@backslash_pair|@one_double_quote|@two_double_quotes|'+@long_byte_str_item_single = $long_byte_str_char|@backslash_pair_bs|@one_single_quote|@two_single_quotes|\"+@long_byte_str_item_double = $long_byte_str_char|@backslash_pair_bs|@one_double_quote|@two_double_quotes|'++tokens :-++-- these rules below could match inside a string literal, but they+-- will not be applied because the rule for the literal will always+-- match a longer sequence of characters. ++\# ($not_eol_char)* ; -- skip comments +$white_no_nl+ ; -- skip whitespace ++\\ @eol_pattern ; -- line join ++<0> {+ @float_number { token Token.Float readFloat }+ $non_zero_digit $digit* { token Token.Integer read } + (@float_number | @int_part) (j | J) { token Token.Imaginary (readFloat.init) }+ 0+ { token Token.Integer read } + 0 (o | O) $oct_digit+ { token Token.Integer read }+ 0 (x | X) $hex_digit+ { token Token.Integer read }+ 0 (b | B) $bin_digit+ { token Token.Integer readBinary }+}++-- String literals ++<0> {+ ' @short_str_item_single* ' { mkString 1 1 stringToken }+ @raw_str_prefix ' @short_str_item_single* ' { mkString 2 1 rawStringToken }+ @byte_str_prefix ' @short_byte_str_item_single* ' { mkString 2 1 byteStringToken }+ @raw_byte_str_prefix ' @short_byte_str_item_single* ' { mkString 3 1 rawByteStringToken }++ \" @short_str_item_double* \" { mkString 1 1 stringToken }+ @raw_str_prefix \" @short_str_item_double* \" { mkString 2 1 rawStringToken }+ @byte_str_prefix \" @short_byte_str_item_double* \" { mkString 2 1 byteStringToken }+ @raw_byte_str_prefix \" @short_byte_str_item_double* \" { mkString 3 1 rawByteStringToken }++ ''' @long_str_item_single* ''' { mkString 3 3 stringToken }+ @raw_str_prefix ''' @long_str_item_single* ''' { mkString 4 3 rawStringToken }+ @byte_str_prefix ''' @long_byte_str_item_single* ''' { mkString 4 3 byteStringToken }+ @raw_byte_str_prefix ''' @long_byte_str_item_single* ''' { mkString 5 3 rawByteStringToken }++ \"\"\" @long_str_item_double* \"\"\" { mkString 3 3 stringToken }+ @raw_str_prefix \"\"\" @long_str_item_double* \"\"\" { mkString 4 3 rawStringToken }+ @byte_str_prefix \"\"\" @long_byte_str_item_double* \"\"\" { mkString 4 3 byteStringToken }+ @raw_byte_str_prefix \"\"\" @long_byte_str_item_double* \"\"\" { mkString 5 3 rawByteStringToken }+}++<0> {+ @eol_pattern { begin bol } +}++<dedent> () { dedentation }++-- beginning of line+<bol> {+ @eol_pattern ;+ () { indentation BOL }+}++-- beginning of file+<bof> {+ @eol_pattern ;+ () { indentation BOF }+}+++<0> $ident_letter($ident_letter|$digit)* { \loc len str -> keywordOrIdent (take len str) loc }++-- operators and separators+--+<0> {+ "(" { openParen Token.LeftRoundBracket }+ ")" { closeParen Token.RightRoundBracket }+ "[" { openParen Token.LeftSquareBracket }+ "]" { closeParen Token.RightSquareBracket }+ "{" { openParen Token.LeftBrace }+ "}" { closeParen Token.RightBrace }+ "->" { symbolToken Token.RightArrow }+ "." { symbolToken Token.Dot }+ "..." { symbolToken Token.Ellipsis }+ "~" { symbolToken Token.Tilde }+ "+" { symbolToken Token.Plus }+ "-" { symbolToken Token.Minus }+ "**" { symbolToken Token.Exponent }+ "*" { symbolToken Token.Mult }+ "/" { symbolToken Token.Div }+ "//" { symbolToken Token.FloorDiv }+ "%" { symbolToken Token.Modulo }+ "<<" { symbolToken Token.ShiftLeft }+ ">>" { symbolToken Token.ShiftRight }+ "<" { symbolToken Token.LessThan }+ "<=" { symbolToken Token.LessThanEquals }+ ">" { symbolToken Token.GreaterThan }+ ">=" { symbolToken Token.GreaterThanEquals }+ "==" { symbolToken Token.Equality }+ "!=" { symbolToken Token.NotEquals }+ "^" { symbolToken Token.Xor }+ "|" { symbolToken Token.BinaryOr }+ "&&" { symbolToken Token.And }+ "&" { symbolToken Token.BinaryAnd }+ "||" { symbolToken Token.Or }+ ":" { symbolToken Token.Colon }+ "=" { symbolToken Token.Assign }+ "+=" { symbolToken Token.PlusAssign }+ "-=" { symbolToken Token.MinusAssign }+ "*=" { symbolToken Token.MultAssign }+ "/=" { symbolToken Token.DivAssign }+ "%=" { symbolToken Token.ModAssign }+ "**=" { symbolToken Token.PowAssign }+ "&=" { symbolToken Token.BinAndAssign }+ "|=" { symbolToken Token.BinOrAssign }+ "^=" { symbolToken Token.BinXorAssign }+ "<<=" { symbolToken Token.LeftShiftAssign }+ ">>=" { symbolToken Token.RightShiftAssign }+ "//=" { symbolToken Token.FloorDivAssign } + "," { symbolToken Token.Comma }+ "@" { symbolToken Token.At }+ \; { symbolToken Token.SemiColon }+}++{+-- Functions for building tokens ++type StartCode = Int+type Action = SrcLocation -> Int -> String -> P Token ++dedentation :: Action+dedentation loc _len _str = do+ let endCol = sloc_column loc + topIndent <- getIndent+ case compare endCol topIndent of+ EQ -> do popStartCode+ lexToken + LT -> do popIndent+ return dedentToken + GT -> failP loc ["indentation error"]++-- Beginning of. BOF = beginning of file, BOL = beginning of line+data BO = BOF | BOL++indentation :: BO -> Action +-- Check if we are at the EOF. If yes, we may need to generate a newline,+-- in case we came here from BOL (but not BOF).+indentation bo _loc _len [] = do+ popStartCode+ case bo of+ BOF -> lexToken+ BOL -> return newlineToken+indentation bo loc _len _str = do+ popStartCode+ parenDepth <- getParenStackDepth+ if parenDepth > 0+ then lexToken+ else do + topIndent <- getIndent+ let endCol = sloc_column loc + case compare endCol topIndent of+ EQ -> case bo of+ BOF -> lexToken+ BOL -> return newlineToken + LT -> do pushStartCode dedent+ return newlineToken + GT -> do pushIndent endCol + return indentToken + where+ -- the location of the newline is not known here + newlineToken = Newline NoLocation+ indentToken = Indent loc ++begin :: StartCode -> Action +begin code loc len inp = do+ pushStartCode code+ lexToken ++symbolToken :: (SrcLocation -> Token) -> Action +symbolToken mkToken location _ _ = return (mkToken location)++token_fail :: String -> Action +token_fail message location _ _ + = failP location [ "Lexical Error !", message]++token :: (SrcLocation -> a -> Token) -> (String -> a) -> Action +token mkToken read location len str + = return $ mkToken location (read $ take len str)++-- a keyword or an identifier (the syntax overlaps)+keywordOrIdent :: String -> SrcLocation -> P Token+keywordOrIdent str location+ = return $ case Map.lookup str keywords of+ Just symbol -> symbol location+ Nothing -> Identifier location str ++-- mapping from strings to keywords+keywords :: Map.Map String (SrcLocation -> Token) +keywords = Map.fromList keywordNames ++keywordNames :: [(String, SrcLocation -> Token)]+keywordNames =+ [ ("False", Token.False), ("class", Class), ("finally", Finally), ("is", Is), ("return", Return)+ , ("None", None), ("continue", Continue), ("for", For), ("lambda", Lambda), ("try", Try)+ , ("True", Token.True), ("def", Def), ("from", From), ("nonlocal", NonLocal), ("while", While)+ , ("and", And), ("del", Delete), ("global", Global), ("not", Not), ("with", With)+ , ("as", As), ("elif", Elif), ("if", If), ("or", Or), ("yield", Yield)+ , ("assert", Assert), ("else", Else), ("import", Import), ("pass", Pass)+ , ("break", Break), ("except", Except), ("in", In), ("raise", Raise)+ ]++-- The lexer starts off in the beginning of file state (bof)+initStartCodeStack :: [Int]+initStartCodeStack = [bof,0]++-- special tokens for the end of file and end of line+endOfFileToken :: Token+endOfFileToken = EOF+newlineToken = Newline NoLocation+dedentToken = Dedent NoLocation++-- Test if we are at the end of the line or file+atEOLorEOF :: a -> AlexInput -> Int -> AlexInput -> Bool+atEOLorEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) + = null inputAfterToken || nextChar == '\n' || nextChar == '\r'+ where+ nextChar = head inputAfterToken ++notEOF :: a -> AlexInput -> Int -> AlexInput -> Bool+notEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) + = not (null inputAfterToken)++readBinary :: String -> Integer+readBinary + = toBinary . drop 2 + where+ toBinary = foldl' acc 0+ acc b '0' = 2 * b+ acc b '1' = 2 * b + 1++{-+floatnumber ::= pointfloat | exponentfloat+pointfloat ::= [intpart] fraction | intpart "."+exponentfloat ::= (intpart | pointfloat) exponent+intpart ::= digit++fraction ::= "." digit++exponent ::= ("e" | "E") ["+" | "-"] digit++-}+readFloat :: String -> Double+readFloat str@('.':cs) = read ('0':readFloatRest str)+readFloat str = read (readFloatRest str)+readFloatRest :: String -> String+readFloatRest [] = []+readFloatRest ['.'] = ".0"+readFloatRest (c:cs) = c : readFloatRest cs++mkString :: Int -> Int -> (SrcLocation -> String -> Token) -> Action+mkString leftSkip rightSkip toToken loc len str = do+ let contentLen = len - (leftSkip + rightSkip)+ let contents = take contentLen $ drop leftSkip str+ -- return $ String loc $ processString contents + return $ toToken loc contents ++stringToken :: SrcLocation -> String -> Token+stringToken loc str = String loc $ unescapeString str++rawStringToken :: SrcLocation -> String -> Token+rawStringToken loc str = String loc $ unescapeRawString str++byteStringToken :: SrcLocation -> String -> Token+byteStringToken loc str = ByteString loc $ BS.pack $ unescapeString str++rawByteStringToken :: SrcLocation -> String -> Token+rawByteStringToken loc str = ByteString loc $ BS.pack $ unescapeRawString str++openParen :: (SrcLocation -> Token) -> Action+openParen mkToken loc _len _str = do+ let token = mkToken loc+ pushParen token + return token ++closeParen :: (SrcLocation -> Token) -> Action+closeParen mkToken loc _len _str = do+ let token = mkToken loc+ topParen <- getParen+ case topParen of+ Nothing -> failP loc err1 + Just open -> if matchParen open token + then popParen >> return token+ else failP loc err2+ where+ -- XXX fix these error messages+ err1 = ["Lexical error ! unmatched closing paren"]+ err2 = ["Lexical error ! unmatched closing paren"]++matchParen :: Token -> Token -> Bool+matchParen (LeftRoundBracket {}) (RightRoundBracket {}) = True+matchParen (LeftBrace {}) (RightBrace {}) = True+matchParen (LeftSquareBracket {}) (RightSquareBracket {}) = True+matchParen _ _ = False++unescapeString :: String -> String+unescapeString ('\\':'\\':cs) = '\\' : unescapeString cs -- Backslash (\)+unescapeString ('\\':'\'':cs) = '\'' : unescapeString cs -- Single quote (')+unescapeString ('\\':'"':cs) = '"' : unescapeString cs -- Double quote (")+unescapeString ('\\':'a':cs) = '\a' : unescapeString cs -- ASCII Bell (BEL)+unescapeString ('\\':'b':cs) = '\b' : unescapeString cs -- ASCII Backspace (BS)+unescapeString ('\\':'f':cs) = '\f' : unescapeString cs -- ASCII Formfeed (FF)+unescapeString ('\\':'n':cs) = '\n' : unescapeString cs -- ASCII Linefeed (LF)+unescapeString ('\\':'r':cs) = '\r' : unescapeString cs -- ASCII Carriage Return (CR)+unescapeString ('\\':'t':cs) = '\t' : unescapeString cs -- ASCII Horizontal Tab (TAB)+unescapeString ('\\':'v':cs) = '\v' : unescapeString cs -- ASCII Vertical Tab (VT)+unescapeString ('\\':'\n':cs) = unescapeString cs -- line continuation+unescapeString ('\\':rest@(o:_))+ | o `elem` octalDigits = unescapeNumeric 3 octalDigits (fst . head . readOct) rest +unescapeString ('\\':'x':rest@(h:_))+ | h `elem` hexDigits = unescapeNumeric 2 hexDigits (fst . head . readHex) rest +unescapeString (c:cs) = c : unescapeString cs +unescapeString [] = []++unescapeRawString :: String -> String+unescapeRawString ('\\':'\'':cs) = '\'' : unescapeRawString cs -- Single quote (')+unescapeRawString ('\\':'"':cs) = '"' : unescapeRawString cs -- Double quote (")+unescapeRawString ('\\':'\n':cs) = unescapeRawString cs -- line continuation+unescapeRawString (c:cs) = c : unescapeRawString cs+unescapeRawString [] = []++{- + This is a bit complicated because Python allows between 1 and 3 octal+ characters after the \, and 1 and 2 hex characters after a \x.+-}+unescapeNumeric :: Int -> String -> (String -> Int) -> String -> String+unescapeNumeric n numericDigits readNumeric str+ = loop n [] str + where+ loop _ acc [] = [numericToChar acc]+ loop 0 acc rest+ = numericToChar acc : unescapeString rest+ loop n acc (c:cs)+ | c `elem` numericDigits = loop (n-1) (c:acc) cs+ | otherwise = numericToChar acc : unescapeString (c:cs)+ numericToChar :: String -> Char+ numericToChar = toEnum . readNumeric . reverse++octalDigits, hexDigits :: String+octalDigits = "01234567"+hexDigits = "0123456789abcdef"+ ++-- -----------------------------------------------------------------------------+-- Functionality required by Alex ++type AlexInput = (SrcLocation, String)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar _ = error "alexInputPrevChar not used"++alexGetChar :: AlexInput -> Maybe (Char, AlexInput)+alexGetChar (loc, input) + | null input = Nothing+ | otherwise = Just (nextChar, (nextLoc, rest))+ where+ nextChar = head input+ rest = tail input + nextLoc = moveChar nextChar loc++moveChar :: Char -> SrcLocation -> SrcLocation +moveChar '\n' = incLine 1 +moveChar '\t' = incTab +moveChar '\r' = id +moveChar _ = incColumn 1 ++lexicalError :: P a+lexicalError = do+ location <- getLocation+ c <- liftM head getInput+ failP location + ["Lexical error !",+ "The character " ++ show c ++ " does not fit here."]++parseError :: P a+parseError = do+ token <- getLastToken+ failP (location token)+ ["Syntax error !",+ "The symbol `" ++ show token ++ "' does not fit here."]++lexToken :: P Token+lexToken = do+ location <- getLocation+ input <- getInput+ startCode <- getStartCode+ case alexScan (location, input) startCode of+ AlexEOF -> do+ depth <- getIndentStackDepth+ if depth <= 1 + then return endOfFileToken+ else do + popIndent+ return dedentToken+ AlexError _ -> lexicalError+ AlexSkip (nextLocation, rest) len -> do+ setLocation nextLocation + setInput rest + lexToken+ AlexToken (nextLocation, rest) len action -> do+ setLocation nextLocation + setInput rest + token <- action location len input + setLastToken token+ return token++lexCont :: (Token -> P a) -> P a+lexCont cont = do+ tok <- lexToken+ cont tok+}
+ src/Language/Python/Version3/Parser/Parser.y view
@@ -0,0 +1,1238 @@+{+-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Version3.Parser.Parser +-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- Implementation of the Python version 3 parser. Generated by happy. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.Parser (parseFileInput, parseSingleInput, parseEval) where++import Data.Char (isSpace, isAlpha, isDigit)+import Language.Python.Version3.Parser.Lexer+import Language.Python.Version3.Parser.Token hiding (True, False)+import qualified Language.Python.Version3.Parser.Token as Token+import Language.Python.Version3.Syntax.AST as AST+import Language.Python.Version3.Parser.ParserUtils+import Language.Python.Version3.Parser.ParserMonad+import Language.Python.Data.SrcLocation+import Data.List (foldl')+import qualified Data.ByteString.Char8 as BS (ByteString)+}++%name parseFileInput FileInput +%name parseSingleInput SingleInput+%name parseEval EvalInput ++%tokentype { Token } +%error { parseError } +%monad { P } { thenP } { returnP }+%lexer { lexCont } { Token.EOF }++%token + import { Token.Import _ }+ ident { Token.Identifier _ $$ }+ string { Token.String _ $$ }+ bytestring { Token.ByteString _ $$ }+ integer { Token.Integer _ $$ }+ float { Token.Float _ $$ }+ imaginary { Token.Imaginary _ $$ }+ '=' { Token.Assign _ }+ '(' { Token.LeftRoundBracket _ }+ ')' { Token.RightRoundBracket _ }+ '[' { Token.LeftSquareBracket _ }+ ']' { Token.RightSquareBracket _ }+ '{' { Token.LeftBrace _ }+ '}' { Token.RightBrace _ }+ ',' { Token.Comma _ }+ ';' { Token.SemiColon _ }+ ':' { Token.Colon _ }+ def { Token.Def _ }+ class { Token.Class _ }+ while { Token.While _ }+ for { Token.For _ }+ if { Token.If _ }+ with { Token.With _ }+ as { Token.As _ }+ true { Token.True _ }+ false { Token.False _ }+ none { Token.None _ }+ return { Token.Return _ }+ yield { Token.Yield _ }+ indent { Token.Indent _ }+ dedent { Token.Dedent _ }+ newline { Token.Newline _ }+ try { Token.Try _ }+ except { Token.Except _ }+ finally { Token.Finally _ }+ raise { Token.Raise _ }+ '+' { Token.Plus _ }+ '-' { Token.Minus _ }+ '*' { Token.Mult _ }+ '/' { Token.Div _ }+ '>' { Token.GreaterThan _ }+ '<' { Token.LessThan _ }+ '==' { Token.Equality _ }+ '>=' { Token.GreaterThanEquals _ }+ '<=' { Token.LessThanEquals _ }+ and { Token.And _ }+ or { Token.Or _ }+ '**' { Token.Exponent _ }+ pass { Token.Pass _ }+ break { Token.Break _ }+ continue { Token.Continue _ }+ del { Token.Delete _ }+ else { Token.Else _ }+ elif { Token.Elif _ }+ not { Token.Not _ }+ '|' { Token.BinaryOr _ }+ '^' { Token.Xor _ } + '&' { Token.BinaryAnd _ } + '>>' { Token.ShiftLeft _ }+ '<<' { Token.ShiftRight _ }+ '%' { Token.Modulo _ }+ floordiv { Token.FloorDiv _ }+ '~' { Token.Tilde _ }+ '!=' { Token.NotEquals _ }+ in { Token.In _ }+ is { Token.Is _ }+ lambda { Token.Lambda _ }+ '.' { Token.Dot _ }+ '...' { Token.Ellipsis _ }+ '+=' { Token.PlusAssign _ }+ '-=' { Token.MinusAssign _ }+ '*=' { Token.MultAssign _ }+ '/=' { Token.DivAssign _ }+ '%=' { Token.ModAssign _ }+ '**=' { Token.PowAssign _ }+ '&=' { Token.BinAndAssign _ }+ '|=' { Token.BinOrAssign _ }+ '^=' { Token.BinXorAssign _ }+ '<<=' { Token.LeftShiftAssign _ }+ '>>=' { Token.RightShiftAssign _ }+ '//=' { Token.FloorDivAssign _ } + '@' { Token.At _ }+ '->' { Token.RightArrow _ }+ from { Token.From _ }+ global { Token.Global _ }+ nonlocal { Token.NonLocal _ }+ assert { Token.Assert _ }+ eof { Token.EOF }++%%++{- + Note: newline tokens in the grammar:+ It seems there are some dubious uses of NEWLINE in the grammar. + This is corroborated by this posting:+ http://mail.python.org/pipermail/python-dev/2005-October/057014.html+ The general idea is that the lexer does not generate NEWLINE tokens for+ lines which contain only spaces or comments. However, the grammar sometimes+ suggests that such tokens may exist. +-}+++-- single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE ++{- + Complete: but we don't support the newline at the end of a compound stmt + because the lexer would not produce a newline there. It seems like a weirdness+ in the way the interactive input works. +-}++SingleInput :: { [Statement] }+SingleInput + : newline { [] }+ | SimpleStmt { $1 } + | CompoundStmt {- No newline here! -} { [$1] } ++-- file_input: (NEWLINE | stmt)* ENDMARKER++-- Complete: there is no need to mention the ENDMARKER, happy takes care of that.++FileInput :: { Module }+FileInput : ManyStmtOrNewline {- No ENDMARKER here! -} { Module $1 }++ManyStmtOrNewline :: { [Statement] }+ManyStmtOrNewline : ManyStmtOrNewlineRec { concat (reverse $1) }++ManyStmtOrNewlineRec :: { [[Statement]] }+ManyStmtOrNewlineRec + : {- empty -} { [] } + | ManyStmtOrNewlineRec NewLineOrStmt { $2 : $1 }++NewLineOrStmt :: { [Statement] }+NewLineOrStmt + : newline { [] }+ | Stmt { $1 }++-- eval_input: testlist NEWLINE* ENDMARKER++-- Complete.++EvalInput :: { Expr }+EvalInput : TestList ZeroOrMoreNewline { $1 }++ZeroOrMoreNewline :: { () }+ZeroOrMoreNewline + : {- empty -} { () }+ | ZeroOrMoreNewline newline { () }+ +{-+ decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE+ decorators: decorator++ decorated: decorators (classdef | funcdef)+-}++-- Complete++Decorator :: { Decorator }+Decorator + : '@' DottedName OptionalArgList newline { Decorator { decorator_name = $2, decorator_args = $3 } }++Decorators :: { [Decorator] }+Decorators : DecoratorsRev { reverse $1 }++DecoratorsRev :: { [Decorator] }+DecoratorsRev + : Decorator { [$1] }+ | DecoratorsRev Decorator { $2 : $1 }++Decorated :: { Statement }+Decorated + : Decorators ClassOrFunction { Decorated { decorated_decorators = $1, decorated_def = $2 } } ++ClassOrFunction :: { Statement }+ClassOrFunction + : ClassDef { $1 }+ | FuncDef { $1 }++-- funcdef: 'def' NAME parameters ['->' test] ':' suite ++-- Complete++FuncDef :: { Statement }+FuncDef + : def Name Parameters OptionalResultAnnotation ':' Suite+ { Fun { fun_name = $2 , fun_args = $3, fun_result_annotation = $4, fun_body = $6 } }++OptionalResultAnnotation :: { Maybe Expr }+OptionalResultAnnotation+ : {- empty -} { Nothing }+ | '->' Test { Just $2 }++-- parameters: '(' [typedargslist] ')'++Parameters :: { [Parameter] }+Parameters : '(' TypedArgsList ')' { $2 }++{- + typedargslist: ((tfpdef ['=' test] ',')*+ ('*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef)+ | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) +-} ++-- Complete. ++{- Note the grammar allows an optional trailing comma, but only after the+ positional arguments. If varargs are used (the star forms) then the+ optional comma is not allowed. Why is this so? I don't know.++ The code below uses right recursion extensively. The Happy docs say that+ there can be problems with this:++ http://www.haskell.org/happy/doc/html/sec-sequences.html#sec-separators++ "right-recursive rules require stack space proportional to the length + of the list being parsed. This can be extremely important where long sequences + are involved, for instance in automatically generated output."++ At the moment it seems easier to write using right recursion, but+ we may want to re-visit the use of right recursion at some point.+-} ++TypedArgsList :: { [Parameter] }+TypedArgsList : Params { $1 }++Params :: { [Parameter] }+Params+ : {- empty -} { [] }+ | Star { [$1] }+ | StarStar { [$1] }+ | Param { [$1] }+ | Param ',' Params { $1 : $3 }+ | Star ',' StarParams { $1 : $3 }++StarParams :: { [Parameter] }+StarParams + : Param { [$1] }+ | Param ',' StarParams { $1 : $3 }+ | StarStar { [$1] }+ +-- tfpdef: NAME [':' test]+-- Complete++TfpDef :: { (Ident, Maybe Expr) }+TfpDef : Name OptionalColonTest { ($1, $2) }++OptionalColonTest :: { Maybe Expr }+OptionalColonTest + : {- empty -} { Nothing }+ | ':' Test { Just $2 }++OptionalDefault :: { Maybe Expr }+OptionalDefault + : {- empty -} { Nothing }+ | '=' Test { Just $2 }++Param :: { Parameter }+Param + : TfpDef OptionalDefault { makeParam $1 $2 }++Star :: { Parameter }+Star : '*' OptionalTfpDef { makeStarParam $2 }++OptionalTfpDef :: { Maybe (Ident, Maybe Expr) }+OptionalTfpDef + : {- empty -} { Nothing }+ | TfpDef { Just $1 }++StarStar :: { Parameter }+StarStar : '**' TfpDef { makeStarStarParam $2 }++{- + varargslist: ((vfpdef ['=' test] ',')* ('*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef) | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) ++ vfpdef: NAME+-}++-- Complete++{- + There is some tedious similarity in these rules to the ones for+ TypedArgsList. VarArgsList is used for lambda functions, and they+ do not have parentheses around them (unlike function definitions).+ Therefore lambda parameters cannot have the optional annotations+ that normal functions can, because the annotations are introduced+ using a colon. This would cause ambibguity with the colon+ that marks the end of the lambda parameter list!++ See the remarks about right recursion in the comments for+ TypedArgsList.+-}++VarArgsList :: { [Parameter] }+VarArgsList : VParams { $1 }++VParams :: { [Parameter] }+VParams+ : {- empty -} { [] }+ | VStar { [$1] }+ | VStarStar { [$1] }+ | VParam { [$1] }+ | VParam ',' VParams { $1 : $3 }+ | VStar ',' VStarParams { $1 : $3 }++VStarParams :: { [Parameter] }+VStarParams + : VParam { [$1] }+ | VParam ',' VStarParams { $1 : $3 }+ | VStarStar { [$1] }++VParam :: { Parameter }+VParam : VfpDef OptionalDefault { makeParam ($1, Nothing) $2 }++VStar :: { Parameter }+VStar : '*' OptionalVfpDef { makeStarParam $2 }++OptionalVfpDef :: { Maybe (Ident, Maybe Expr) }+OptionalVfpDef + : {- empty -} { Nothing }+ | VfpDef { Just ($1, Nothing) }++VStarStar :: { Parameter }+VStarStar : '**' VfpDef { makeStarStarParam ($2, Nothing) }++VfpDef :: { Ident }+VfpDef : ident { Ident $1 }++Name :: { Ident }+Name : ident { Ident $1 }++-- stmt: simple_stmt | compound_stmt ++-- Complete++Stmt :: { [Statement] }+Stmt + : SimpleStmt { $1 }+ | CompoundStmt { [$1] } ++-- simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE ++-- Complete++SimpleStmt :: { [Statement] }+SimpleStmt : SmallStmts OptionalSemiColon newline { reverse $1 }++OptionalSemiColon :: { () }+OptionalSemiColon + : {- empty -} { () }+ | ';' { () }++SmallStmts :: { [Statement] }+SmallStmts : SmallStmt { [$1] }+ | SmallStmts ';' SmallStmt { $3 : $1 }++{-+small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt |+ import_stmt | global_stmt | nonlocal_stmt | assert_stmt)+-}++-- Complete++SmallStmt :: { Statement }+SmallStmt + : ExprStmt { $1 }+ | DelStmt { $1 }+ | PassStmt { $1 }+ | FlowStmt { $1 }+ | ImportStmt { $1 }+ | GlobalStmt { $1 }+ | NonLocalStmt { $1 }+ | AssertStmt { $1 }++-- expr_stmt: testlist (augassign (yield_expr|testlist) | ('=' (yield_expr|testlist))*)++-- Complete++ExprStmt :: { Statement }+ExprStmt : TestList Assignment { makeAssignmentOrExpr $1 $2 }++Assignment :: { Either [Expr] (AssignOp, Expr) }+Assignment + : NormalAssign { Left $1 }+ | AugAssign { Right $1 }++NormalAssign :: { [Expr] }+NormalAssign : ZeroOrMoreAssignRev { reverse $1 }++ZeroOrMoreAssignRev :: { [Expr] }+ZeroOrMoreAssignRev + : {- empty -} { [] }+ | ZeroOrMoreAssignRev '=' YieldOrTestList { $3 : $1 }++YieldOrTestList :: { Expr }+YieldOrTestList + : YieldExpr { $1 }+ | TestList { $1 }++{- + augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' |+ '<<=' | '>>=' | '**=' | '//=') +-}++-- Complete++AugAssign :: { (AssignOp, Expr) }+AugAssign : AugAssignOp YieldOrTestList { ($1, $2) }++AugAssignOp :: { AssignOp }+AugAssignOp + : '+=' { AST.PlusAssign }+ | '-=' { AST.MinusAssign } + | '*=' { AST.MultAssign }+ | '/=' { AST.DivAssign }+ | '%=' { AST.ModAssign } + | '**=' { AST.PowAssign }+ | '&=' { AST.BinAndAssign } + | '|=' { AST.BinOrAssign }+ | '^=' { AST.BinXorAssign }+ | '<<=' { AST.LeftShiftAssign }+ | '>>=' { AST.RightShiftAssign }+ | '//=' { AST.FloorDivAssign } ++-- del_stmt: 'del' exprlist+-- Complete++DelStmt :: { Statement }+DelStmt : del ExprList { AST.Delete { del_exprs = $2 } }++-- pass_stmt: 'pass'+-- Complete++PassStmt :: { Statement }+PassStmt : pass { AST.Pass }++-- flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt+-- Complete++FlowStmt :: { Statement }+FlowStmt + : BreakStmt { $1 }+ | ContinueStmt { $1 }+ | ReturnStmt { $1 }+ | RaiseStmt { $1 }+ | YieldStmt { $1 }++-- break_stmt: 'break'+-- Complete++BreakStmt :: { Statement }+BreakStmt : break { AST.Break } ++-- continue_stmt: 'continue'+-- Complete++ContinueStmt :: { Statement }+ContinueStmt : continue { AST.Continue } ++-- return_stmt: 'return' [testlist]+-- Complete ++ReturnStmt :: { Statement }+ReturnStmt : return OptionalTestList { AST.Return { return_expr = $2 }}++-- yield_stmt: yield_expr+-- Complete++YieldStmt :: { Statement }+YieldStmt : YieldExpr { StmtExpr { stmt_expr = $1 } } ++-- raise_stmt: 'raise' [test ['from' test]]+-- Complete ++RaiseStmt :: { Statement }+RaiseStmt : raise OptionalTestFrom { AST.Raise { raise_expr = $2 }}++OptionalTestFrom :: { Maybe (Expr, Maybe Expr) }+OptionalTestFrom + : {- empty -} { Nothing }+ | Test OptionalFrom { Just ($1, $2) }++OptionalFrom :: { Maybe Expr }+OptionalFrom + : {- empty -} { Nothing }+ | from Test { Just $2 }++-- import_stmt: import_name | import_from+-- Complete++ImportStmt :: { Statement }+ImportStmt + : ImportName { $1 }+ | ImportFrom { $1 }++{-+ # note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS+ import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+)+ 'import' ('*' | '(' import_as_names ')' | import_as_names))+-}++ImportFrom :: { Statement }+ImportFrom : from ImportModule import StarOrAsNames { FromImport { from_module = $2, from_items = $4 }}++StarOrAsNames :: { FromItems }+StarOrAsNames+ : '*' { ImportEverything }+ | '(' ImportAsNames ')' { $2 }+ | ImportAsNames { $1 } ++ImportModule :: { ImportModule }+ImportModule + : '.' { ImportDot }+ | '...' { ImportRelative (ImportRelative ImportDot) }+ | DottedName { ImportName $1 }+ | '.' ImportModule { ImportRelative $2 }+ | '...' ImportModule { ImportRelative (ImportRelative (ImportRelative $2)) }++-- import_as_name: NAME ['as' NAME]+ImportAsName :: { FromItem }+ImportAsName + : Name OptionalAsName { FromItem { from_item_name = $1, from_as_name = $2 }}++-- import_as_names: import_as_name (',' import_as_name)* [',']+ImportAsNames :: { FromItems }+ImportAsNames : ImportAsNamesRev OptionalComma { FromItems (reverse $1) }++ImportAsNamesRev :: { [FromItem] }+ImportAsNamesRev+ : ImportAsName { [$1] }+ | ImportAsNamesRev ',' ImportAsName { $3 : $1 }++-- import_name: 'import' dotted_as_names++ImportName :: { Statement }+ImportName : import DottedAsNames { AST.Import { import_items = $2 }}++-- dotted_as_names: dotted_as_name (',' dotted_as_name)*++DottedAsNames :: { [ImportItem] }+DottedAsNames : OneOrMoreDottedAsNamesRev { reverse $1 }++OneOrMoreDottedAsNamesRev :: { [ImportItem] }+OneOrMoreDottedAsNamesRev+ : DottedAsName { [$1] }+ | OneOrMoreDottedAsNamesRev ',' DottedAsName { $3 : $1 }++-- dotted_as_name: dotted_name ['as' NAME]++DottedAsName :: { ImportItem }+DottedAsName + : DottedName OptionalAsName + { ImportItem { import_item_name = $1, import_as_name = $2 }}++-- dotted_name: NAME ('.' NAME)* +-- Complete++DottedName :: { DottedName }+DottedName : Name DotNames { $1 : reverse $2 }++DotNames :: { DottedName }+DotNames + : {- empty -} { [] }+ | DotNames '.' Name { $3 : $1 }++-- global_stmt: 'global' NAME (',' NAME)*+-- Complete++GlobalStmt :: { Statement }+GlobalStmt : global OneOrMoreNames { AST.Global { global_vars = $2 }}++OneOrMoreNames :: { [Ident] }+OneOrMoreNames : OneOrMoreNamesRev { reverse $1 }++OneOrMoreNamesRev :: { [Ident] }+OneOrMoreNamesRev+ : Name { [$1] }+ | OneOrMoreNamesRev ',' Name { $3 : $1 }++-- nonlocal_stmt: 'nonlocal' NAME (',' NAME)*++NonLocalStmt :: { Statement }+NonLocalStmt : nonlocal OneOrMoreNames { AST.NonLocal { nonLocal_vars = $2 }}++-- assert_stmt: 'assert' test [',' test]++AssertStmt :: { Statement }+AssertStmt : assert TestListRev { AST.Assert { assert_exprs = reverse $2 }}++-- compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated +-- Complete++CompoundStmt :: { Statement }+CompoundStmt + : IfStmt { $1 } + | WhileStmt { $1 }+ | ForStmt { $1 }+ | TryStmt { $1 }+ | WithStmt { $1 }+ | FuncDef { $1 } + | ClassDef { $1 }+ | Decorated { $1 }++-- if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]+-- Complete++IfStmt :: { Statement }+IfStmt : IfConditionals OptionalElse { Conditional { cond_guards = $1, cond_else = $2 } }++IfConditionals :: { [(Expr,[Statement])] }+IfConditionals : If ZeroOrMoreElifs { $1 : $2 }++If :: { (Expr, [Statement]) }+If : if Test ':' Suite { ($2, $4) }++ZeroOrMoreElifs :: { [(Expr, [Statement])]}+ZeroOrMoreElifs : ZeroOrMoreElifsRev { reverse $1 }++ZeroOrMoreElifsRev :: { [(Expr, [Statement])]}+ZeroOrMoreElifsRev + : {- empty -} { [] }+ | ZeroOrMoreElifsRev elif Test ':' Suite { ($3, $5) : $1 }++OptionalElse :: { [Statement] }+OptionalElse + : {- empty -} { [] }+ | else ':' Suite { $3 }++-- while_stmt: 'while' test ':' suite ['else' ':' suite] +-- Complete++WhileStmt :: { Statement }+WhileStmt : while Test ':' Suite OptionalElse { AST.While { while_cond = $2 , while_body = $4, while_else = $5 } }++-- for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +-- Complete++ForStmt :: { Statement }+ForStmt + : for ExprList in TestList ':' Suite OptionalElse + { AST.For { for_targets = $2, for_generator = $4, for_body = $6, for_else = $7 } }++{- + try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ ['else' ':' suite] ['finally' ':' suite] | 'finally' ':' suite))+-}+-- Complete++TryStmt :: { Statement }+TryStmt : try ':' Suite Handlers { makeTry $3 $4 }++Handlers :: { ([Handler], [Statement], [Statement]) }+Handlers + : OneOrMoreExceptClauses OptionalElse OptionalFinally { ($1, $2, $3) }+ | finally ':' Suite { ([], [], $3) }++OptionalFinally :: { [Statement] }+OptionalFinally + : {- empty -} { [] }+ | finally ':' Suite { $3 }++OneOrMoreExceptClauses :: { [Handler] }+OneOrMoreExceptClauses : OneOrMoreExceptClausesRev { reverse $1 }++OneOrMoreExceptClausesRev :: { [Handler] }+OneOrMoreExceptClausesRev + : Handler { [$1] }+ | OneOrMoreExceptClausesRev Handler { $2 : $1 }++Handler :: { Handler }+Handler : ExceptClause ':' Suite { ($1, $3) }++{- + with_stmt: 'with' test [ with_var ] ':' suite+ with_var: 'as' expr+-}+-- Complete++WithStmt :: { Statement }+WithStmt : with Test OptionalAs ':' Suite + { AST.With { with_context = $2, with_as = $3, with_body = $5 } }++OptionalAs :: { Maybe Expr }+OptionalAs + : {- empty -} { Nothing }+ | as Expr { Just $2 }++-- except_clause: 'except' [test ['as' NAME]] +-- Complete++ExceptClause :: { ExceptClause }+ExceptClause : except ExceptExpr { $2 }++ExceptExpr :: { ExceptClause }+ExceptExpr + : {- empty -} { Nothing }+ | Test OptionalAsName { Just ($1, $2) }++OptionalAsName :: { Maybe Ident }+OptionalAsName + : {- empty -} { Nothing }+ | as Name { Just $2 }++-- suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT +-- Complete, but we don't have a newline before indent b/c it is redundant++Suite :: { [Statement] }+Suite + : SimpleStmt { $1 }+ | {- no newline here! -} indent OneOrMoreStmts dedent { $2 } ++OneOrMoreStmts :: { [Statement] }+OneOrMoreStmts : OneOrMoreStmtsRec { reverse (concat $1) }++OneOrMoreStmtsRec :: { [[Statement]] }+OneOrMoreStmtsRec + : Stmt { [$1] }+ | OneOrMoreStmtsRec Stmt { $2 : $1 }++-- test: or_test ['if' or_test 'else' test] | lambdef+-- Complete++Test :: { Expr }+Test + : OrTest TestCond { makeConditionalExpr $1 $2 }+ | LambDef { $1 }++TestCond :: { Maybe (Expr, Expr) }+TestCond + : {- empty -} { Nothing }+ | if OrTest else Test { Just ($2, $4) }++-- test_nocond: or_test | lambdef_nocond+-- Complete ++TestNoCond :: { Expr }+TestNoCond+ : OrTest { $1 }+ | LambDefNoCond { $1 }++-- lambdef: 'lambda' [varargslist] ':' test+-- Complete++LambDef :: { Expr }+LambDef : lambda VarArgsList ':' Test { AST.Lambda $2 $4 }++-- lambdef_nocond: 'lambda' [varargslist] ':' test_nocond+-- Complete++LambDefNoCond :: { Expr }+LambDefNoCond : lambda VarArgsList ':' TestNoCond { AST.Lambda $2 $4 }++-- or_test: and_test ('or' and_test)* +-- Complete++OrTest :: { Expr }+OrTest : AndTest OrSequence { makeBinOp $1 $2 }++OrSequence :: { [(Op, Expr)] }+OrSequence + : {- empty -} { [] }+ | OrSequence or AndTest { (AST.Or, $3) : $1 }++-- and_test: not_test ('and' not_test)* +-- Complete ++AndTest :: { Expr }+AndTest : NotTest AndSequence { makeBinOp $1 $2 }++AndSequence :: { [(Op, Expr)] }+AndSequence + : {- empty -} { [] }+ | AndSequence and NotTest { (AST.And, $3) : $1 }++-- not_test: 'not' not_test | comparison +-- Complete++NotTest :: { Expr }+NotTest + : not NotTest { UnaryOp {operator = AST.Not, op_arg = $2} }+ | Comparison { $1 }++-- comparison: star_expr (comp_op star_expr)*+-- Complete++Comparison :: { Expr }+Comparison : StarExpr CompSequence { makeBinOp $1 $2 }++CompSequence :: { [(Op, Expr)] }+CompSequence + : {- empty -} { [] }+ | CompSequence CompOp StarExpr { ($2, $3) : $1 }++-- comp_op: '<'|'>'|'=='|'>='|'<='|'!='|'in'|'not' 'in'|'is'|'is' 'not' +-- Complete++CompOp :: { Op }+CompOp + : '<' { AST.LessThan }+ | '>' { AST.GreaterThan }+ | '==' { AST.Equality }+ | '>=' { AST.GreaterThanEquals }+ | '<=' { AST.LessThanEquals }+ | '!=' { AST.NotEquals }+ | in { AST.In }+ | not in { AST.NotIn }+ | IsOp { $1 }++IsOp :: { Op }+IsOp : is NotPart { $2 }++NotPart :: { Op }+NotPart + : {- empty -} { AST.Is }+ | not { AST.IsNot } ++-- star_expr: ['*'] expr +-- Incomplete+{- + XXX The grammar grossly over-states the places where a starred expression can occur.+ It leads to an ambiguity because of the starred argument lists. ++ I think this is a bug in the grammar, and it will need more investigation to see if+ it can be fixed.+-}++StarExpr :: { Expr }+StarExpr : Expr { $1 }+{-+ : '*' Expr { Starred { starred_expr = $2 }} + | Expr { $1 }+-}++-- expr: xor_expr ('|' xor_expr)* +-- Complete++Expr :: { Expr }+Expr : XorExpr BinaryOrSequence { makeBinOp $1 $2 }++BinaryOrSequence :: { [(Op, Expr)] }+BinaryOrSequence + : {- empty -} { [] }+ | BinaryOrSequence '|' XorExpr { (AST.BinaryOr, $3) : $1 }++-- xor_expr: and_expr ('^' and_expr)* +-- Complete++XorExpr :: { Expr }+XorExpr : AndExpr XorSequence { makeBinOp $1 $2 }++XorSequence :: { [(Op, Expr)] }+XorSequence + : {- empty -} { [] }+ | XorSequence '^' AndExpr { (AST.Xor, $3) : $1 }++-- and_expr: shift_expr ('&' shift_expr)* +-- Complete++AndExpr :: { Expr }+AndExpr : ShiftExpr BinaryAndSequence { makeBinOp $1 $2 }++BinaryAndSequence :: { [(Op, Expr)] }+BinaryAndSequence + : {- empty -} { [] }+ | BinaryAndSequence '&' ShiftExpr { (AST.BinaryAnd, $3) : $1 }++-- shift_expr: arith_expr (('<<'|'>>') arith_expr)* +-- Complete++ShiftExpr :: { Expr }+ShiftExpr : ArithExpr ShiftSequence { makeBinOp $1 $2 }++ShiftSequence :: { [(Op, Expr)] }+ShiftSequence + : {- empty -} { [] }+ | ShiftSequence ShiftOp ArithExpr { ($2, $3) : $1 }++ShiftOp :: { Op }+ShiftOp + : '<<' { AST.ShiftLeft }+ | '>>' { AST.ShiftRight }++-- arith_expr: term (('+'|'-') term)*+-- Complete++ArithExpr :: { Expr }+ArithExpr : Term TermSequence { makeBinOp $1 $2 }++TermSequence :: { [(Op, Expr)] }+TermSequence + : {- empty -} { [] }+ | TermSequence ArithOp Term { ($2, $3) : $1 }++ArithOp :: { Op }+ArithOp + : '+' { AST.Plus }+ | '-' { AST.Minus }++-- term: factor (('*'|'/'|'%'|'//') factor)* +-- Complete++Term :: { Expr }+Term : Factor FactorSequence { makeBinOp $1 $2 }++FactorSequence :: { [(Op, Expr)] }+FactorSequence + : {- empty -} { [] }+ | FactorSequence MultDivOp Factor { ($2, $3) : $1 }++MultDivOp :: { Op }+MultDivOP + : '*' { AST.Multiply } + | '/' { AST.Divide }+ | '%' { AST.Modulo }+ | floordiv { AST.FloorDivide }++-- factor: ('+'|'-'|'~') factor | power +-- Complete++Factor :: { Expr }+Factor + : '+' Factor { UnaryOp { operator = AST.Plus, op_arg = $2 } } + | '-' Factor { UnaryOp { operator = AST.Minus, op_arg = $2 } } + | '~' Factor { UnaryOp { operator = AST.Invert, op_arg = $2 } } + | Power { $1 }++-- power: atom trailer* ['**' factor]+-- Complete, but maybe we should factor out the common prefix?++Power :: { Expr }+Power : Atom ZeroOrMoreTrailer { addTrailer $1 $2 }+ | Atom ZeroOrMoreTrailer '**' Factor + { makeBinOp (addTrailer $1 $2) [(AST.Exponent, $4)] } ++ZeroOrMoreTrailer :: { [Trailer] }+ZeroOrMoreTrailer : ZeroOrMoreTrailerRev { reverse $1 }++ZeroOrMoreTrailerRev :: { [Trailer] }+ZeroOrMoreTrailerRev + : {- empty -} { [] }+ | ZeroOrMoreTrailerRev Trailer { $2 : $1 }++{- + atom: ('(' [yield_expr|testlist_comp] ')' |+ '[' [testlist_comp] ']' |+ '{' [dictorsetmaker] '}' |+ NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False')+-}+-- Incomplete++Atom :: { Expr }+Atom : ParenForm { $1 } + | ListForm { $1 }+ | DictOrSetForm { $1 }+ | Name { AST.Var $1 }+ | integer { AST.Int $1 }+ | float { AST.Float $1 }+ | imaginary { AST.Imaginary { imaginary_value = $1 }}+ | OneOrMoreStrings { AST.Strings (reverse $1) }+ | OneOrMoreByteStrings { AST.ByteStrings (reverse $1) }+ | '...' { AST.Ellipsis }+ | none { AST.None }+ | true { AST.Bool Prelude.True }+ | false { AST.Bool Prelude.False }++ParenForm :: { Expr }+ParenForm : '(' YieldOrTestListComp ')' { $2 }++ListForm :: { Expr }+ListForm + : '[' ']' { List { list_exprs = [] } }+ | '[' TestListComp ']' { makeListForm $2 }++DictOrSetForm :: { Expr }+DictOrSetForm+ : '{' '}' { Dictionary { dict_mappings = [] }}+ | '{' DictOrSetMaker '}' { $2 }++YieldOrTestListComp :: { Expr }+YieldOrTestListComp + : {- empty -} { Tuple { tuple_exprs = [] } }+ | YieldExpr { $1 }+ | TestListComp { either id (\c -> Generator { gen_comprehension = c }) $1 } ++OneOrMoreStrings :: { [String] }+OneOrMoreStrings+ : string { [$1] }+ | OneOrMoreStrings string { $2 : $1 }++OneOrMoreByteStrings :: { [BS.ByteString] }+OneOrMoreByteStrings+ : bytestring { [$1] }+ | OneOrMoreByteStrings bytestring { $2 : $1 }++-- testlist_comp: test ( comp_for | (',' test)* [','] )+-- Complete ++TestListComp :: { Either Expr (Comprehension Expr) }+TestListComp+ : TestList { Left $1 }+ | Test CompFor { Right (makeComprehension $1 $2) }++-- trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +-- Complete ++Trailer :: { Trailer }+Trailer + : '(' ArgList ')' { TrailerCall $2 }+ | '[' SubscriptList ']' { TrailerSubscript $2 } + | '.' Name { TrailerDot $2 }++-- subscriptlist: subscript (',' subscript)* [',']++SubscriptList :: { [Subscript] }+SubscriptList : OneOrMoreSubsRev OptionalComma { reverse $1 }++OneOrMoreSubsRev :: { [Subscript] }+OneOrMoreSubsRev+ : Subscript { [$1] }+ | OneOrMoreSubsRev ',' Subscript { $3 : $1 }++-- subscript: test | [test] ':' [test] [sliceop]++Subscript :: { Subscript }+Subscript+ : Test { SubscriptExpr $1 }+ | OptionalTest ':' OptionalTest OptionalSliceOp { SubscriptSlice $1 $3 $4 }++OptionalTest :: { Maybe Expr }+OptionalTest+ : {- empty -} { Nothing }+ | Test { Just $1 }++OptionalSliceOp :: { Maybe (Maybe Expr) }+OptionalSliceOp + : {- empty -} { Nothing }+ | SliceOp { Just $1 }++-- sliceop: ':' [test]++SliceOp :: { Maybe Expr }+SliceOp : ':' OptionalTest { $2 }++-- exprlist: star_expr (',' star_expr)* [',']+-- Complete++ExprList :: { [Expr] }+ExprList : ExprListRev OptionalComma { reverse $1 }+ +OptionalComma :: { Bool }+OptionalComma + : {- empty -} { False }+ | ',' { True } ++ExprListRev :: { [Expr] }+ExprListRev + : StarExpr { [$1] }+ | ExprListRev ',' StarExpr { $3 : $1 }++-- testlist: test (',' test)* [',']+-- Complete++-- Some trickery here because the of the optional trailing comma, which+-- could turn a normal expression into a tuple.+-- Very occasionally, TestList is used to generate something which is not+-- a tuple (such as the square bracket notation in list literals). Therefore+-- it would seem like a good idea to not return a tuple in this case, but+-- a list of expressions. However this would complicate a lot of code+-- since we would have to carry around the optional comma information.+-- I've decided to leave it as a tuple, and in special cases, unpack the+-- tuple and pull out the list of expressions.++TestList :: { Expr }+TestList : TestListRev OptionalComma { makeTupleOrExpr (reverse $1) $2 }+ +TestListRev :: { [Expr] }+TestListRev + : Test { [$1] }+ | TestListRev ',' Test { $3 : $1 }++{- + dictorsetmaker: ( (test ':' test (comp_for | (',' test ':' test)* [','])) |+ (test (comp_for | (',' test)* [','])) )+-}++DictOrSetMaker :: { Expr }+DictOrSetMaker+ : Test ':' Test DictRest { makeDictionary ($1, $3) $4 } + | Test SetRest { makeSet $1 $2 } ++DictRest :: { Either CompFor [(Expr, Expr)] }+DictRest+ : CompFor { Left $1 }+ | ZeroOrMoreDictMappings OptionalComma { Right (reverse $1) }++ZeroOrMoreDictMappings :: { [(Expr, Expr)] }+ZeroOrMoreDictMappings+ : {- empty -} { [] }+ | ZeroOrMoreDictMappings ',' Test ':' Test { ($3,$5) : $1 }++SetRest :: { Either CompFor [Expr] }+SetRest+ : CompFor { Left $1 }+ | ZeroOrMoreCommaTest OptionalComma { Right (reverse $1) }++ZeroOrMoreCommaTest :: { [Expr] }+ZeroOrMoreCommaTest + : {- empty -} { [] }+ | ZeroOrMoreCommaTest ',' Test { $3 : $1 }++-- classdef: 'class' NAME ['(' [arglist] ')'] ':' suite+-- Complete++ClassDef :: { Statement }+ClassDef + : class Name OptionalArgList ':' Suite + { AST.Class { class_name = $2, class_args = $3, class_body = $5 }}++OptionalArgList :: { [Argument] }+OptionalArgList + : {- empty -} { [] }+ | '(' ArgList ')' { $2 }++{- + arglist: (argument ',')* (argument [',']+ |'*' test (',' argument)* [',' '**' test]+ |'**' test)+-}++{-+ Deviates slightly from the grammar because we allow empty arg lists.+ The grammar allows for this by making arg lists non-empty but optional.+ Works out the same in the end.+-}++ArgList :: { [Argument] }+ArgList + : {- empty -} { [] }+ | '*' Test { [ArgVarArgsPos { arg_expr = $2 }] }+ | '**' Test { [ArgVarArgsKeyword { arg_expr = $2 }] }+ | Argument { [$1] }+ | Argument ',' ArgList { $1 : $3 }+ | '*' Test ',' StarArgs { ArgVarArgsPos { arg_expr = $2 } : $4 }++StarArgs :: { [Argument] }+StarArgs+ : Argument { [$1] }+ | Argument ',' StarArgs { $1 : $3 }+ | '**' Test { [ArgVarArgsKeyword { arg_expr = $2 }] }++-- argument: test [comp_for] | test '=' test # Really [keyword '='] test++Argument :: { Argument }+Argument+ : Name '=' Test { ArgKeyword { arg_keyword = $1, arg_expr = $3 }}+ | Test { ArgExpr { arg_expr = $1 }} + | Test CompFor { ArgExpr { arg_expr = Generator { gen_comprehension = makeComprehension $1 $2 }}}++-- comp_iter: comp_for | comp_if+-- Complete++CompIter :: { CompIter }+CompIter+ : CompFor { IterFor $1 }+ | CompIf { IterIf $1 } ++-- comp_for: 'for' exprlist 'in' or_test [comp_iter]++CompFor :: { CompFor }+CompFor : for ExprList in OrTest OptionalCompIter + { CompFor { comp_for_exprs = $2, comp_in_expr = $4, comp_for_iter = $5 }}++OptionalCompIter :: { Maybe CompIter }+OptionalCompIter+ : {- empty -} { Nothing }+ | CompIter { Just $1 }++-- comp_if: 'if' test_nocond [comp_iter]++CompIf :: { CompIf }+CompIf : if TestNoCond OptionalCompIter { CompIf { comp_if = $2, comp_if_iter = $3 } }++-- testlist1: test (',' test)*+-- Not used in the rest of the grammar!++-- encoding_decl: NAME+-- Not used in the rest of the grammqr!++-- yield_expr: 'yield' [testlist] +-- Complete++YieldExpr :: { Expr }+YieldExpr : yield OptionalTestList { AST.Yield { yield_expr = $2 } }++OptionalTestList :: { Maybe Expr }+OptionalTestList + : {- empty -} { Nothing }+ | TestList { Just $1 }++{+-- Put additional Haskell code in here if needed.++}
+ src/Language/Python/Version3/Parser/ParserMonad.hs view
@@ -0,0 +1,211 @@+{-# OPTIONS #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Version3.Parser.ParserMonad +-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- Monad support for Python parser and lexer. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.ParserMonad + ( P+ , execParser+ , runParser+ , failP+ , thenP+ , returnP+ , setLocation+ , getLocation+ , getInput+ , setInput+ , getLastToken+ , setLastToken+ , ParseError (ParseError)+ , State (..)+ , initialState+ , pushStartCode+ , popStartCode+ , getStartCode+ , getIndent+ , pushIndent+ , popIndent+ , getIndentStackDepth+ , getParen+ , pushParen+ , popParen+ , getParenStackDepth+ ) where++import Language.Python.Data.SrcLocation (SrcLocation (..))+import Language.Python.Version3.Parser.Token (Token (..))++-- | Parse error. A list of error messages and a source location.+newtype ParseError = ParseError ([String], SrcLocation) + deriving Show++data ParseResult a+ = POk !State a+ | PFailed [String] SrcLocation -- The error message and position++data State = + State + { location :: !SrcLocation -- position at current input location+ , input :: !String -- the current input+ , previousToken :: Token -- the previous token+ , startCodeStack :: [Int] -- a stack of start codes for the state of the lexer+ , indentStack :: [Int] -- a stack of source column positions of indentation levels+ , parenStack :: [Token] -- a stack of parens and brackets for indentation handling+ }++initialState :: SrcLocation -> String -> [Int] -> State+initialState initLoc inp scStack+ = State+ { location = initLoc + , input = inp+ , previousToken = initToken+ , startCodeStack = scStack+ , indentStack = [1]+ , parenStack = []+ }++newtype P a = P { unP :: State -> ParseResult a }++instance Monad P where+ return = returnP+ (>>=) = thenP+ fail m = getLocation >>= \loc -> failP loc [m]++execParser :: P a -> State -> Either ParseError a+execParser (P parser) initialState =+ case parser initialState of+ PFailed message errloc -> Left (ParseError (message, errloc))+ POk st result -> Right result++runParser :: P a -> State -> Either ParseError (State, a)+runParser (P parser) initialState =+ case parser initialState of+ PFailed message errloc -> Left (ParseError (message, errloc))+ POk st result -> Right (st, result)++initToken :: Token+initToken = Newline NoLocation++{-# INLINE returnP #-}+returnP :: a -> P a+returnP a = P $ \s -> POk s a++{-# INLINE thenP #-}+thenP :: P a -> (a -> P b) -> P b+(P m) `thenP` k = P $ \s ->+ case m s of+ POk s' a -> (unP (k a)) s'+ PFailed err loc -> PFailed err loc ++failP :: SrcLocation -> [String] -> P a+failP loc msg = P $ \_ -> PFailed msg loc ++setLocation :: SrcLocation -> P ()+setLocation loc = P $ \s -> POk (s { location = loc }) ()++getLocation :: P SrcLocation+getLocation = P $ \s@State{ location = loc } -> POk s loc ++getInput :: P String +getInput = P $ \s@State{ input = inp } -> POk s inp++setInput :: String -> P ()+setInput inp = P $ \s -> POk (s { input = inp }) ()++getLastToken :: P Token+getLastToken = P $ \s@State{ previousToken = tok } -> POk s tok++setLastToken :: Token -> P ()+setLastToken tok = P $ \s -> POk (s { previousToken = tok }) ()++pushStartCode :: Int -> P () +pushStartCode code = P newStack+ where + newStack s@State{ startCodeStack = scStack } + = POk (s { startCodeStack = code : scStack}) () ++popStartCode :: P ()+popStartCode = P newStack+ where + newStack s@State{ startCodeStack = scStack, location = loc } + = case scStack of+ [] -> PFailed err loc+ _:rest -> POk (s { startCodeStack = rest }) () + err = ["fatal error in lexer: attempt to pop empty start code stack"]++getStartCode :: P Int+getStartCode = P getCode+ where+ getCode s@State{ startCodeStack = scStack, location = loc }+ = case scStack of+ [] -> PFailed err loc+ code:_ -> POk s code+ err = ["fatal error in lexer: start code stack empty on getStartCode"]++pushIndent :: Int -> P () +pushIndent indent = P newStack+ where + newStack s@State{ indentStack = iStack } + = POk (s { indentStack = indent : iStack }) () ++popIndent :: P ()+popIndent = P newStack+ where + newStack s@State{ indentStack = iStack, location = loc } + = case iStack of+ [] -> PFailed err loc+ _:rest -> POk (s { indentStack = rest }) () + -- XXX this message needs fixing+ err = ["fatal error in lexer: attempt to pop empty indentation stack"]++getIndent :: P Int+getIndent = P get+ where+ get s@State{ indentStack = iStack, location = loc }+ = case iStack of+ [] -> PFailed err loc+ indent:_ -> POk s indent + -- XXX this message needs fixing+ err = ["fatal error in lexer: indent stack empty on getIndent"]++getIndentStackDepth :: P Int+getIndentStackDepth = P get+ where+ get s@State{ indentStack = iStack } = POk s (length iStack)++pushParen :: Token -> P () +pushParen symbol = P newStack+ where + newStack s@State{ parenStack = pStack } + = POk (s { parenStack = symbol : pStack }) () ++popParen :: P ()+popParen = P newStack+ where + newStack s@State{ parenStack = pStack, location = loc } + = case pStack of+ [] -> PFailed err loc+ _:rest -> POk (s { parenStack = rest }) () + -- XXX this message needs fixing+ err = ["fatal error in lexer: attempt to pop empty paren stack"]++getParen :: P (Maybe Token)+getParen = P get+ where+ get s@State{ parenStack = pStack }+ = case pStack of+ [] -> POk s Nothing + symbol:_ -> POk s (Just symbol) ++getParenStackDepth :: P Int+getParenStackDepth = P get+ where+ get s@State{ parenStack = pStack } = POk s (length pStack)
+ src/Language/Python/Version3/Parser/ParserUtils.hs view
@@ -0,0 +1,136 @@+{-# OPTIONS #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Version3.Parser.ParserUtils +-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- Various utilities to support the Python parser. +-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.ParserUtils where++import Language.Python.Version3.Syntax.AST as AST+import Language.Python.Version3.Parser.Token hiding (True, False)+import Language.Python.Version3.Parser.ParserMonad hiding (location)+import Language.Python.Data.SrcLocation +import Data.List (foldl')++makeConditionalExpr :: Expr -> Maybe (Expr, Expr) -> Expr+makeConditionalExpr e Nothing = e+makeConditionalExpr e (Just (cond, false_branch))+ = CondExpr+ { ce_true_branch = e+ , ce_condition = cond+ , ce_false_branch = false_branch+ }++makeBinOp :: Expr -> [(Op, Expr)] -> Expr+makeBinOp e es+ = foldl' (\e1 (op, e2) -> BinaryOp { operator = op, left_op_arg = e1, right_op_arg = e2 } )+ e (reverse es)++parseError :: Token -> P a +parseError token + = failP (location token) ["Unexpected token", show token] ++data Trailer+ = TrailerCall [Argument]+ | TrailerSubscript [Subscript] + | TrailerDot Ident++data Subscript+ = SubscriptExpr Expr+ | SubscriptSlice (Maybe Expr) (Maybe Expr) (Maybe (Maybe Expr)) ++isProperSlice :: Subscript -> Bool+isProperSlice (SubscriptSlice {}) = True+isProperSlice other = False++subscriptToSlice :: Subscript -> Slice+subscriptToSlice (SubscriptSlice lower upper stride)+ = SliceProper { slice_lower = lower, slice_upper = upper, slice_stride = stride }+subscriptToSlice (SubscriptExpr e)+ = SliceExpr { slice_expr = e }++subscriptToExpr :: Subscript -> Expr+subscriptToExpr (SubscriptExpr e) = e+-- this should never happen:+subscriptToExpr (SubscriptSlice {}) + = error "subscriptToExpr applied to a proper slice"++addTrailer :: Expr -> [Trailer] -> Expr+addTrailer+ = foldl' trail+ where+ trail :: Expr -> Trailer -> Expr+ trail e (TrailerCall args) = Call { call_fun = e, call_args = args }+ trail e (TrailerSubscript subs) + | any isProperSlice subs+ = SlicedExpr { slicee = e, slices = map subscriptToSlice subs }+ | otherwise + = Subscript { subscriptee = e, subscript_exprs = map subscriptToExpr subs }+ trail e (TrailerDot ident)+ = BinaryOp { operator = AST.Dot, left_op_arg = e, right_op_arg = Var ident }++makeTupleOrExpr :: [Expr] -> Bool -> Expr+makeTupleOrExpr [e] False = e+makeTupleOrExpr es@[e] True = Tuple { tuple_exprs = es }+makeTupleOrExpr es@(_:_) _ = Tuple { tuple_exprs = es } ++makeAssignmentOrExpr :: Expr -> Either [Expr] (AssignOp, Expr) -> Statement+makeAssignmentOrExpr e (Left es) + = makeNormalAssignment e es+ where+ makeNormalAssignment :: Expr -> [Expr] -> Statement+ makeNormalAssignment e [] = StmtExpr { stmt_expr = e } + makeNormalAssignment e es + = AST.Assign { assign_to = e : front, assign_expr = head back }+ where+ (front, back) = splitAt (len - 1) es+ len = length es +makeAssignmentOrExpr e1 (Right (op, e2)) + = makeAugAssignment e1 op e2+ where+ makeAugAssignment :: Expr -> AssignOp -> Expr -> Statement+ makeAugAssignment e1 op e2+ = AST.AugmentedAssign { aug_assign_to = e1, aug_assign_op = op, aug_assign_expr = e2 } ++makeTry :: Suite -> ([Handler], [Statement], [Statement]) -> Statement+makeTry body (handlers, elses, finally)+ = AST.Try { try_body = body, try_excepts = handlers, try_else = elses, try_finally = finally }++makeParam :: (Ident, Maybe Expr) -> Maybe Expr -> Parameter+makeParam (name, annot) defaultVal+ = Param { param_name = name, param_annotation = annot, param_default = defaultVal }++makeStarParam :: Maybe (Ident, Maybe Expr) -> Parameter+makeStarParam Nothing = EndPositional+makeStarParam (Just (name, annot))+ = VarArgsPos { param_name = name, param_annotation = annot }++makeStarStarParam :: (Ident, Maybe Expr) -> Parameter+makeStarStarParam (name, annot)+ = VarArgsKeyword { param_name = name, param_annotation = annot }++makeComprehension :: Expr -> CompFor -> Comprehension Expr+makeComprehension e for+ = Comprehension { comprehension_expr = e, comprehension_for = for }++makeListForm :: Either Expr (Comprehension Expr) -> Expr+makeListForm (Left tuple@(Tuple {})) = List { list_exprs = tuple_exprs tuple }+makeListForm (Left other) = List { list_exprs = [other] }+makeListForm (Right comprehension) = ListComp { list_comprehension = comprehension }++makeSet :: Expr -> Either CompFor [Expr] -> Expr+makeSet e (Left compFor)+ = SetComp { set_comprehension = Comprehension { comprehension_expr = e, comprehension_for = compFor }}+makeSet e (Right es) = Set { set_exprs = e:es }++makeDictionary :: (Expr, Expr) -> Either CompFor [(Expr,Expr)] -> Expr+makeDictionary e (Left compFor)+ = DictComp { dict_comprehension = Comprehension { comprehension_expr = e, comprehension_for = compFor }}+makeDictionary e (Right es) = Dictionary { dict_mappings = e:es }
+ src/Language/Python/Version3/Parser/Token.hs view
@@ -0,0 +1,136 @@+{-# OPTIONS #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Version3.Parser.Token +-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- Lexical tokens for the Python version 3 lexer. +-- See: <http://docs.python.org/dev/3.0/reference/lexical_analysis.html>+-----------------------------------------------------------------------------++module Language.Python.Version3.Parser.Token + ( Token (..)+ , Ident (..)+ )+where++import Language.Python.Data.SrcLocation (SrcLocation (..), Location (location))+import qualified Data.ByteString.Char8 as BS (ByteString)++-- | Identifier.+newtype Ident = Ident String+ deriving (Eq, Show, Ord)++-- | Lexical tokens.+data Token + -- Whitespace+ = Indent SrcLocation -- ^ Indentation: increase.+ | Dedent SrcLocation -- ^ Indentation: decrease.+ | Newline SrcLocation -- ^ Newline.++ -- Identifiers + | Identifier SrcLocation !String -- ^ Identifier.++ -- Literals+ | String SrcLocation !String -- ^ Literal: string.+ | ByteString SrcLocation !BS.ByteString -- ^ Literal: byte string.+ | Integer SrcLocation !Integer -- ^ Literal: integer.+ | Float SrcLocation !Double -- ^ Literal: floating point.+ | Imaginary SrcLocation !Double -- ^ Literal: imaginary number.++ -- Keywords+ | Def SrcLocation -- ^ Keyword: \'def\'. + | While SrcLocation -- ^ Keyword: \'while\'.+ | If SrcLocation -- ^ Keyword: \'if\'.+ | True SrcLocation -- ^ Keyword: \'True\'.+ | False SrcLocation -- ^ Keyword: \'False\'.+ | Return SrcLocation -- ^ Keyword: \'Return\'.+ | Try SrcLocation -- ^ Keyword: \'try\'.+ | Except SrcLocation -- ^ Keyword: \'except\'.+ | Raise SrcLocation -- ^ Keyword: \'raise\'.+ | In SrcLocation -- ^ Keyword: \'in\'.+ | Is SrcLocation -- ^ Keyword: \'is\'.+ | Lambda SrcLocation -- ^ Keyword: \'lambda\'.+ | Class SrcLocation -- ^ Keyword: \'class\'.+ | Finally SrcLocation -- ^ Keyword: \'finally\'.+ | None SrcLocation -- ^ Keyword: \'None\'+ | For SrcLocation -- ^ Keyword: \'for\'.+ | From SrcLocation -- ^ Keyword: \'from\'.+ | NonLocal SrcLocation -- ^ Keyword: \'nonlocal\'.+ | Global SrcLocation -- ^ Keyword: \'global\'.+ | With SrcLocation -- ^ Keyword: \'with\'.+ | As SrcLocation -- ^ Keyword: \'as\'.+ | Elif SrcLocation -- ^ Keyword: \'elif\'.+ | Yield SrcLocation -- ^ Keyword: \'yield\'.+ | Assert SrcLocation -- ^ Keyword: \'assert\'.+ | Import SrcLocation -- ^ Keyword: \'import\'.+ | Pass SrcLocation -- ^ Keyword: \'pass\'.+ | Break SrcLocation -- ^ Keyword: \'break\'.+ | Continue SrcLocation -- ^ Keyword: \'continue\'.+ | Delete SrcLocation -- ^ Keyword: \'del\'.+ | Else SrcLocation -- ^ Keyword: \'else\'.+ | Not SrcLocation -- ^ Keyword: \'not\'.+ | And SrcLocation -- ^ Keyword: boolean conjunction \'and\'.+ | Or SrcLocation -- ^ Keyword: boolean disjunction \'or\'.++ -- Delimiters+ | At SrcLocation -- ^ Delimiter: at sign \'\@\'. + | LeftRoundBracket SrcLocation -- ^ Delimiter: left round bracket \'(\'.+ | RightRoundBracket SrcLocation -- ^ Delimiter: right round bracket \')\'.+ | LeftSquareBracket SrcLocation -- ^ Delimiter: left square bracket \'[\'.+ | RightSquareBracket SrcLocation -- ^ Delimiter: right square bracket \']\'.+ | LeftBrace SrcLocation -- ^ Delimiter: left curly bracket \'{\'.+ | RightBrace SrcLocation -- ^ Delimiter: right curly bracket \'}\'.+ | Dot SrcLocation -- ^ Delimiter: dot (full stop) \'.\'.+ | Comma SrcLocation -- ^ Delimiter: comma \',\'.+ | SemiColon SrcLocation -- ^ Delimiter: semicolon \';\'.+ | Colon SrcLocation -- ^ Delimiter: colon \':\'.+ | Ellipsis SrcLocation -- ^ Delimiter: ellipses (three dots) \'...\'.+ | RightArrow SrcLocation -- ^ Delimiter: right facing arrow \'->\'.+ | Assign SrcLocation -- ^ Delimiter: assignment \'=\'.+ | PlusAssign SrcLocation -- ^ Delimiter: plus assignment \'+=\'.+ | MinusAssign SrcLocation -- ^ Delimiter: minus assignment \'-=\'.+ | MultAssign SrcLocation -- ^ Delimiter: multiply assignment \'*=\'+ | DivAssign SrcLocation -- ^ Delimiter: divide assignment \'/=\'.+ | ModAssign SrcLocation -- ^ Delimiter: modulus assignment \'%=\'.+ | PowAssign SrcLocation -- ^ Delimiter: power assignment \'**=\'.+ | BinAndAssign SrcLocation -- ^ Delimiter: binary-and assignment \'&=\'.+ | BinOrAssign SrcLocation -- ^ Delimiter: binary-or assignment \'|=\'.+ | BinXorAssign SrcLocation -- ^ Delimiter: binary-xor assignment \'^=\'.+ | LeftShiftAssign SrcLocation -- ^ Delimiter: binary-left-shift assignment \'<<=\'.+ | RightShiftAssign SrcLocation -- ^ Delimiter: binary-right-shift assignment \'>>=\'.+ | FloorDivAssign SrcLocation -- ^ Delimiter: floor-divide assignment \'//=\'.++ -- Operators+ | Plus SrcLocation -- ^ Operator: plus \'+\'.+ | Minus SrcLocation -- ^ Operator: minus: \'-\'.+ | Mult SrcLocation -- ^ Operator: multiply \'*\'.+ | Div SrcLocation -- ^ Operator: divide \'/\'.+ | GreaterThan SrcLocation -- ^ Operator: greater-than \'>\'.+ | LessThan SrcLocation -- ^ Operator: less-than \'<\'.+ | Equality SrcLocation -- ^ Operator: equals \'==\'.+ | GreaterThanEquals SrcLocation -- ^ Operator: greater-than-or-equals \'>=\'.+ | LessThanEquals SrcLocation -- ^ Operator: less-than-or-equals \'<=\'.+ | Exponent SrcLocation -- ^ Operator: exponential \'**\'.+ | BinaryOr SrcLocation -- ^ Operator: binary-or \'|\'.+ | Xor SrcLocation -- ^ Operator: binary-xor \'^\'.+ | BinaryAnd SrcLocation -- ^ Operator: binary-and \'&\'.+ | ShiftLeft SrcLocation -- ^ Operator: binary-shift-left \'<<\'.+ | ShiftRight SrcLocation -- ^ Operator: binary-shift-right \'>>\'.+ | Modulo SrcLocation -- ^ Operator: modulus \'%\'.+ | FloorDiv SrcLocation -- ^ Operator: floor-divide \'//\'.+ | Tilde SrcLocation -- ^ Operator: tilde \'~\'.+ | NotEquals SrcLocation -- ^ Operator: not-equals \'!=\'.++ -- Special cases+ | EOF -- ^ End of file (no source location). + deriving (Show, Eq, Ord)++-- XXX fixme+instance Location Token where+ location x = NoLocation+
+ src/Language/Python/Version3/Syntax/AST.hs view
@@ -0,0 +1,405 @@+{-# OPTIONS #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Version3.Syntax.AST +-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- Representation of the Python version 3 abstract syntax. +--+-- See: +--+-- * <http://docs.python.org/dev/3.0/reference/index.html> for an overview of the language. +--+-- * <http://docs.python.org/dev/3.0/reference/grammar.html> for the full grammar.+--+-- Note: there are cases where the AST is more liberal than the formal grammar+-- of the language. Therefore some care must be taken when constructing+-- Python programs using the raw AST. XXX At some point we should provide+-- smart constructors which ensure syntactic correctness of the AST.+-----------------------------------------------------------------------------++module Language.Python.Version3.Syntax.AST ( + -- * Modules+ Module (..)+ -- * Identifiers and dotted names+ , Ident (..)+ , DottedName+ -- * Statements, suites, parameters, decorators and assignment operators+ , Statement (..)+ , Suite+ , Parameter (..)+ , Decorator (..)+ , AssignOp (..)+ -- * Expressions, operators, arguments and slices+ , Expr (..)+ , Op (..)+ , Argument (..)+ , Slice (..)+ -- * Imports+ , ImportItem (..)+ , FromItem (..)+ , FromItems (..)+ , ImportModule (..)+ -- * Exceptions+ , Handler+ , ExceptClause+ -- * Comprehensions+ , Comprehension (..)+ , CompFor (..)+ , CompIf (..)+ , CompIter (..)+ )+ where++import Language.Python.Version3.Parser.Token ( Ident (..) ) +import qualified Data.ByteString.Char8 as BS++--------------------------------------------------------------------------------++-- | A module (Python source file). See <http://docs.python.org/dev/3.0/reference/toplevel_components.html>.+newtype Module = Module [Statement] -- ^ A module is just a sequence of top-level statements.+ deriving Show++-- | A block of statements. A suite is a group of statements controlled by a clause, +-- for example, the body of a loop. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html>.+type Suite = [Statement] ++-- | A compound name constructed with the dot operator.+type DottedName = [Ident]++-- | An entity imported using the \'import\' keyword.+-- See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-import-statement>.+data ImportItem = + ImportItem + { import_item_name :: DottedName -- ^ The name of module to import.+ , import_as_name :: Maybe Ident -- ^ An optional name to refer to the entity (the \'as\' name). + }+ deriving Show++-- | An entity imported using the \'from ... import\' construct.+-- See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-import-statement>+data FromItem = + FromItem + { from_item_name :: Ident -- ^ The name of the entity imported. + , from_as_name :: Maybe Ident -- ^ An optional name to refer to the entity (the \'as\' name).+ }+ deriving Show++-- | Items imported using the \'from ... import\' construct.+data FromItems + = ImportEverything -- ^ Import everything exported from the module.+ | FromItems [FromItem] -- ^ Import a specific list of items from the module.+ deriving Show++-- | A reference to the module to import from using the \'from ... import\' construct.+data ImportModule + = ImportRelative ImportModule -- ^ Relative import. A dot followed by something.+ | ImportDot -- ^ Relative import. Dot on its own.+ | ImportName DottedName -- ^ The name of the module to import from. + deriving Show++-- | Statements.+--+-- See:+--+-- * <http://docs.python.org/dev/3.0/reference/simple_stmts.html>+--+-- * <http://docs.python.org/dev/3.0/reference/compound_stmts.html>+data Statement + -- | Import statement.+ = Import { import_items :: [ImportItem] -- ^ Items to import.+ } + -- | From ... import statement.+ | FromImport + { from_module :: ImportModule -- ^ Module to import from.+ , from_items :: FromItems -- ^ Items to import.+ }+ -- | While loop. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-while-statement>.+ | While + { while_cond :: Expr -- ^ Loop condition.+ , while_body :: Suite -- ^ Loop body.+ , while_else :: Suite -- ^ Else clause.+ }+ -- | For loop. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-for-statement>.+ | For + { for_targets :: [Expr] -- ^ Loop variables.+ , for_generator :: Expr -- ^ Loop generator. + , for_body :: Suite -- ^ Loop body+ , for_else :: Suite -- ^ Else clause.+ }+ -- | Function definition. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#function-definitions>.+ | Fun + { fun_name :: Ident -- ^ Function name.+ , fun_args :: [Parameter] -- ^ Function parameter list.+ , fun_result_annotation :: Maybe Expr -- ^ Optional result annotation.+ , fun_body :: Suite -- ^ Function body.+ }+ -- | Class definition. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#class-definitions>.+ | Class + { class_name :: Ident -- ^ Class name.+ , class_args :: [Argument] -- ^ Class argument list.+ , class_body :: Suite -- ^ Class body.+ }+ -- | Conditional statement (if-elif-else). See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-if-statement>. + | Conditional + { cond_guards :: [(Expr, Suite)] -- ^ Sequence of if-elif conditional clauses.+ , cond_else :: Suite -- ^ Possibly empty unconditional else clause.+ }+ -- | Assignment statement. See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#assignment-statements>.+ | Assign + { assign_to :: [Expr] -- ^ Entity to assign to. XXX perhaps this should not be a list.+ , assign_expr :: Expr -- ^ Expression to evaluate.+ }+ -- | Augmented assignment statement. See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#augmented-assignment-statements>.+ | AugmentedAssign + { aug_assign_to :: Expr -- ^ Entity to assign to.+ , aug_assign_op :: AssignOp -- ^ Assignment operator (for example \'+=\').+ , aug_assign_expr :: Expr -- ^ Expression to evaluate.+ }+ -- | Decorated definition of a function or class.+ | Decorated + { decorated_decorators :: [Decorator] -- ^ Decorators.+ , decorated_def :: Statement -- ^ Function or class definition to be decorated.+ }+ -- | Return statement (may only occur syntactically nested in a function definition). See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-return-statement>.+ | Return + { return_expr :: Maybe Expr -- ^ Optional expression to evaluate and return to caller.+ }+ -- | Try statement (exception handling). See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-try-statement>.+ | Try + { try_body :: Suite -- ^ Try clause.+ , try_excepts :: [Handler] -- ^ Exception handlers.+ , try_else :: Suite -- ^ Possibly empty else clause, executed if and when control flows off the end of the try clause.+ , try_finally :: Suite -- ^ Possibly empty finally clause.+ }+ -- | Raise statement (exception throwing). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-raise-statement>+ | Raise + { raise_expr :: Maybe (Expr, Maybe Expr) -- ^ Optional expression to evaluate, and optional \'from\' clause.+ }+ -- | With statement (context management). See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-with-statement>. And also see: <http://www.python.org/dev/peps/pep-0343/>.+ | With + { with_context :: Expr -- ^ Context expression (yields a context manager).+ , with_as :: Maybe Expr -- ^ Optional target.+ , with_body :: Suite -- ^ Suite to be managed.+ }+ -- | Pass statement (null operation). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-pass-statement>+ | Pass+ -- | Break statement (may only occur syntactically nested in a for or while loop, but not nested in a function or class definition within that loop). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-break-statement>.+ | Break+ -- | Continue statement (may only occur syntactically nested in a for or while loop, but not nested in a function or class definition or finally clause within that loop). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-continue-statement>.+ | Continue+ -- | Del statement (delete). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-del-statement>. + | Delete + { del_exprs :: [Expr] -- ^ Items to delete.+ }+ -- | Expression statement. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#expression-statements>. + | StmtExpr { stmt_expr :: Expr }+ -- | Global declaration. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-global-statement>. + | Global + { global_vars :: [Ident] -- ^ Variables declared global in the current block.+ }+ -- | Nonlocal declaration. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-nonlocal-statement>.+ | NonLocal + { nonLocal_vars :: [Ident] -- ^ Variables declared nonlocal in the current block (their binding comes from bound the nearest enclosing scope).+ }+ -- | Assertion. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-assert-statement>.+ | Assert + { assert_exprs :: [Expr] -- ^ Expressions being asserted.+ }+ deriving Show++-- | Decorator.+data Decorator = + Decorator + { decorator_name :: DottedName -- ^ Decorator name.+ , decorator_args :: [Argument] -- ^ Decorator arguments.+ }+ deriving Show++-- | Formal parameter of function definitions and lambda expressions.+-- +-- See:+--+-- * <http://docs.python.org/dev/3.0/reference/compound_stmts.html#function-definitions>+--+-- * <http://docs.python.org/dev/3.0/reference/expressions.html#calls>+data Parameter+ -- | Ordinary named parameter.+ = Param + { param_name :: Ident -- ^ Parameter name.+ , param_annotation :: Maybe Expr -- ^ Optional annotation.+ , param_default :: Maybe Expr -- ^ Optional default value.+ }+ -- | Excess positional parameter (single asterisk before its name in the concrete syntax). + | VarArgsPos + { param_name :: Ident -- ^ Parameter name.+ , param_annotation :: Maybe Expr -- ^ Optional annotation.+ }+ -- | Excess keyword parameter (double asterisk before its name in the concrete syntax).+ | VarArgsKeyword + { param_name :: Ident -- ^ Parameter name.+ , param_annotation :: Maybe Expr -- ^ Optional annotation.+ }+ -- | Marker for the end of positional parameters (not a parameter itself).+ | EndPositional + deriving Show++-- | Arguments to function calls, class declarations and decorators.+data Argument+ -- | Ordinary argument expression.+ = ArgExpr { arg_expr :: Expr }+ -- | Excess positional argument.+ | ArgVarArgsPos { arg_expr :: Expr }+ -- | Excess keyword argument.+ | ArgVarArgsKeyword { arg_expr :: Expr }+ -- | Keyword argument.+ | ArgKeyword + { arg_keyword :: Ident -- ^ Keyword name.+ , arg_expr :: Expr -- ^ Argument expression.+ }+ deriving Show ++-- | Exception handler. See: <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-try-statement>.+type Handler = (ExceptClause, Suite)+-- | Exception clause. See: <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-try-statement>.+type ExceptClause = Maybe (Expr, Maybe Ident)++-- | Comprehension. See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries> +data Comprehension e+ = Comprehension { comprehension_expr :: e, comprehension_for :: CompFor }+ deriving Show++-- | Comprehension \'for\' component. See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries>+data CompFor = CompFor { comp_for_exprs :: [Expr], comp_in_expr :: Expr, comp_for_iter :: Maybe CompIter }+ deriving Show++-- | Comprehension guard. See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries>.+data CompIf = CompIf { comp_if :: Expr, comp_if_iter :: Maybe CompIter }+ deriving Show++-- | Comprehension iterator (either a \'for\' or an \'if\'). See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries>.+data CompIter = IterFor CompFor | IterIf CompIf+ deriving Show++-- | Expression.+-- +-- See: <http://docs.python.org/dev/3.0/reference/expressions.html>.+data Expr+ -- | Variable.+ = Var Ident+ -- | Literal integer.+ | Int Integer+ -- | Literal floating point number.+ | Float Double + -- | Literal imaginary number.+ | Imaginary { imaginary_value :: Double } + -- | Literal boolean.+ | Bool Bool+ -- | Literal \'None\' value.+ | None + -- | Ellipsis \'...\'.+ | Ellipsis+ -- | Literal byte string.+ | ByteStrings [BS.ByteString]+ -- | Literal strings (to be concatentated together).+ | Strings [String]+ -- | Function call. See: <http://docs.python.org/dev/3.0/reference/expressions.html#calls>.+ | Call + { call_fun :: Expr -- ^ Expression yielding a callable object (such as a function).+ , call_args :: [Argument] -- ^ Call arguments.+ }+ -- | Subscription, for example \'x [y]\'. See: <http://docs.python.org/dev/3.0/reference/expressions.html#id5>.+ | Subscript { subscriptee :: Expr, subscript_exprs :: [Expr] }+ -- | Slicing, for example \'w [x:y:z]\'. See: <http://docs.python.org/dev/3.0/reference/expressions.html#id6>.+ | SlicedExpr { slicee :: Expr, slices :: [Slice] } + -- | Conditional expresison. See: <http://docs.python.org/dev/3.0/reference/expressions.html#boolean-operations>. + | CondExpr + { ce_true_branch :: Expr -- ^ Expression to evaluate if condition is True.+ , ce_condition :: Expr -- ^ Boolean condition.+ , ce_false_branch :: Expr -- ^ Expression to evaluate if condition is False.+ }+ -- | Binary operator application.+ | BinaryOp { operator :: Op, left_op_arg :: Expr, right_op_arg :: Expr }+ -- | Unary operator application.+ | UnaryOp { operator :: Op, op_arg :: Expr }+ -- | Anonymous function definition (lambda). See: <http://docs.python.org/dev/3.0/reference/expressions.html#id15>.+ | Lambda { lambda_args :: [Parameter], lambda_body :: Expr }+ -- | N-ary tuple of arity greater than 0. The list should not be empty.+ | Tuple { tuple_exprs :: [Expr] }+ -- | Generator yield. See: <http://docs.python.org/dev/3.0/reference/expressions.html#yield-expressions>.+ | Yield + { yield_expr :: Maybe Expr -- ^ Optional expression to yield.+ }+ -- | Generator. See: <http://docs.python.org/dev/3.0/reference/expressions.html#generator-expressions>.+ | Generator { gen_comprehension :: Comprehension Expr }+ -- | List comprehension. See: <http://docs.python.org/dev/3.0/reference/expressions.html#list-displays>.+ | ListComp { list_comprehension :: Comprehension Expr }+ -- | List. See: <http://docs.python.org/dev/3.0/reference/expressions.html#list-displays>.+ | List { list_exprs :: [Expr] }+ -- | Dictionary. See: <http://docs.python.org/dev/3.0/reference/expressions.html#dictionary-displays>.+ | Dictionary { dict_mappings :: [(Expr, Expr)] }+ -- | Dictionary comprehension. See: <http://docs.python.org/dev/3.0/reference/expressions.html#dictionary-displays>.+ | DictComp { dict_comprehension :: Comprehension (Expr, Expr) }+ -- | Set. See: <http://docs.python.org/dev/3.0/reference/expressions.html#set-displays>.+ | Set { set_exprs :: [Expr] } + -- | Set comprehension. <http://docs.python.org/dev/3.0/reference/expressions.html#set-displays>.+ | SetComp { set_comprehension :: Comprehension Expr }+ -- | Starred expression. + | Starred { starred_expr :: Expr }+ deriving Show++data Slice+ = SliceProper { slice_lower :: Maybe Expr, slice_upper :: Maybe Expr, slice_stride :: Maybe (Maybe Expr) } + | SliceExpr { slice_expr :: Expr }+ deriving Show++-- | Operators.+data Op + = And -- ^ \'and\'+ | Or -- ^ \'or\'+ | Not -- ^ \'not\'+ | Exponent -- ^ \'**\'+ | LessThan -- ^ \'<\'+ | GreaterThan -- ^ \'>\'+ | Equality -- ^ \'==\'+ | GreaterThanEquals -- ^ \'>=\'+ | LessThanEquals -- ^ \'<=\'+ | NotEquals -- ^ \'!=\'+ | In -- ^ \'in\'+ | Is -- ^ \'is\'+ | IsNot -- ^ \'is not\'+ | NotIn -- ^ \'not in\'+ | BinaryOr -- ^ \'|\'+ | Xor -- ^ \'^\'+ | BinaryAnd -- ^ \'&\'+ | ShiftLeft -- ^ \'<<\'+ | ShiftRight -- ^ \'>>\'+ | Multiply -- ^ \'*\'+ | Plus -- ^ \'+\'+ | Minus -- ^ \'-\'+ | Divide -- ^ \'\/\'+ | FloorDivide -- ^ \'\/\/\'+ | Invert -- ^ \'~\' (bitwise inversion of its integer argument)+ | Modulo -- ^ \'%\'+ | Dot -- ^ \'.\'+ deriving (Eq, Show)++-- | Augmented assignment operators.+data AssignOp+ = PlusAssign -- ^ \'+=\'+ | MinusAssign -- ^ \'-=\'+ | MultAssign -- ^ \'*=\'+ | DivAssign -- ^ \'\/=\'+ | ModAssign -- ^ \'%=\'+ | PowAssign -- ^ \'*=\'+ | BinAndAssign -- ^ \'&=\'+ | BinOrAssign -- ^ \'|=\'+ | BinXorAssign -- ^ \'^=\' + | LeftShiftAssign -- ^ \'<<=\'+ | RightShiftAssign -- ^ \'>>=\'+ | FloorDivAssign -- ^ \'\/\/=\'+ deriving (Eq, Show)
+ src/Language/Python/Version3/Syntax/Pretty.hs view
@@ -0,0 +1,299 @@+-----------------------------------------------------------------------------+-- |+-- Module : Language.Python.Version3.Syntax.Pretty +-- Copyright : (c) 2009 Bernie Pope +-- License : BSD-style+-- Maintainer : bjpop@csse.unimelb.edu.au+-- Stability : experimental+-- Portability : ghc+--+-- Pretty printing of the Python version 3 abstract syntax. XXX not quite+-- complete.+-----------------------------------------------------------------------------++module Language.Python.Version3.Syntax.Pretty where++import Language.Python.Version3.Syntax.AST ++import Text.PrettyPrint as TextPP+import qualified Data.ByteString.Char8 as BS++--------------------------------------------------------------------------------++-- | All types which can be transformed into a 'Doc'.+class Pretty a where+ pretty :: a -> Doc++-- | Transform values into strings.+prettyText :: Pretty a => a -> String+prettyText = render . pretty++-- | Conditionally wrap parentheses around an item.+parensIf :: Pretty a => (a -> Bool) -> a -> Doc+parensIf test x = if test x then parens $ pretty x else pretty x ++-- | A list of things separated by commas.+commaList :: Pretty a => [a] -> Doc+commaList = hsep . punctuate comma . map pretty ++instance Pretty BS.ByteString where+ -- XXX should handle the escaping properly+ pretty b = text "b" <> text (show $ BS.unpack b)++instance Pretty Int where+ pretty = int++instance Pretty Integer where+ pretty = integer++instance Pretty Double where+ pretty = double++instance Pretty Bool where+ pretty True = text "True"+ pretty False = text "False"++instance Pretty a => Pretty (Maybe a) where+ pretty Nothing = empty+ pretty (Just x) = pretty x++prettyString :: String -> Doc+ -- XXX should handle the escaping properly+prettyString str = text (show str)++instance Pretty Module where+ -- pretty :: Module -> Doc + pretty (Module stmts) = vcat $ map pretty stmts ++instance Pretty Ident where+ pretty (Ident name) = text name++dot :: Doc+dot = char '.'++prettyDottedName :: DottedName -> Doc+prettyDottedName [] = empty+prettyDottedName [name] = pretty name+prettyDottedName (name:rest@(_:_))+ = pretty name <> dot <> prettyDottedName rest++instance Pretty ImportItem where+ pretty (ImportItem {import_item_name = name, import_as_name = asName})+ = prettyDottedName name <+> (maybe empty (\n -> text "as" <+> pretty n) asName)++instance Pretty FromItem where+ pretty (FromItem { from_item_name = name, from_as_name = asName })+ = pretty name <+> (maybe empty (\n -> text "as" <+> pretty n) asName) ++instance Pretty FromItems where+ pretty ImportEverything = char '*'+ pretty (FromItems [item]) = pretty item + pretty (FromItems items) = parens (commaList items)++instance Pretty ImportModule where+ pretty (ImportRelative importModule) = dot <> pretty importModule+ pretty ImportDot = dot+ pretty (ImportName dottedName) = prettyDottedName dottedName ++prettySuite :: [Statement] -> Doc+prettySuite stmts = vcat $ map pretty stmts ++optionalKeywordSuite :: String -> [Statement] -> Doc+optionalKeywordSuite _ [] = empty+optionalKeywordSuite keyword stmts = text keyword <> colon $+$ indent (prettySuite stmts)++prettyArgList :: [Argument] -> Doc+prettyArgList = parens . commaList ++prettyOptionalArgList :: [Argument] -> Doc+prettyOptionalArgList [] = empty+prettyOptionalArgList list = parens $ commaList list++prettyGuards :: [(Expr, Suite)] -> Doc+prettyGuards [] = empty+prettyGuards ((cond,body):guards)+ = text "elif" <+> pretty cond <> colon $+$ indent (prettySuite body) $+$+ prettyGuards guards++indent :: Doc -> Doc+indent doc = nest 4 doc++-- XXX is there a better way to do this?+blankLine :: Doc+blankLine = text []++instance Pretty Statement where+ -- pretty :: Statement -> Doc + pretty (Import { import_items = items}) = text "import" <+> commaList items + pretty stmt@(FromImport {})+ = text "from" <+> pretty (from_module stmt) <+> text "import" <+> pretty (from_items stmt)+ pretty stmt@(While {})+ = text "while" <+> pretty (while_cond stmt) <> colon $+$+ indent (prettySuite (while_body stmt)) $+$ optionalKeywordSuite "else" (while_else stmt)+ pretty stmt@(For {})+ = text "for" <+> commaList (for_targets stmt) <+> text "in" <+> pretty (for_generator stmt) <> colon $+$+ indent (prettySuite (for_body stmt)) $+$ optionalKeywordSuite "else" (for_else stmt)+ pretty stmt@(Fun {})+ = text "def" <+> pretty (fun_name stmt) <> parens (commaList (fun_args stmt)) <+> + pretty (fun_result_annotation stmt) <> colon $+$ indent (prettySuite (fun_body stmt)) + pretty stmt@(Class {})+ = text "class" <+> pretty (class_name stmt) <> prettyOptionalArgList (class_args stmt) <> + colon $+$ indent (prettySuite (class_body stmt)) + pretty stmt@(Conditional { cond_guards = guards, cond_else = optionalElse })+ = case guards of+ (cond,body):xs -> + text "if" <+> pretty cond <> colon $+$ indent (prettySuite body) $+$ + prettyGuards xs $+$+ optionalKeywordSuite "else" optionalElse+ -- XXX is the assign_to always a singleton?+ pretty (Assign { assign_to = pattern, assign_expr = e })+ = commaList pattern <+> equals <+> pretty e+ pretty (AugmentedAssign { aug_assign_to = to_expr, aug_assign_op = op, aug_assign_expr = e})+ = pretty to_expr <+> pretty op <+> pretty e + pretty (Decorated { decorated_decorators = decs, decorated_def = stmt})+ = vcat (map pretty decs) $+$ pretty stmt+ pretty (Return { return_expr = e }) = text "return" <+> pretty e+ pretty (Try { try_body = body, try_excepts = handlers, try_else = optionalElse, try_finally = finally})+ = text "try" <> colon $+$ indent (prettySuite body) $+$+ prettyHandlers handlers $+$ optionalKeywordSuite "else" optionalElse $+$ + optionalKeywordSuite "finally" finally + pretty (Raise { raise_expr = e })+ = text "raise" <+> + maybe empty (\ (x, fromE) -> pretty x <+> (maybe empty (\f -> text "from" <+> pretty f) fromE)) e+ pretty (With { with_context = context, with_as = asExpr, with_body = body })+ = text "with" <+> maybe empty (\e -> text "as" <+> pretty e) asExpr <> colon $+$+ indent (prettySuite body)+ pretty Pass = text "pass"+ pretty Break = text "break"+ pretty Continue = text "continue"+ pretty (Delete { del_exprs = es }) = text "del" <+> commaList es+ pretty (StmtExpr { stmt_expr = e }) = pretty e+ pretty (Global { global_vars = idents }) = text "global" <+> commaList idents+ pretty (NonLocal { nonLocal_vars = idents }) = text "nonlocal" <+> commaList idents+ pretty (Assert { assert_exprs = es }) = text "assert" <+> commaList es++prettyHandlers :: [Handler] -> Doc+prettyHandlers = foldr (\next rec -> prettyHandler next $+$ rec) empty++prettyHandler :: Handler -> Doc+prettyHandler (exceptClause, suite) + = text "except" <+> prettyExceptClause exceptClause <> colon $+$ indent (prettySuite suite)+prettyExceptClause :: ExceptClause -> Doc+prettyExceptClause Nothing = empty+prettyExceptClause (Just (e, target))+ = pretty e <+> maybe empty (\t -> text "as" <+> pretty t) target++instance Pretty Decorator where+ pretty (Decorator { decorator_name = name, decorator_args = args })+ = char '@' <> prettyDottedName name <+> prettyOptionalArgList args++instance Pretty Parameter where+ pretty (Param { param_name = ident, param_annotation = annot, param_default = def})+ = pretty ident <> (maybe empty (\e -> colon <> pretty e <> space) annot) <> + maybe empty (\e -> equals <> pretty e) def + pretty (VarArgsPos { param_name = ident, param_annotation = annot})+ = char '*' <> pretty ident <> (maybe empty (\e -> colon <> pretty e) annot)+ pretty (VarArgsKeyword { param_name = ident, param_annotation = annot })+ = text "**" <> pretty ident <> (maybe empty (\e -> colon <> pretty e) annot)+ pretty EndPositional = char '*' ++instance Pretty Argument where+ pretty (ArgExpr { arg_expr = e }) = pretty e+ pretty (ArgVarArgsPos { arg_expr = e}) = char '*' <> pretty e+ pretty (ArgVarArgsKeyword { arg_expr = e }) = text "**" <> pretty e+ pretty (ArgKeyword { arg_keyword = ident, arg_expr = e }) + = pretty ident <> equals <> pretty e++instance Pretty a => Pretty (Comprehension a) where+ pretty (Comprehension { comprehension_expr = e, comprehension_for = for }) + = pretty e <+> pretty for ++instance Pretty CompFor where+ pretty (CompFor { comp_for_exprs = es, comp_in_expr = e, comp_for_iter = iter }) + = text "for" <+> commaList es <+> text "in" <+> pretty e <+> pretty iter++instance Pretty CompIf where+ pretty (CompIf { comp_if = e, comp_if_iter = iter }) + = text "if" <+> pretty e <+> pretty iter ++instance Pretty CompIter where+ pretty (IterFor compFor) = pretty compFor + pretty (IterIf compIf) = pretty compIf++instance Pretty Expr where+ pretty (Var i) = pretty i+ pretty (Int i) = pretty i+ pretty (Float d) = pretty d+ pretty (Imaginary { imaginary_value = i }) = pretty i <> char 'j' + pretty (Bool b) = pretty b+ pretty None = text "None"+ pretty Ellipsis = text "..."+ pretty (ByteStrings bs) = hcat (map pretty bs)+ pretty (Strings ss) = hcat (map prettyString ss)+ pretty (Call { call_fun = f, call_args = args }) = pretty f <> prettyArgList args+ pretty (Subscript { subscriptee = e, subscript_exprs = subs })+ = pretty e <> brackets (commaList subs)+ pretty (SlicedExpr { slicee = e, slices = ss })+ = pretty e <> brackets (commaList ss) + pretty (CondExpr { ce_true_branch = trueBranch, ce_condition = cond, ce_false_branch = falseBranch })+ = pretty trueBranch <+> text "if" <+> pretty cond <+> text "else" <+> pretty falseBranch+ pretty (BinaryOp { operator = op, left_op_arg = left, right_op_arg = right })+ = pretty left <> (if op == Dot then dot else space <> pretty op <> space) <> pretty right+ pretty (UnaryOp { operator = op, op_arg = e }) = pretty op <+> pretty e+ pretty (Lambda { lambda_args = args, lambda_body = body })+ = text "lambda" <+> commaList args <> colon <+> pretty body+ pretty (Tuple { tuple_exprs = es }) = parens $ commaList es+ pretty (Yield { yield_expr = e })+ = text "yield" <+> pretty e+ pretty (List { list_exprs = es }) = brackets (commaList es)+ pretty (Dictionary { dict_mappings = mappings })+ = braces (hsep (punctuate comma $ map (\ (e1,e2) -> pretty e1 <> colon <> pretty e2) mappings))+ pretty (Set { set_exprs = es }) = braces $ commaList es++instance Pretty Slice where+ pretty (SliceProper { slice_lower = lower, slice_upper = upper, slice_stride = stride })+ = pretty lower <> colon <> pretty upper <> (maybe empty (\s -> colon <> pretty s) stride)+ pretty (SliceExpr { slice_expr = e }) = pretty e++instance Pretty Op where+ pretty And = text "and"+ pretty Or = text "or"+ pretty Not = text "not"+ pretty Exponent = text "**"+ pretty LessThan = text "<"+ pretty GreaterThan = text ">"+ pretty Equality = text "=="+ pretty GreaterThanEquals = text ">="+ pretty LessThanEquals = text "<="+ pretty NotEquals = text "!="+ pretty In = text "in"+ pretty Is = text "is"+ pretty IsNot = text "is not"+ pretty NotIn = text "not in"+ pretty BinaryOr = text "|"+ pretty Xor = text "^"+ pretty BinaryAnd = text "&"+ pretty ShiftLeft = text "<<"+ pretty ShiftRight = text ">>"+ pretty Multiply = text "*"+ pretty Plus = text "+"+ pretty Minus = text "-"+ pretty Divide = text "/"+ pretty FloorDivide = text "//"+ pretty Invert = text "~"+ pretty Modulo = text "%"+ pretty Dot = dot++instance Pretty AssignOp where+ pretty PlusAssign = text "+="+ pretty MinusAssign = text "-="+ pretty MultAssign = text "*="+ pretty DivAssign = text "/="+ pretty ModAssign = text "%="+ pretty PowAssign = text "**="+ pretty BinAndAssign = text "&="+ pretty BinOrAssign = text "|="+ pretty BinXorAssign = text "^="+ pretty LeftShiftAssign = text "<<="+ pretty RightShiftAssign = text ">>="+ pretty FloorDivAssign = text "//="