1{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-} 2{-# LANGUAGE CPP,MagicHash #-} 3{-# LINE 43 "compiler/GHC/Parser/Lexer.x" #-} 4 5{-# LANGUAGE BangPatterns #-} 6{-# LANGUAGE DeriveDataTypeable #-} 7{-# LANGUAGE LambdaCase #-} 8{-# LANGUAGE MultiWayIf #-} 9 10{-# OPTIONS_GHC -funbox-strict-fields #-} 11{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} 12 13module GHC.Parser.Lexer ( 14 Token(..), lexer, lexerDbg, 15 ParserOpts(..), mkParserOpts, 16 PState (..), initParserState, initPragState, 17 P(..), ParseResult(..), 18 allocateComments, allocatePriorComments, allocateFinalComments, 19 MonadP(..), 20 getRealSrcLoc, getPState, 21 failMsgP, failLocMsgP, srcParseFail, 22 getErrorMessages, getMessages, 23 popContext, pushModuleContext, setLastToken, setSrcLoc, 24 activeContext, nextIsEOF, 25 getLexState, popLexState, pushLexState, 26 ExtBits(..), 27 xtest, xunset, xset, 28 lexTokenStream, 29 mkParensEpAnn, 30 getCommentsFor, getPriorCommentsFor, getFinalCommentsFor, 31 getEofPos, 32 commentToAnnotation, 33 HdkComment(..), 34 warnopt, 35 ) where 36 37import GHC.Prelude 38 39-- base 40import Control.Monad 41import Data.Char 42import Data.List (stripPrefix, isInfixOf, partition) 43import Data.Maybe 44import Data.Word 45 46import GHC.Data.EnumSet as EnumSet 47 48-- ghc-boot 49import qualified GHC.LanguageExtensions as LangExt 50 51-- bytestring 52import Data.ByteString (ByteString) 53 54-- containers 55import Data.Map (Map) 56import qualified Data.Map as Map 57 58-- compiler 59import GHC.Data.Bag 60import GHC.Utils.Outputable 61import GHC.Utils.Panic 62import GHC.Data.StringBuffer 63import GHC.Data.FastString 64import GHC.Types.Unique.FM 65import GHC.Data.Maybe 66import GHC.Data.OrdList 67import GHC.Utils.Misc ( readSignificandExponentPair, readHexSignificandExponentPair ) 68 69import GHC.Types.SrcLoc 70import GHC.Types.SourceText 71import GHC.Types.Basic ( InlineSpec(..), RuleMatchInfo(..)) 72import GHC.Hs.Doc 73 74import GHC.Parser.CharClass 75 76import GHC.Parser.Annotation 77import GHC.Driver.Flags 78import GHC.Parser.Errors 79 80#if __GLASGOW_HASKELL__ >= 603 81#include "ghcconfig.h" 82#elif defined(__GLASGOW_HASKELL__) 83#include "config.h" 84#endif 85#if __GLASGOW_HASKELL__ >= 503 86import Data.Array 87#else 88import Array 89#endif 90#if __GLASGOW_HASKELL__ >= 503 91import Data.Array.Base (unsafeAt) 92import GHC.Exts 93#else 94import GlaExts 95#endif 96alex_tab_size :: Int 97alex_tab_size = 8 98alex_base :: AlexAddr 99alex_base = AlexA# 100 "\x01\x00\x00\x00\x7b\x00\x00\x00\x84\x00\x00\x00\xa0\x00\x00\x00\xbc\x00\x00\x00\xc5\x00\x00\x00\xce\x00\x00\x00\xec\x00\x00\x00\x06\x01\x00\x00\x22\x01\x00\x00\x3f\x01\x00\x00\x7b\x01\x00\x00\xd4\xff\xff\xff\x61\x00\x00\x00\xd7\xff\xff\xff\xa3\xff\xff\xff\xa4\xff\xff\xff\xf8\x01\x00\x00\x72\x02\x00\x00\xec\x02\x00\x00\x92\xff\xff\xff\x93\xff\xff\xff\x66\x03\x00\x00\x94\xff\xff\xff\xb1\xff\xff\xff\xe6\xff\xff\xff\xe7\xff\xff\xff\xe8\xff\xff\xff\xd1\x00\x00\x00\xad\xff\xff\xff\xaa\xff\xff\xff\xaf\xff\xff\xff\x59\x01\x00\x00\xdc\x03\x00\x00\xfc\x01\x00\x00\xe6\x03\x00\x00\xb2\xff\xff\xff\xb9\xff\xff\xff\xa9\xff\xff\xff\x3d\x01\x00\x00\x7a\x01\x00\x00\x50\x02\x00\x00\xca\x02\x00\x00\x1f\x04\x00\x00\xfa\x03\x00\x00\x59\x04\x00\x00\x95\x01\x00\x00\x05\x02\x00\x00\xae\xff\xff\xff\xb0\xff\xff\xff\xa4\x04\x00\x00\xe5\x04\x00\x00\x63\x02\x00\x00\x44\x03\x00\x00\xdd\x02\x00\x00\xfc\x04\x00\x00\x3d\x05\x00\x00\x57\x03\x00\x00\xc5\x04\x00\x00\x1d\x05\x00\x00\x59\x05\x00\x00\x63\x05\x00\x00\x79\x05\x00\x00\x83\x05\x00\x00\x99\x05\x00\x00\xa9\x05\x00\x00\xb3\x05\x00\x00\xbd\x05\x00\x00\xc9\x05\x00\x00\xd3\x05\x00\x00\xed\x05\x00\x00\x04\x06\x00\x00\x63\x00\x00\x00\x51\x00\x00\x00\x26\x06\x00\x00\x4b\x06\x00\x00\x62\x06\x00\x00\xc4\x03\x00\x00\x6c\x00\x00\x00\x84\x06\x00\x00\xbd\x06\x00\x00\x17\x07\x00\x00\x95\x07\x00\x00\x11\x08\x00\x00\x8d\x08\x00\x00\x09\x09\x00\x00\x85\x09\x00\x00\x01\x0a\x00\x00\xb9\x00\x00\x00\x7d\x0a\x00\x00\xfb\x0a\x00\x00\x13\x00\x00\x00\x15\x00\x00\x00\x2d\x01\x00\x00\x5e\x01\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\xfa\x01\x00\x00\xe0\x03\x00\x00\x94\x07\x00\x00\x80\x00\x00\x00\x79\x00\x00\x00\x81\x00\x00\x00\x82\x00\x00\x00\x88\x00\x00\x00\x95\x00\x00\x00\x96\x00\x00\x00\x76\x0b\x00\x00\x9e\x0b\x00\x00\xe1\x0b\x00\x00\x09\x0c\x00\x00\x4c\x0c\x00\x00\x74\x0c\x00\x00\xe7\x04\x00\x00\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x0c\x00\x00\x2e\x0d\x00\x00\xa8\x0d\x00\x00\x22\x0e\x00\x00\x9c\x0e\x00\x00\xa8\x00\x00\x00\xa9\x00\x00\x00\x1a\x0f\x00\x00\x9c\x00\x00\x00\x94\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x10\x00\x00\x00\x00\x00\x00\x8c\x10\x00\x00\x06\x11\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x11\x00\x00\xfa\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\xb0\x12\x00\x00\x2a\x13\x00\x00\xa4\x13\x00\x00\x1e\x14\x00\x00\x98\x14\x00\x00\x12\x15\x00\x00\x8c\x15\x00\x00\x06\x16\x00\x00\x80\x16\x00\x00\xfa\x16\x00\x00\x74\x17\x00\x00\xee\x17\x00\x00\x68\x18\x00\x00\xe2\x18\x00\x00\x5c\x19\x00\x00\xd6\x19\x00\x00\x50\x1a\x00\x00\xca\x1a\x00\x00\x44\x1b\x00\x00\xbe\x1b\x00\x00\x38\x1c\x00\x00\xb2\x1c\x00\x00\x2c\x1d\x00\x00\xa6\x1d\x00\x00\xa1\x00\x00\x00\xb1\x00\x00\x00\xbd\x00\x00\x00\xbe\x00\x00\x00\xbf\x00\x00\x00\xc1\x00\x00\x00\x00\x1e\x00\x00\x28\x1e\x00\x00\x4b\x1e\x00\x00\x73\x1e\x00\x00\xb6\x1e\x00\x00\xdb\x1e\x00\x00\x54\x1f\x00\x00\xb0\x1f\x00\x00\xd3\x1f\x00\x00\xf6\x1f\x00\x00\x58\x0b\x00\x00\x14\x20\x00\x00\xdd\x00\x00\x00\xbb\x06\x00\x00\x5d\x20\x00\x00\x37\x1f\x00\x00\x82\x20\x00\x00\x20\x01\x00\x00\x71\x07\x00\x00\xcb\x20\x00\x00\xef\x20\x00\x00\xf2\x07\x00\x00\x10\x21\x00\x00\x6e\x08\x00\x00\x26\x21\x00\x00\xe4\x08\x00\x00\x67\x21\x00\x00\x60\x09\x00\x00\xc3\x00\x00\x00\xc4\x00\x00\x00\xc7\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# 101 102alex_table :: AlexAddr 103alex_table = AlexA# 104 "\x00\x00\x63\x00\xc3\x00\xbc\x00\x6c\x00\xcf\x00\x5d\x00\x9a\x00\x74\x00\x7a\x00\x5f\x00\x7d\x00\x5d\x00\x5d\x00\x5d\x00\x88\x00\x89\x00\x8b\x00\x5c\x00\x14\x00\x15\x00\x17\x00\x31\x00\x18\x00\x30\x00\x1e\x00\x24\x00\x25\x00\x10\x00\x77\x00\x0f\x00\x76\x00\xff\xff\x5d\x00\xcf\x00\xf8\x00\xd0\x00\xcf\x00\xcf\x00\xcf\x00\xf7\x00\xa2\x00\xa3\x00\xcf\x00\xcf\x00\xa7\x00\xcb\x00\xcf\x00\xcf\x00\xd6\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd4\x00\xa8\x00\xcf\x00\xcf\x00\xcf\x00\xd1\x00\xcf\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xa5\x00\xcf\x00\xa6\x00\xcf\x00\xbd\x00\xa9\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xab\x00\xcd\x00\xac\x00\xcf\x00\x5d\x00\xdc\x00\xdc\x00\xff\xff\x5f\x00\x73\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x6c\x00\x5d\x00\x5d\x00\x5d\x00\xff\xff\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\x5d\x00\xd7\x00\xd7\x00\x75\x00\xff\xff\xff\xff\x63\x00\x1f\x00\x85\x00\x5d\x00\x5d\x00\xff\xff\x90\x00\x0e\x00\x5f\x00\x79\x00\x5d\x00\x5d\x00\x5d\x00\x94\x00\x5b\x00\x49\x00\x0e\x00\xff\xff\xff\xff\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x61\x00\x62\x00\x5d\x00\x5d\x00\x48\x00\x7b\x00\xc5\x00\x5f\x00\x79\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x4e\x00\x00\x00\x0e\x00\x5f\x00\x79\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\xc6\x00\x64\x00\x6e\x00\x5f\x00\x9f\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x8e\x00\x88\x00\x7b\x00\xc7\x00\xc9\x00\xc7\x00\x8e\x00\xca\x00\x5d\x00\xef\x00\xf0\x00\x7b\x00\x0e\x00\xf1\x00\xf2\x00\xf4\x00\xf6\x00\x5d\x00\x00\x00\x00\x00\x5d\x00\x0e\x00\x00\x00\x00\x00\x5f\x00\x0c\x00\x5d\x00\x5d\x00\x5d\x00\x1d\x00\x0e\x00\x00\x00\x00\x00\x26\x00\x0c\x00\xe8\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x5e\x00\x5d\x00\xd7\x00\xd7\x00\x60\x00\xff\xff\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x3c\x00\x8e\x00\x00\x00\x0e\x00\x00\x00\x78\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x5e\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5d\x00\x5d\x00\x5d\x00\x1c\x00\x9b\x00\x5d\x00\x84\x00\x00\x00\x8e\x00\x3c\x00\x78\x00\x5d\x00\x5d\x00\x5d\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x78\x00\x7c\x00\x5d\x00\xec\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x0c\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x00\x00\x0e\x00\xdc\x00\xdc\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x00\x00\x00\x00\x2f\x00\x5d\x00\x00\x00\x00\x00\x19\x00\x5e\x00\x2f\x00\x2f\x00\x2f\x00\x0c\x00\xff\xff\x5e\x00\x5e\x00\x5e\x00\x0d\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x00\x00\xc4\x00\xc2\x00\x5e\x00\x49\x00\x5d\x00\x83\x00\x00\x00\x00\x00\x5f\x00\x7d\x00\x5d\x00\x5d\x00\x5d\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x5d\x00\x27\x00\x0c\x00\x1b\x00\x00\x00\x2e\x00\x2e\x00\x2e\x00\xa1\x00\xa3\x00\x00\x00\x00\x00\xa7\x00\x0e\x00\x00\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x00\x00\x2e\x00\xa8\x00\x59\x00\x29\x00\x00\x00\x0c\x00\x00\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xa4\x00\x00\x00\xa6\x00\x28\x00\xc2\x00\xa9\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xaa\x00\x00\x00\xac\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x22\x00\x11\x00\x11\x00\x11\x00\x11\x00\x22\x00\x22\x00\x22\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x2f\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x58\x00\x00\x00\x22\x00\x8c\x00\x8e\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\x2f\x00\x00\x00\x5a\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x8e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x80\x00\x80\x00\x80\x00\x8e\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x36\x00\x00\x00\x12\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x81\x00\x81\x00\x81\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x13\x00\x13\x00\x13\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x16\x00\x16\x00\x16\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x00\x00\x3b\x00\x00\x00\x16\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x35\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x2e\x00\x2e\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x22\x00\x22\x00\x22\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x8d\x00\x8e\x00\x00\x00\x22\x00\x00\x00\x00\x00\x1a\x00\x8e\x00\x00\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x2b\x00\x2b\x00\x2b\x00\x4d\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x40\x00\x00\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x8e\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x1c\x00\x2b\x00\x52\x00\x8e\x00\x00\x00\x00\x00\x3c\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x34\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x34\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x69\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x39\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x3f\x00\x00\x00\x3f\x00\x00\x00\x00\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x00\x00\x44\x00\x00\x00\x44\x00\x00\x00\x3e\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x00\x00\x41\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x43\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x00\x00\x46\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x34\x00\x00\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x4b\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x39\x00\x00\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xba\x00\xb6\x00\x00\x00\x4c\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xb9\x00\xb5\x00\x4d\x00\xd2\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb2\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb8\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xd2\x00\x00\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\x00\x00\x00\x00\x00\x00\xd2\x00\xd2\x00\x00\x00\xd2\x00\xd2\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x00\x00\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\xd2\x00\x00\x00\xd2\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb1\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb7\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\xd2\x00\xed\x00\xd2\x00\x52\x00\x52\x00\x52\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x11\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x00\x00\x00\x00\x8e\x00\x00\x00\x52\x00\x00\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x8e\x00\x99\x00\x53\x00\x53\x00\x53\x00\xf3\x00\x00\x00\x00\x00\x53\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x68\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x68\x00\x98\x00\x53\x00\x53\x00\x53\x00\xf5\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x97\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x96\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x95\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x93\x00\x59\x00\x59\x00\x59\x00\x59\x00\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x59\x00\x87\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5a\x00\x82\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\xff\xff\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x6b\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x71\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x6b\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x86\x00\x86\x00\x86\x00\x86\x00\x00\x00\x00\x00\x00\x00\x86\x00\x86\x00\x86\x00\x6d\x00\x86\x00\x86\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x86\x00\xff\xff\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x86\x00\x00\x00\x86\x00\x86\x00\x86\x00\x86\x00\x00\x00\x00\x00\x00\x00\x86\x00\x86\x00\x00\x00\x6d\x00\x86\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x6f\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\xcf\x00\x86\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\x00\x00\x6f\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x80\x00\x80\x00\x80\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x16\x00\x16\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x81\x00\x81\x00\x81\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x16\x00\x16\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5a\x00\x82\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x85\x00\x85\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x59\x00\x59\x00\x59\x00\x59\x00\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x59\x00\x87\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x80\x00\x80\x00\x80\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x81\x00\x81\x00\x81\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x13\x00\x13\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\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\x9e\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x00\x00\x2b\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x00\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x55\x00\x57\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x56\x00\x53\x00\x53\x00\x53\x00\x54\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x8f\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xad\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xae\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xaf\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb0\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb3\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb4\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xba\x00\xba\x00\xba\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbf\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbf\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbf\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbf\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x44\x00\x00\x00\x00\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xc2\x00\xc2\x00\xc2\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc3\x00\xc3\x00\xc3\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc4\x00\xc4\x00\xc4\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xc4\x00\x00\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x70\x00\xcf\x00\xcf\x00\xdb\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x2a\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x9c\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\x8b\x00\xcf\x00\xcf\x00\x91\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x92\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x9e\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\xa0\x00\xcf\x00\xcf\x00\x00\x00\xcc\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x9e\x00\x00\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9d\x00\xcf\x00\xcf\x00\xcf\x00\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x3c\x00\x00\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x9d\x00\xd2\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\xcf\x00\xd2\x00\xcf\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\xd3\x00\x00\x00\x00\x00\xd2\x00\xd2\x00\x00\x00\xd2\x00\xd2\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\x00\x00\x00\x00\x00\x00\xd3\x00\x00\x00\xd3\x00\xd3\x00\xd3\x00\xd3\x00\xd4\x00\x00\x00\x00\x00\xd3\x00\xd3\x00\x00\x00\xd3\x00\xd3\x00\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x00\xd3\x00\xd2\x00\xd3\x00\xd3\x00\xd3\x00\xd3\x00\xd3\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x00\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\x00\x00\x00\x00\x00\x00\xd4\x00\xd4\x00\x00\x00\xd4\x00\xd4\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\xd2\x00\xd3\x00\xd4\x00\xd3\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\x00\x00\xd3\x00\x00\x00\xd3\x00\xd4\x00\x00\x00\xd4\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x4f\x00\xd4\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x4b\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x40\x00\x00\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\x4c\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x49\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x46\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\x00\x00\x47\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x00\x00\xf5\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x3c\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\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\x00\x00\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# 105 106alex_check :: AlexAddr 107alex_check = AlexA# 108 "\xff\xff\x2d\x00\x01\x00\x02\x00\x2d\x00\x04\x00\x05\x00\x06\x00\x65\x00\x65\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7d\x00\x7d\x00\x7d\x00\x61\x00\x2d\x00\x2d\x00\x2d\x00\x69\x00\x6d\x00\x69\x00\x67\x00\x61\x00\x72\x00\x6e\x00\x0a\x00\x6e\x00\x0a\x00\x0a\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\x05\x00\x30\x00\x31\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x0a\x00\x0a\x00\x0a\x00\x09\x00\x2d\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x20\x00\x30\x00\x31\x00\x23\x00\x0a\x00\x0a\x00\x2d\x00\x6c\x00\x23\x00\x20\x00\x05\x00\x0a\x00\x7c\x00\x2d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7c\x00\x21\x00\x5f\x00\x2d\x00\x0a\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2d\x00\x2d\x00\x20\x00\x05\x00\x5f\x00\x23\x00\x23\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x5f\x00\xff\xff\x2d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x23\x00\x2d\x00\x2d\x00\x09\x00\x23\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x24\x00\x7d\x00\x23\x00\x23\x00\x23\x00\x23\x00\x2a\x00\x23\x00\x20\x00\x23\x00\x23\x00\x23\x00\x2d\x00\x23\x00\x23\x00\x23\x00\x23\x00\x20\x00\xff\xff\xff\xff\x05\x00\x2d\x00\xff\xff\xff\xff\x09\x00\x7b\x00\x0b\x00\x0c\x00\x0d\x00\x6c\x00\x2d\x00\xff\xff\xff\xff\x70\x00\x7b\x00\x23\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x05\x00\x20\x00\x30\x00\x31\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x45\x00\x5e\x00\xff\xff\x2d\x00\xff\xff\x7b\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\x05\x00\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x0b\x00\x0c\x00\x0d\x00\x5f\x00\x7c\x00\x05\x00\x2d\x00\xff\xff\x7c\x00\x65\x00\x7b\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x20\x00\x23\x00\x05\x00\xff\xff\xff\xff\xff\xff\x09\x00\x7b\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x2d\x00\x30\x00\x31\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\x05\x00\x20\x00\xff\xff\xff\xff\x23\x00\x05\x00\x0b\x00\x0c\x00\x0d\x00\x7b\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2d\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\x20\x00\xff\xff\xff\xff\x01\x00\x02\x00\x20\x00\x5f\x00\x05\x00\x7b\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x05\x00\x20\x00\x5f\x00\x7b\x00\x23\x00\xff\xff\x0b\x00\x0c\x00\x0d\x00\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\x2d\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x20\x00\x3b\x00\x22\x00\x5f\x00\xff\xff\x7b\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\x5b\x00\xff\xff\x5d\x00\x5f\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\xff\xff\x7d\x00\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\x05\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x20\x00\xff\xff\x20\x00\x23\x00\x24\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\x20\x00\xff\xff\x22\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\x5e\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\x01\x00\x02\x00\x03\x00\x7c\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\x2b\x00\xff\xff\x2d\x00\xff\xff\x20\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\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\x5f\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\xff\xff\x20\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\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\x5f\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\x2b\x00\xff\xff\x2d\x00\xff\xff\x20\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\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\x5f\x00\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\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x20\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x24\x00\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x2a\x00\xff\xff\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\x01\x00\x02\x00\x03\x00\x5f\x00\xff\xff\xff\xff\x07\x00\xff\xff\x2e\x00\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\x5f\x00\xff\xff\xff\xff\x5e\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x5f\x00\x01\x00\x02\x00\x7c\x00\xff\xff\xff\xff\x65\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\x50\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\x70\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\x5f\x00\xff\xff\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\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\xff\xff\xff\xff\x5e\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x50\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\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\x2b\x00\xff\xff\x2d\x00\xff\xff\xff\xff\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\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x45\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x2b\x00\xff\xff\x2d\x00\xff\xff\x5f\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x45\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\x5f\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\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\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x50\x00\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\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\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\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\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\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x50\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x01\x00\x02\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\x01\x00\x02\x00\x5f\x00\x04\x00\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\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\xff\xff\x5c\x00\xff\xff\x5e\x00\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\x7c\x00\x23\x00\x7e\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x2a\x00\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\x5f\x00\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\x5e\x00\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\x7c\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x23\x00\xff\xff\xff\xff\x07\x00\xff\xff\x0a\x00\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\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x2a\x00\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\x5f\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\xff\xff\xff\xff\x5e\x00\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\x7c\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x23\x00\xff\xff\xff\xff\x07\x00\xff\xff\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\xff\xff\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\x5f\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\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\x7c\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x5f\x00\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\x7c\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x5f\x00\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\x7c\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\xff\xff\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\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\xff\xff\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\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\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\xff\xff\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\x04\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x45\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x3a\x00\x7e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x3a\x00\x7e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x01\x00\x02\x00\x03\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\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\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\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\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\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\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\xff\xff\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\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\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\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\xff\xff\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\x01\x00\x02\x00\x03\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\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\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\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\x7c\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\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\x04\x00\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\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\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x02\x00\xff\xff\x04\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x3a\x00\x7e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\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\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\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\x02\x00\x7c\x00\x04\x00\x7e\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\x45\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\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\x5c\x00\xff\xff\x5e\x00\x5f\x00\x04\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x5c\x00\xff\xff\x5e\x00\xff\xff\x42\x00\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x5f\x00\x7e\x00\xff\xff\x62\x00\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x78\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\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x42\x00\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x78\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\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\x23\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\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\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x45\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\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x50\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# 109 110alex_deflt :: AlexAddr 111alex_deflt = AlexA# 112 "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x86\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\x5b\x00\x5c\x00\xff\xff\x86\x00\xff\xff\x86\x00\xff\xff\xff\xff\xff\xff\x86\x00\x65\x00\x66\x00\x67\x00\x68\x00\x67\x00\x6a\x00\x6a\x00\x66\x00\x6a\x00\x66\x00\x6a\x00\x66\x00\x65\x00\x65\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\x86\x00\xff\xff\xff\xff\xff\xff\x86\x00\x86\x00\x86\x00\x86\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"# 113 114alex_accept = listArray (0 :: Int, 248) 115 [ AlexAccNone 116 , AlexAcc 209 117 , AlexAccNone 118 , AlexAcc 208 119 , AlexAcc 207 120 , AlexAcc 206 121 , AlexAcc 205 122 , AlexAcc 204 123 , AlexAcc 203 124 , AlexAccNone 125 , AlexAccNone 126 , AlexAccNone 127 , AlexAccNone 128 , AlexAccNone 129 , AlexAccNone 130 , AlexAccNone 131 , AlexAccNone 132 , AlexAccNone 133 , AlexAccNone 134 , AlexAccNone 135 , AlexAccNone 136 , AlexAccNone 137 , AlexAccNone 138 , AlexAccNone 139 , AlexAccNone 140 , AlexAccNone 141 , AlexAccNone 142 , AlexAccNone 143 , AlexAccNone 144 , AlexAccNone 145 , AlexAccNone 146 , AlexAccNone 147 , AlexAccNone 148 , AlexAccNone 149 , AlexAccNone 150 , AlexAccNone 151 , AlexAccNone 152 , AlexAccNone 153 , AlexAccNone 154 , AlexAccNone 155 , AlexAccNone 156 , AlexAccNone 157 , AlexAccNone 158 , AlexAccNone 159 , AlexAccNone 160 , AlexAccNone 161 , AlexAccNone 162 , AlexAccNone 163 , AlexAccNone 164 , AlexAccNone 165 , AlexAccNone 166 , AlexAccNone 167 , AlexAccNone 168 , AlexAccNone 169 , AlexAccNone 170 , AlexAccNone 171 , AlexAccNone 172 , AlexAccNone 173 , AlexAccNone 174 , AlexAccNone 175 , AlexAccNone 176 , AlexAccNone 177 , AlexAccNone 178 , AlexAccNone 179 , AlexAccNone 180 , AlexAccNone 181 , AlexAccNone 182 , AlexAccNone 183 , AlexAccNone 184 , AlexAccNone 185 , AlexAccNone 186 , AlexAccNone 187 , AlexAccNone 188 , AlexAccNone 189 , AlexAccNone 190 , AlexAccNone 191 , AlexAccNone 192 , AlexAccNone 193 , AlexAccNone 194 , AlexAccNone 195 , AlexAccNone 196 , AlexAccNone 197 , AlexAccNone 198 , AlexAccNone 199 , AlexAccNone 200 , AlexAccNone 201 , AlexAccNone 202 , AlexAccNone 203 , AlexAccNone 204 , AlexAccNone 205 , AlexAccNone 206 , AlexAccNone 207 , AlexAccNone 208 , AlexAccSkip 209 , AlexAccSkip 210 , AlexAcc 202 211 , AlexAcc 201 212 , AlexAccPred 200 ( isNormalComment )(AlexAccNone) 213 , AlexAccPred 199 ( isNormalComment )(AlexAccNone) 214 , AlexAccPred 198 ( isNormalComment )(AlexAccNone) 215 , AlexAccPred 197 ( isNormalComment )(AlexAcc 196) 216 , AlexAcc 195 217 , AlexAcc 194 218 , AlexAccPred 193 ( alexNotPred (ifExtension HaddockBit) )(AlexAccNone) 219 , AlexAccPred 192 ( alexNotPred (ifExtension HaddockBit) )(AlexAcc 191) 220 , AlexAccPred 190 ( alexNotPred (ifExtension HaddockBit) )(AlexAccPred 189 ( ifExtension HaddockBit )(AlexAccNone)) 221 , AlexAcc 188 222 , AlexAccPred 187 ( atEOL )(AlexAccNone) 223 , AlexAccPred 186 ( atEOL )(AlexAccNone) 224 , AlexAccPred 185 ( atEOL )(AlexAcc 184) 225 , AlexAccPred 183 ( atEOL )(AlexAcc 182) 226 , AlexAccPred 181 ( atEOL )(AlexAccPred 180 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 179 ( followedByOpeningToken )(AlexAccPred 178 ( precededByClosingToken )(AlexAcc 177)))) 227 , AlexAccPred 176 ( atEOL )(AlexAccPred 175 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 174 ( followedByOpeningToken )(AlexAccPred 173 ( precededByClosingToken )(AlexAcc 172)))) 228 , AlexAccPred 171 ( atEOL )(AlexAccNone) 229 , AlexAccPred 170 ( atEOL )(AlexAcc 169) 230 , AlexAccSkip 231 , AlexAccPred 168 (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False))(AlexAccNone) 232 , AlexAccPred 167 (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False) `alexAndPred` followedByDigit )(AlexAccNone) 233 , AlexAccSkipPred (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False))(AlexAccNone) 234 , AlexAccSkipPred (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False))(AlexAccNone) 235 , AlexAccPred 166 ( notFollowedBy '-' )(AlexAccNone) 236 , AlexAccSkip 237 , AlexAccPred 165 (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False))(AlexAccNone) 238 , AlexAccPred 164 (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False))(AlexAccNone) 239 , AlexAccPred 163 ( notFollowedBySymbol )(AlexAccNone) 240 , AlexAcc 162 241 , AlexAccPred 161 ( known_pragma linePrags )(AlexAccNone) 242 , AlexAccPred 160 ( known_pragma linePrags )(AlexAcc 159) 243 , AlexAccPred 158 ( known_pragma linePrags )(AlexAccPred 157 ( known_pragma oneWordPrags )(AlexAccPred 156 ( known_pragma ignoredPrags )(AlexAccPred 155 ( known_pragma fileHeaderPrags )(AlexAccNone)))) 244 , AlexAccPred 154 ( known_pragma linePrags )(AlexAccPred 153 ( known_pragma oneWordPrags )(AlexAccPred 152 ( known_pragma ignoredPrags )(AlexAccPred 151 ( known_pragma fileHeaderPrags )(AlexAccNone)))) 245 , AlexAcc 150 246 , AlexAcc 149 247 , AlexAcc 148 248 , AlexAcc 147 249 , AlexAcc 146 250 , AlexAcc 145 251 , AlexAcc 144 252 , AlexAcc 143 253 , AlexAccPred 142 ( known_pragma twoWordPrags )(AlexAccNone) 254 , AlexAcc 141 255 , AlexAcc 140 256 , AlexAcc 139 257 , AlexAccPred 138 ( ifExtension HaddockBit )(AlexAccNone) 258 , AlexAcc 137 259 , AlexAcc 136 260 , AlexAcc 135 261 , AlexAcc 134 262 , AlexAccPred 133 ( ifExtension ThQuotesBit )(AlexAccPred 132 ( ifExtension QqBit )(AlexAccNone)) 263 , AlexAccPred 131 ( ifExtension ThQuotesBit )(AlexAccNone) 264 , AlexAccPred 130 ( ifExtension ThQuotesBit )(AlexAccPred 129 ( ifExtension QqBit )(AlexAccNone)) 265 , AlexAccPred 128 ( ifExtension ThQuotesBit )(AlexAccPred 127 ( ifExtension QqBit )(AlexAccNone)) 266 , AlexAccPred 126 ( ifExtension ThQuotesBit )(AlexAccPred 125 ( ifExtension QqBit )(AlexAccNone)) 267 , AlexAccPred 124 ( ifExtension QqBit )(AlexAccNone) 268 , AlexAccPred 123 ( ifExtension QqBit )(AlexAccNone) 269 , AlexAccPred 122 ( ifCurrentChar '⟦' `alexAndPred` 270 ifExtension UnicodeSyntaxBit `alexAndPred` 271 ifExtension ThQuotesBit )(AlexAccPred 121 ( ifCurrentChar '⟧' `alexAndPred` 272 ifExtension UnicodeSyntaxBit `alexAndPred` 273 ifExtension ThQuotesBit )(AlexAccPred 120 ( ifCurrentChar '⦇' `alexAndPred` 274 ifExtension UnicodeSyntaxBit `alexAndPred` 275 ifExtension ArrowsBit )(AlexAccPred 119 ( ifCurrentChar '⦈' `alexAndPred` 276 ifExtension UnicodeSyntaxBit `alexAndPred` 277 ifExtension ArrowsBit )(AlexAccNone)))) 278 , AlexAccPred 118 ( ifExtension ArrowsBit `alexAndPred` 279 notFollowedBySymbol )(AlexAccNone) 280 , AlexAccPred 117 ( ifExtension ArrowsBit )(AlexAccNone) 281 , AlexAccPred 116 ( ifExtension IpBit )(AlexAccNone) 282 , AlexAccPred 115 ( ifExtension OverloadedLabelsBit )(AlexAccNone) 283 , AlexAccPred 114 ( ifExtension UnboxedTuplesBit `alexOrPred` 284 ifExtension UnboxedSumsBit )(AlexAccNone) 285 , AlexAccPred 113 ( ifExtension UnboxedTuplesBit `alexOrPred` 286 ifExtension UnboxedSumsBit )(AlexAccNone) 287 , AlexAcc 112 288 , AlexAcc 111 289 , AlexAcc 110 290 , AlexAcc 109 291 , AlexAcc 108 292 , AlexAcc 107 293 , AlexAcc 106 294 , AlexAcc 105 295 , AlexAcc 104 296 , AlexAcc 103 297 , AlexAcc 102 298 , AlexAcc 101 299 , AlexAcc 100 300 , AlexAcc 99 301 , AlexAccPred 98 ( ifExtension RecursiveDoBit )(AlexAcc 97) 302 , AlexAccPred 96 ( ifExtension RecursiveDoBit )(AlexAcc 95) 303 , AlexAcc 94 304 , AlexAcc 93 305 , AlexAcc 92 306 , AlexAcc 91 307 , AlexAcc 90 308 , AlexAcc 89 309 , AlexAcc 88 310 , AlexAcc 87 311 , AlexAcc 86 312 , AlexAcc 85 313 , AlexAcc 84 314 , AlexAcc 83 315 , AlexAcc 82 316 , AlexAcc 81 317 , AlexAcc 80 318 , AlexAcc 79 319 , AlexAcc 78 320 , AlexAcc 77 321 , AlexAcc 76 322 , AlexAcc 75 323 , AlexAccPred 74 ( ifExtension MagicHashBit )(AlexAccNone) 324 , AlexAccPred 73 ( ifExtension MagicHashBit )(AlexAccNone) 325 , AlexAccPred 72 ( ifExtension MagicHashBit )(AlexAccNone) 326 , AlexAccPred 71 ( ifExtension MagicHashBit )(AlexAccPred 70 ( ifExtension MagicHashBit )(AlexAccNone)) 327 , AlexAccPred 69 ( ifExtension MagicHashBit )(AlexAccPred 68 ( ifExtension MagicHashBit )(AlexAccNone)) 328 , AlexAccPred 67 ( ifExtension MagicHashBit )(AlexAccNone) 329 , AlexAccPred 66 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 65 ( followedByOpeningToken )(AlexAccPred 64 ( precededByClosingToken )(AlexAcc 63))) 330 , AlexAccPred 62 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 61 ( followedByOpeningToken )(AlexAccPred 60 ( precededByClosingToken )(AlexAcc 59))) 331 , AlexAccPred 58 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 57 ( followedByOpeningToken )(AlexAccPred 56 ( precededByClosingToken )(AlexAcc 55))) 332 , AlexAccPred 54 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 53 ( followedByOpeningToken )(AlexAccPred 52 ( precededByClosingToken )(AlexAcc 51))) 333 , AlexAccPred 50 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 49 ( followedByOpeningToken )(AlexAccPred 48 ( precededByClosingToken )(AlexAcc 47))) 334 , AlexAccPred 46 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 45 ( followedByOpeningToken )(AlexAccPred 44 ( precededByClosingToken )(AlexAcc 43))) 335 , AlexAccPred 42 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 41 ( followedByOpeningToken )(AlexAccPred 40 ( precededByClosingToken )(AlexAcc 39))) 336 , AlexAcc 38 337 , AlexAcc 37 338 , AlexAcc 36 339 , AlexAcc 35 340 , AlexAcc 34 341 , AlexAccPred 33 ( ifExtension BinaryLiteralsBit )(AlexAccNone) 342 , AlexAcc 32 343 , AlexAcc 31 344 , AlexAccPred 30 ( negLitPred )(AlexAccNone) 345 , AlexAccPred 29 ( negLitPred )(AlexAccNone) 346 , AlexAccPred 28 ( negLitPred `alexAndPred` 347 ifExtension BinaryLiteralsBit )(AlexAccNone) 348 , AlexAccPred 27 ( negLitPred )(AlexAccNone) 349 , AlexAccPred 26 ( negLitPred )(AlexAccNone) 350 , AlexAcc 25 351 , AlexAcc 24 352 , AlexAccPred 23 ( negLitPred )(AlexAccNone) 353 , AlexAccPred 22 ( negLitPred )(AlexAccNone) 354 , AlexAccPred 21 ( ifExtension HexFloatLiteralsBit )(AlexAccNone) 355 , AlexAccPred 20 ( ifExtension HexFloatLiteralsBit )(AlexAccNone) 356 , AlexAccPred 19 ( ifExtension HexFloatLiteralsBit `alexAndPred` 357 negLitPred )(AlexAccNone) 358 , AlexAccPred 18 ( ifExtension HexFloatLiteralsBit `alexAndPred` 359 negLitPred )(AlexAccNone) 360 , AlexAccPred 17 ( ifExtension MagicHashBit )(AlexAccNone) 361 , AlexAccPred 16 ( ifExtension MagicHashBit `alexAndPred` 362 ifExtension BinaryLiteralsBit )(AlexAccNone) 363 , AlexAccPred 15 ( ifExtension MagicHashBit )(AlexAccNone) 364 , AlexAccPred 14 ( ifExtension MagicHashBit )(AlexAccNone) 365 , AlexAccPred 13 ( negHashLitPred )(AlexAccNone) 366 , AlexAccPred 12 ( negHashLitPred `alexAndPred` 367 ifExtension BinaryLiteralsBit )(AlexAccNone) 368 , AlexAccPred 11 ( negHashLitPred )(AlexAccNone) 369 , AlexAccPred 10 ( negHashLitPred )(AlexAccNone) 370 , AlexAccPred 9 ( ifExtension MagicHashBit )(AlexAccNone) 371 , AlexAccPred 8 ( ifExtension MagicHashBit `alexAndPred` 372 ifExtension BinaryLiteralsBit )(AlexAccNone) 373 , AlexAccPred 7 ( ifExtension MagicHashBit )(AlexAccNone) 374 , AlexAccPred 6 ( ifExtension MagicHashBit )(AlexAccNone) 375 , AlexAccPred 5 ( ifExtension MagicHashBit )(AlexAccNone) 376 , AlexAccPred 4 ( ifExtension MagicHashBit )(AlexAccNone) 377 , AlexAccPred 3 ( negHashLitPred )(AlexAccNone) 378 , AlexAccPred 2 ( negHashLitPred )(AlexAccNone) 379 , AlexAcc 1 380 , AlexAcc 0 381 ] 382 383alex_actions = array (0 :: Int, 210) 384 [ (209,alex_action_14) 385 , (208,alex_action_20) 386 , (207,alex_action_21) 387 , (206,alex_action_19) 388 , (205,alex_action_22) 389 , (204,alex_action_26) 390 , (203,alex_action_27) 391 , (202,alex_action_1) 392 , (201,alex_action_1) 393 , (200,alex_action_2) 394 , (199,alex_action_2) 395 , (198,alex_action_2) 396 , (197,alex_action_2) 397 , (196,alex_action_27) 398 , (195,alex_action_3) 399 , (194,alex_action_4) 400 , (193,alex_action_5) 401 , (192,alex_action_5) 402 , (191,alex_action_27) 403 , (190,alex_action_5) 404 , (189,alex_action_38) 405 , (188,alex_action_6) 406 , (187,alex_action_7) 407 , (186,alex_action_7) 408 , (185,alex_action_7) 409 , (184,alex_action_27) 410 , (183,alex_action_7) 411 , (182,alex_action_27) 412 , (181,alex_action_7) 413 , (180,alex_action_80) 414 , (179,alex_action_81) 415 , (178,alex_action_82) 416 , (177,alex_action_83) 417 , (176,alex_action_7) 418 , (175,alex_action_80) 419 , (174,alex_action_81) 420 , (173,alex_action_82) 421 , (172,alex_action_83) 422 , (171,alex_action_8) 423 , (170,alex_action_8) 424 , (169,alex_action_27) 425 , (168,alex_action_10) 426 , (167,alex_action_11) 427 , (166,alex_action_15) 428 , (165,alex_action_17) 429 , (164,alex_action_17) 430 , (163,alex_action_18) 431 , (162,alex_action_23) 432 , (161,alex_action_24) 433 , (160,alex_action_24) 434 , (159,alex_action_27) 435 , (158,alex_action_24) 436 , (157,alex_action_32) 437 , (156,alex_action_33) 438 , (155,alex_action_35) 439 , (154,alex_action_24) 440 , (153,alex_action_32) 441 , (152,alex_action_33) 442 , (151,alex_action_36) 443 , (150,alex_action_25) 444 , (149,alex_action_27) 445 , (148,alex_action_27) 446 , (147,alex_action_27) 447 , (146,alex_action_27) 448 , (145,alex_action_28) 449 , (144,alex_action_29) 450 , (143,alex_action_30) 451 , (142,alex_action_31) 452 , (141,alex_action_34) 453 , (140,alex_action_37) 454 , (139,alex_action_37) 455 , (138,alex_action_39) 456 , (137,alex_action_40) 457 , (136,alex_action_41) 458 , (135,alex_action_42) 459 , (134,alex_action_43) 460 , (133,alex_action_44) 461 , (132,alex_action_49) 462 , (131,alex_action_45) 463 , (130,alex_action_46) 464 , (129,alex_action_49) 465 , (128,alex_action_47) 466 , (127,alex_action_49) 467 , (126,alex_action_48) 468 , (125,alex_action_49) 469 , (124,alex_action_49) 470 , (123,alex_action_50) 471 , (122,alex_action_51) 472 , (121,alex_action_52) 473 , (120,alex_action_55) 474 , (119,alex_action_56) 475 , (118,alex_action_53) 476 , (117,alex_action_54) 477 , (116,alex_action_57) 478 , (115,alex_action_58) 479 , (114,alex_action_59) 480 , (113,alex_action_60) 481 , (112,alex_action_61) 482 , (111,alex_action_61) 483 , (110,alex_action_62) 484 , (109,alex_action_63) 485 , (108,alex_action_63) 486 , (107,alex_action_64) 487 , (106,alex_action_65) 488 , (105,alex_action_66) 489 , (104,alex_action_67) 490 , (103,alex_action_68) 491 , (102,alex_action_68) 492 , (101,alex_action_69) 493 , (100,alex_action_70) 494 , (99,alex_action_70) 495 , (98,alex_action_71) 496 , (97,alex_action_72) 497 , (96,alex_action_71) 498 , (95,alex_action_72) 499 , (94,alex_action_72) 500 , (93,alex_action_72) 501 , (92,alex_action_72) 502 , (91,alex_action_72) 503 , (90,alex_action_72) 504 , (89,alex_action_72) 505 , (88,alex_action_72) 506 , (87,alex_action_72) 507 , (86,alex_action_73) 508 , (85,alex_action_73) 509 , (84,alex_action_74) 510 , (83,alex_action_74) 511 , (82,alex_action_74) 512 , (81,alex_action_74) 513 , (80,alex_action_74) 514 , (79,alex_action_74) 515 , (78,alex_action_74) 516 , (77,alex_action_74) 517 , (76,alex_action_75) 518 , (75,alex_action_75) 519 , (74,alex_action_76) 520 , (73,alex_action_77) 521 , (72,alex_action_78) 522 , (71,alex_action_78) 523 , (70,alex_action_111) 524 , (69,alex_action_78) 525 , (68,alex_action_112) 526 , (67,alex_action_79) 527 , (66,alex_action_80) 528 , (65,alex_action_81) 529 , (64,alex_action_82) 530 , (63,alex_action_83) 531 , (62,alex_action_80) 532 , (61,alex_action_81) 533 , (60,alex_action_82) 534 , (59,alex_action_83) 535 , (58,alex_action_80) 536 , (57,alex_action_81) 537 , (56,alex_action_82) 538 , (55,alex_action_83) 539 , (54,alex_action_80) 540 , (53,alex_action_81) 541 , (52,alex_action_82) 542 , (51,alex_action_83) 543 , (50,alex_action_80) 544 , (49,alex_action_81) 545 , (48,alex_action_82) 546 , (47,alex_action_83) 547 , (46,alex_action_80) 548 , (45,alex_action_81) 549 , (44,alex_action_82) 550 , (43,alex_action_83) 551 , (42,alex_action_80) 552 , (41,alex_action_81) 553 , (40,alex_action_82) 554 , (39,alex_action_83) 555 , (38,alex_action_84) 556 , (37,alex_action_85) 557 , (36,alex_action_86) 558 , (35,alex_action_87) 559 , (34,alex_action_87) 560 , (33,alex_action_88) 561 , (32,alex_action_89) 562 , (31,alex_action_90) 563 , (30,alex_action_91) 564 , (29,alex_action_91) 565 , (28,alex_action_92) 566 , (27,alex_action_93) 567 , (26,alex_action_94) 568 , (25,alex_action_95) 569 , (24,alex_action_95) 570 , (23,alex_action_96) 571 , (22,alex_action_96) 572 , (21,alex_action_97) 573 , (20,alex_action_97) 574 , (19,alex_action_98) 575 , (18,alex_action_98) 576 , (17,alex_action_99) 577 , (16,alex_action_100) 578 , (15,alex_action_101) 579 , (14,alex_action_102) 580 , (13,alex_action_103) 581 , (12,alex_action_104) 582 , (11,alex_action_105) 583 , (10,alex_action_106) 584 , (9,alex_action_107) 585 , (8,alex_action_108) 586 , (7,alex_action_109) 587 , (6,alex_action_110) 588 , (5,alex_action_111) 589 , (4,alex_action_112) 590 , (3,alex_action_113) 591 , (2,alex_action_114) 592 , (1,alex_action_115) 593 , (0,alex_action_116) 594 ] 595 596{-# LINE 686 "compiler/GHC/Parser/Lexer.x" #-} 597 598 599-- ----------------------------------------------------------------------------- 600-- The token type 601 602data Token 603 = ITas -- Haskell keywords 604 | ITcase 605 | ITclass 606 | ITdata 607 | ITdefault 608 | ITderiving 609 | ITdo (Maybe FastString) 610 | ITelse 611 | IThiding 612 | ITforeign 613 | ITif 614 | ITimport 615 | ITin 616 | ITinfix 617 | ITinfixl 618 | ITinfixr 619 | ITinstance 620 | ITlet 621 | ITmodule 622 | ITnewtype 623 | ITof 624 | ITqualified 625 | ITthen 626 | ITtype 627 | ITwhere 628 629 | ITforall IsUnicodeSyntax -- GHC extension keywords 630 | ITexport 631 | ITlabel 632 | ITdynamic 633 | ITsafe 634 | ITinterruptible 635 | ITunsafe 636 | ITstdcallconv 637 | ITccallconv 638 | ITcapiconv 639 | ITprimcallconv 640 | ITjavascriptcallconv 641 | ITmdo (Maybe FastString) 642 | ITfamily 643 | ITrole 644 | ITgroup 645 | ITby 646 | ITusing 647 | ITpattern 648 | ITstatic 649 | ITstock 650 | ITanyclass 651 | ITvia 652 653 -- Backpack tokens 654 | ITunit 655 | ITsignature 656 | ITdependency 657 | ITrequires 658 659 -- Pragmas, see note [Pragma source text] in "GHC.Types.Basic" 660 | ITinline_prag SourceText InlineSpec RuleMatchInfo 661 | ITspec_prag SourceText -- SPECIALISE 662 | ITspec_inline_prag SourceText Bool -- SPECIALISE INLINE (or NOINLINE) 663 | ITsource_prag SourceText 664 | ITrules_prag SourceText 665 | ITwarning_prag SourceText 666 | ITdeprecated_prag SourceText 667 | ITline_prag SourceText -- not usually produced, see 'UsePosPragsBit' 668 | ITcolumn_prag SourceText -- not usually produced, see 'UsePosPragsBit' 669 | ITscc_prag SourceText 670 | ITunpack_prag SourceText 671 | ITnounpack_prag SourceText 672 | ITann_prag SourceText 673 | ITcomplete_prag SourceText 674 | ITclose_prag 675 | IToptions_prag String 676 | ITinclude_prag String 677 | ITlanguage_prag 678 | ITminimal_prag SourceText 679 | IToverlappable_prag SourceText -- instance overlap mode 680 | IToverlapping_prag SourceText -- instance overlap mode 681 | IToverlaps_prag SourceText -- instance overlap mode 682 | ITincoherent_prag SourceText -- instance overlap mode 683 | ITctype SourceText 684 | ITcomment_line_prag -- See Note [Nested comment line pragmas] 685 686 | ITdotdot -- reserved symbols 687 | ITcolon 688 | ITdcolon IsUnicodeSyntax 689 | ITequal 690 | ITlam 691 | ITlcase 692 | ITvbar 693 | ITlarrow IsUnicodeSyntax 694 | ITrarrow IsUnicodeSyntax 695 | ITdarrow IsUnicodeSyntax 696 | ITlolly -- The (⊸) arrow (for LinearTypes) 697 | ITminus -- See Note [Minus tokens] 698 | ITprefixminus -- See Note [Minus tokens] 699 | ITbang -- Prefix (!) only, e.g. f !x = rhs 700 | ITtilde -- Prefix (~) only, e.g. f ~x = rhs 701 | ITat -- Tight infix (@) only, e.g. f x@pat = rhs 702 | ITtypeApp -- Prefix (@) only, e.g. f @t 703 | ITpercent -- Prefix (%) only, e.g. a %1 -> b 704 | ITstar IsUnicodeSyntax 705 | ITdot 706 | ITproj Bool -- Extension: OverloadedRecordDotBit 707 708 | ITbiglam -- GHC-extension symbols 709 710 | ITocurly -- special symbols 711 | ITccurly 712 | ITvocurly 713 | ITvccurly 714 | ITobrack 715 | ITopabrack -- [:, for parallel arrays with -XParallelArrays 716 | ITcpabrack -- :], for parallel arrays with -XParallelArrays 717 | ITcbrack 718 | IToparen 719 | ITcparen 720 | IToubxparen 721 | ITcubxparen 722 | ITsemi 723 | ITcomma 724 | ITunderscore 725 | ITbackquote 726 | ITsimpleQuote -- ' 727 728 | ITvarid FastString -- identifiers 729 | ITconid FastString 730 | ITvarsym FastString 731 | ITconsym FastString 732 | ITqvarid (FastString,FastString) 733 | ITqconid (FastString,FastString) 734 | ITqvarsym (FastString,FastString) 735 | ITqconsym (FastString,FastString) 736 737 | ITdupipvarid FastString -- GHC extension: implicit param: ?x 738 | ITlabelvarid FastString -- Overloaded label: #x 739 740 | ITchar SourceText Char -- Note [Literal source text] in "GHC.Types.Basic" 741 | ITstring SourceText FastString -- Note [Literal source text] in "GHC.Types.Basic" 742 | ITinteger IntegralLit -- Note [Literal source text] in "GHC.Types.Basic" 743 | ITrational FractionalLit 744 745 | ITprimchar SourceText Char -- Note [Literal source text] in "GHC.Types.Basic" 746 | ITprimstring SourceText ByteString -- Note [Literal source text] in "GHC.Types.Basic" 747 | ITprimint SourceText Integer -- Note [Literal source text] in "GHC.Types.Basic" 748 | ITprimword SourceText Integer -- Note [Literal source text] in "GHC.Types.Basic" 749 | ITprimfloat FractionalLit 750 | ITprimdouble FractionalLit 751 752 -- Template Haskell extension tokens 753 | ITopenExpQuote HasE IsUnicodeSyntax -- [| or [e| 754 | ITopenPatQuote -- [p| 755 | ITopenDecQuote -- [d| 756 | ITopenTypQuote -- [t| 757 | ITcloseQuote IsUnicodeSyntax -- |] 758 | ITopenTExpQuote HasE -- [|| or [e|| 759 | ITcloseTExpQuote -- ||] 760 | ITdollar -- prefix $ 761 | ITdollardollar -- prefix $$ 762 | ITtyQuote -- '' 763 | ITquasiQuote (FastString,FastString,PsSpan) 764 -- ITquasiQuote(quoter, quote, loc) 765 -- represents a quasi-quote of the form 766 -- [quoter| quote |] 767 | ITqQuasiQuote (FastString,FastString,FastString,PsSpan) 768 -- ITqQuasiQuote(Qual, quoter, quote, loc) 769 -- represents a qualified quasi-quote of the form 770 -- [Qual.quoter| quote |] 771 772 -- Arrow notation extension 773 | ITproc 774 | ITrec 775 | IToparenbar IsUnicodeSyntax -- ^ @(|@ 776 | ITcparenbar IsUnicodeSyntax -- ^ @|)@ 777 | ITlarrowtail IsUnicodeSyntax -- ^ @-<@ 778 | ITrarrowtail IsUnicodeSyntax -- ^ @>-@ 779 | ITLarrowtail IsUnicodeSyntax -- ^ @-<<@ 780 | ITRarrowtail IsUnicodeSyntax -- ^ @>>-@ 781 782 | ITunknown String -- ^ Used when the lexer can't make sense of it 783 | ITeof -- ^ end of file token 784 785 -- Documentation annotations. See Note [PsSpan in Comments] 786 | ITdocCommentNext String PsSpan -- ^ something beginning @-- |@ 787 | ITdocCommentPrev String PsSpan -- ^ something beginning @-- ^@ 788 | ITdocCommentNamed String PsSpan -- ^ something beginning @-- $@ 789 | ITdocSection Int String PsSpan -- ^ a section heading 790 | ITdocOptions String PsSpan -- ^ doc options (prune, ignore-exports, etc) 791 | ITlineComment String PsSpan -- ^ comment starting by "--" 792 | ITblockComment String PsSpan -- ^ comment in {- -} 793 794 deriving Show 795 796instance Outputable Token where 797 ppr x = text (show x) 798 799{- Note [PsSpan in Comments] 800~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 801When using the Api Annotations to exact print a modified AST, managing 802the space before a comment is important. The PsSpan in the comment 803token allows this to happen. 804 805We also need to track the space before the end of file. The normal 806mechanism of using the previous token does not work, as the ITeof is 807synthesised to come at the same location of the last token, and the 808normal previous token updating has by then updated the required 809location. 810 811We track this using a 2-back location, prev_loc2. This adds extra 812processing to every single token, which is a performance hit for 813something needed only at the end of the file. This needs 814improving. Perhaps a backward scan on eof? 815-} 816 817{- Note [Minus tokens] 818~~~~~~~~~~~~~~~~~~~~~~ 819A minus sign can be used in prefix form (-x) and infix form (a - b). 820 821When LexicalNegation is on: 822 * ITprefixminus represents the prefix form 823 * ITvarsym "-" represents the infix form 824 * ITminus is not used 825 826When LexicalNegation is off: 827 * ITminus represents all forms 828 * ITprefixminus is not used 829 * ITvarsym "-" is not used 830-} 831 832{- Note [Why not LexicalNegationBit] 833~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 834One might wonder why we define NoLexicalNegationBit instead of 835LexicalNegationBit. The problem lies in the following line in reservedSymsFM: 836 837 ,("-", ITminus, NormalSyntax, xbit NoLexicalNegationBit) 838 839We want to generate ITminus only when LexicalNegation is off. How would one 840do it if we had LexicalNegationBit? I (int-index) tried to use bitwise 841complement: 842 843 ,("-", ITminus, NormalSyntax, complement (xbit LexicalNegationBit)) 844 845This did not work, so I opted for NoLexicalNegationBit instead. 846-} 847 848 849-- the bitmap provided as the third component indicates whether the 850-- corresponding extension keyword is valid under the extension options 851-- provided to the compiler; if the extension corresponding to *any* of the 852-- bits set in the bitmap is enabled, the keyword is valid (this setup 853-- facilitates using a keyword in two different extensions that can be 854-- activated independently) 855-- 856reservedWordsFM :: UniqFM FastString (Token, ExtsBitmap) 857reservedWordsFM = listToUFM $ 858 map (\(x, y, z) -> (mkFastString x, (y, z))) 859 [( "_", ITunderscore, 0 ), 860 ( "as", ITas, 0 ), 861 ( "case", ITcase, 0 ), 862 ( "class", ITclass, 0 ), 863 ( "data", ITdata, 0 ), 864 ( "default", ITdefault, 0 ), 865 ( "deriving", ITderiving, 0 ), 866 ( "do", ITdo Nothing, 0 ), 867 ( "else", ITelse, 0 ), 868 ( "hiding", IThiding, 0 ), 869 ( "if", ITif, 0 ), 870 ( "import", ITimport, 0 ), 871 ( "in", ITin, 0 ), 872 ( "infix", ITinfix, 0 ), 873 ( "infixl", ITinfixl, 0 ), 874 ( "infixr", ITinfixr, 0 ), 875 ( "instance", ITinstance, 0 ), 876 ( "let", ITlet, 0 ), 877 ( "module", ITmodule, 0 ), 878 ( "newtype", ITnewtype, 0 ), 879 ( "of", ITof, 0 ), 880 ( "qualified", ITqualified, 0 ), 881 ( "then", ITthen, 0 ), 882 ( "type", ITtype, 0 ), 883 ( "where", ITwhere, 0 ), 884 885 ( "forall", ITforall NormalSyntax, 0), 886 ( "mdo", ITmdo Nothing, xbit RecursiveDoBit), 887 -- See Note [Lexing type pseudo-keywords] 888 ( "family", ITfamily, 0 ), 889 ( "role", ITrole, 0 ), 890 ( "pattern", ITpattern, xbit PatternSynonymsBit), 891 ( "static", ITstatic, xbit StaticPointersBit ), 892 ( "stock", ITstock, 0 ), 893 ( "anyclass", ITanyclass, 0 ), 894 ( "via", ITvia, 0 ), 895 ( "group", ITgroup, xbit TransformComprehensionsBit), 896 ( "by", ITby, xbit TransformComprehensionsBit), 897 ( "using", ITusing, xbit TransformComprehensionsBit), 898 899 ( "foreign", ITforeign, xbit FfiBit), 900 ( "export", ITexport, xbit FfiBit), 901 ( "label", ITlabel, xbit FfiBit), 902 ( "dynamic", ITdynamic, xbit FfiBit), 903 ( "safe", ITsafe, xbit FfiBit .|. 904 xbit SafeHaskellBit), 905 ( "interruptible", ITinterruptible, xbit InterruptibleFfiBit), 906 ( "unsafe", ITunsafe, xbit FfiBit), 907 ( "stdcall", ITstdcallconv, xbit FfiBit), 908 ( "ccall", ITccallconv, xbit FfiBit), 909 ( "capi", ITcapiconv, xbit CApiFfiBit), 910 ( "prim", ITprimcallconv, xbit FfiBit), 911 ( "javascript", ITjavascriptcallconv, xbit FfiBit), 912 913 ( "unit", ITunit, 0 ), 914 ( "dependency", ITdependency, 0 ), 915 ( "signature", ITsignature, 0 ), 916 917 ( "rec", ITrec, xbit ArrowsBit .|. 918 xbit RecursiveDoBit), 919 ( "proc", ITproc, xbit ArrowsBit) 920 ] 921 922{----------------------------------- 923Note [Lexing type pseudo-keywords] 924~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 925 926One might think that we wish to treat 'family' and 'role' as regular old 927varids whenever -XTypeFamilies and -XRoleAnnotations are off, respectively. 928But, there is no need to do so. These pseudo-keywords are not stolen syntax: 929they are only used after the keyword 'type' at the top-level, where varids are 930not allowed. Furthermore, checks further downstream (GHC.Tc.TyCl) ensure that 931type families and role annotations are never declared without their extensions 932on. In fact, by unconditionally lexing these pseudo-keywords as special, we 933can get better error messages. 934 935Also, note that these are included in the `varid` production in the parser -- 936a key detail to make all this work. 937-------------------------------------} 938 939reservedSymsFM :: UniqFM FastString (Token, IsUnicodeSyntax, ExtsBitmap) 940reservedSymsFM = listToUFM $ 941 map (\ (x,w,y,z) -> (mkFastString x,(w,y,z))) 942 [ ("..", ITdotdot, NormalSyntax, 0 ) 943 -- (:) is a reserved op, meaning only list cons 944 ,(":", ITcolon, NormalSyntax, 0 ) 945 ,("::", ITdcolon NormalSyntax, NormalSyntax, 0 ) 946 ,("=", ITequal, NormalSyntax, 0 ) 947 ,("\\", ITlam, NormalSyntax, 0 ) 948 ,("|", ITvbar, NormalSyntax, 0 ) 949 ,("<-", ITlarrow NormalSyntax, NormalSyntax, 0 ) 950 ,("->", ITrarrow NormalSyntax, NormalSyntax, 0 ) 951 ,("=>", ITdarrow NormalSyntax, NormalSyntax, 0 ) 952 ,("-", ITminus, NormalSyntax, xbit NoLexicalNegationBit) 953 954 ,("*", ITstar NormalSyntax, NormalSyntax, xbit StarIsTypeBit) 955 956 -- For 'forall a . t' 957 ,(".", ITdot, NormalSyntax, 0 ) 958 959 ,("-<", ITlarrowtail NormalSyntax, NormalSyntax, xbit ArrowsBit) 960 ,(">-", ITrarrowtail NormalSyntax, NormalSyntax, xbit ArrowsBit) 961 ,("-<<", ITLarrowtail NormalSyntax, NormalSyntax, xbit ArrowsBit) 962 ,(">>-", ITRarrowtail NormalSyntax, NormalSyntax, xbit ArrowsBit) 963 964 ,("∷", ITdcolon UnicodeSyntax, UnicodeSyntax, 0 ) 965 ,("⇒", ITdarrow UnicodeSyntax, UnicodeSyntax, 0 ) 966 ,("∀", ITforall UnicodeSyntax, UnicodeSyntax, 0 ) 967 ,("→", ITrarrow UnicodeSyntax, UnicodeSyntax, 0 ) 968 ,("←", ITlarrow UnicodeSyntax, UnicodeSyntax, 0 ) 969 970 ,("⊸", ITlolly, UnicodeSyntax, 0) 971 972 ,("⤙", ITlarrowtail UnicodeSyntax, UnicodeSyntax, xbit ArrowsBit) 973 ,("⤚", ITrarrowtail UnicodeSyntax, UnicodeSyntax, xbit ArrowsBit) 974 ,("⤛", ITLarrowtail UnicodeSyntax, UnicodeSyntax, xbit ArrowsBit) 975 ,("⤜", ITRarrowtail UnicodeSyntax, UnicodeSyntax, xbit ArrowsBit) 976 977 ,("★", ITstar UnicodeSyntax, UnicodeSyntax, xbit StarIsTypeBit) 978 979 -- ToDo: ideally, → and ∷ should be "specials", so that they cannot 980 -- form part of a large operator. This would let us have a better 981 -- syntax for kinds: ɑ∷*→* would be a legal kind signature. (maybe). 982 ] 983 984-- ----------------------------------------------------------------------------- 985-- Lexer actions 986 987type Action = PsSpan -> StringBuffer -> Int -> P (PsLocated Token) 988 989special :: Token -> Action 990special tok span _buf _len = return (L span tok) 991 992token, layout_token :: Token -> Action 993token t span _buf _len = return (L span t) 994layout_token t span _buf _len = pushLexState layout >> return (L span t) 995 996idtoken :: (StringBuffer -> Int -> Token) -> Action 997idtoken f span buf len = return (L span $! (f buf len)) 998 999qdo_token :: (Maybe FastString -> Token) -> Action 1000qdo_token con span buf len = do 1001 maybe_layout token 1002 return (L span $! token) 1003 where 1004 !token = con $! Just $! fst $! splitQualName buf len False 1005 1006skip_one_varid :: (FastString -> Token) -> Action 1007skip_one_varid f span buf len 1008 = return (L span $! f (lexemeToFastString (stepOn buf) (len-1))) 1009 1010skip_two_varid :: (FastString -> Token) -> Action 1011skip_two_varid f span buf len 1012 = return (L span $! f (lexemeToFastString (stepOn (stepOn buf)) (len-2))) 1013 1014strtoken :: (String -> Token) -> Action 1015strtoken f span buf len = 1016 return (L span $! (f $! lexemeToString buf len)) 1017 1018begin :: Int -> Action 1019begin code _span _str _len = do pushLexState code; lexToken 1020 1021pop :: Action 1022pop _span _buf _len = do _ <- popLexState 1023 lexToken 1024-- See Note [Nested comment line pragmas] 1025failLinePrag1 :: Action 1026failLinePrag1 span _buf _len = do 1027 b <- getBit InNestedCommentBit 1028 if b then return (L span ITcomment_line_prag) 1029 else lexError LexErrorInPragma 1030 1031-- See Note [Nested comment line pragmas] 1032popLinePrag1 :: Action 1033popLinePrag1 span _buf _len = do 1034 b <- getBit InNestedCommentBit 1035 if b then return (L span ITcomment_line_prag) else do 1036 _ <- popLexState 1037 lexToken 1038 1039hopefully_open_brace :: Action 1040hopefully_open_brace span buf len 1041 = do relaxed <- getBit RelaxedLayoutBit 1042 ctx <- getContext 1043 (AI l _) <- getInput 1044 let offset = srcLocCol (psRealLoc l) 1045 isOK = relaxed || 1046 case ctx of 1047 Layout prev_off _ : _ -> prev_off < offset 1048 _ -> True 1049 if isOK then pop_and open_brace span buf len 1050 else addFatalError $ PsError PsErrMissingBlock [] (mkSrcSpanPs span) 1051 1052pop_and :: Action -> Action 1053pop_and act span buf len = do _ <- popLexState 1054 act span buf len 1055 1056-- See Note [Whitespace-sensitive operator parsing] 1057followedByOpeningToken :: AlexAccPred ExtsBitmap 1058followedByOpeningToken _ _ _ (AI _ buf) 1059 | atEnd buf = False 1060 | otherwise = 1061 case nextChar buf of 1062 ('{', buf') -> nextCharIsNot buf' (== '-') 1063 ('(', _) -> True 1064 ('[', _) -> True 1065 ('\"', _) -> True 1066 ('\'', _) -> True 1067 ('_', _) -> True 1068 ('⟦', _) -> True 1069 ('⦇', _) -> True 1070 (c, _) -> isAlphaNum c 1071 1072-- See Note [Whitespace-sensitive operator parsing] 1073precededByClosingToken :: AlexAccPred ExtsBitmap 1074precededByClosingToken _ (AI _ buf) _ _ = 1075 case prevChar buf '\n' of 1076 '}' -> decodePrevNChars 1 buf /= "-" 1077 ')' -> True 1078 ']' -> True 1079 '\"' -> True 1080 '\'' -> True 1081 '_' -> True 1082 '⟧' -> True 1083 '⦈' -> True 1084 c -> isAlphaNum c 1085 1086{-# INLINE nextCharIs #-} 1087nextCharIs :: StringBuffer -> (Char -> Bool) -> Bool 1088nextCharIs buf p = not (atEnd buf) && p (currentChar buf) 1089 1090{-# INLINE nextCharIsNot #-} 1091nextCharIsNot :: StringBuffer -> (Char -> Bool) -> Bool 1092nextCharIsNot buf p = not (nextCharIs buf p) 1093 1094notFollowedBy :: Char -> AlexAccPred ExtsBitmap 1095notFollowedBy char _ _ _ (AI _ buf) 1096 = nextCharIsNot buf (== char) 1097 1098notFollowedBySymbol :: AlexAccPred ExtsBitmap 1099notFollowedBySymbol _ _ _ (AI _ buf) 1100 = nextCharIsNot buf (`elem` "!#$%&*+./<=>?@\\^|-~") 1101 1102followedByDigit :: AlexAccPred ExtsBitmap 1103followedByDigit _ _ _ (AI _ buf) 1104 = afterOptionalSpace buf (\b -> nextCharIs b (`elem` ['0'..'9'])) 1105 1106ifCurrentChar :: Char -> AlexAccPred ExtsBitmap 1107ifCurrentChar char _ (AI _ buf) _ _ 1108 = nextCharIs buf (== char) 1109 1110-- We must reject doc comments as being ordinary comments everywhere. 1111-- In some cases the doc comment will be selected as the lexeme due to 1112-- maximal munch, but not always, because the nested comment rule is 1113-- valid in all states, but the doc-comment rules are only valid in 1114-- the non-layout states. 1115isNormalComment :: AlexAccPred ExtsBitmap 1116isNormalComment bits _ _ (AI _ buf) 1117 | HaddockBit `xtest` bits = notFollowedByDocOrPragma 1118 | otherwise = nextCharIsNot buf (== '#') 1119 where 1120 notFollowedByDocOrPragma 1121 = afterOptionalSpace buf (\b -> nextCharIsNot b (`elem` "|^*$#")) 1122 1123afterOptionalSpace :: StringBuffer -> (StringBuffer -> Bool) -> Bool 1124afterOptionalSpace buf p 1125 = if nextCharIs buf (== ' ') 1126 then p (snd (nextChar buf)) 1127 else p buf 1128 1129atEOL :: AlexAccPred ExtsBitmap 1130atEOL _ _ _ (AI _ buf) = atEnd buf || currentChar buf == '\n' 1131 1132-- Check if we should parse a negative literal (e.g. -123) as a single token. 1133negLitPred :: AlexAccPred ExtsBitmap 1134negLitPred = 1135 prefix_minus `alexAndPred` 1136 (negative_literals `alexOrPred` lexical_negation) 1137 where 1138 negative_literals = ifExtension NegativeLiteralsBit 1139 1140 lexical_negation = 1141 -- See Note [Why not LexicalNegationBit] 1142 alexNotPred (ifExtension NoLexicalNegationBit) 1143 1144 prefix_minus = 1145 -- Note [prefix_minus in negLitPred and negHashLitPred] 1146 alexNotPred precededByClosingToken 1147 1148-- Check if we should parse an unboxed negative literal (e.g. -123#) as a single token. 1149negHashLitPred :: AlexAccPred ExtsBitmap 1150negHashLitPred = prefix_minus `alexAndPred` magic_hash 1151 where 1152 magic_hash = ifExtension MagicHashBit 1153 prefix_minus = 1154 -- Note [prefix_minus in negLitPred and negHashLitPred] 1155 alexNotPred precededByClosingToken 1156 1157{- Note [prefix_minus in negLitPred and negHashLitPred] 1158~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1159We want to parse -1 as a single token, but x-1 as three tokens. 1160So in negLitPred (and negHashLitPred) we require that we have a prefix 1161occurrence of the minus sign. See Note [Whitespace-sensitive operator parsing] 1162for a detailed definition of a prefix occurrence. 1163 1164The condition for a prefix occurrence of an operator is: 1165 1166 not precededByClosingToken && followedByOpeningToken 1167 1168but we don't check followedByOpeningToken when parsing a negative literal. 1169It holds simply because we immediately lex a literal after the minus. 1170-} 1171 1172ifExtension :: ExtBits -> AlexAccPred ExtsBitmap 1173ifExtension extBits bits _ _ _ = extBits `xtest` bits 1174 1175alexNotPred p userState in1 len in2 1176 = not (p userState in1 len in2) 1177 1178alexOrPred p1 p2 userState in1 len in2 1179 = p1 userState in1 len in2 || p2 userState in1 len in2 1180 1181multiline_doc_comment :: Action 1182multiline_doc_comment span buf _len = withLexedDocType (worker "") 1183 where 1184 worker commentAcc input docType checkNextLine = case alexGetChar' input of 1185 Just ('\n', input') 1186 | checkNextLine -> case checkIfCommentLine input' of 1187 Just input -> worker ('\n':commentAcc) input docType checkNextLine 1188 Nothing -> docCommentEnd input commentAcc docType buf span 1189 | otherwise -> docCommentEnd input commentAcc docType buf span 1190 Just (c, input) -> worker (c:commentAcc) input docType checkNextLine 1191 Nothing -> docCommentEnd input commentAcc docType buf span 1192 1193 -- Check if the next line of input belongs to this doc comment as well. 1194 -- A doc comment continues onto the next line when the following 1195 -- conditions are met: 1196 -- * The line starts with "--" 1197 -- * The line doesn't start with "---". 1198 -- * The line doesn't start with "-- $", because that would be the 1199 -- start of a /new/ named haddock chunk (#10398). 1200 checkIfCommentLine :: AlexInput -> Maybe AlexInput 1201 checkIfCommentLine input = check (dropNonNewlineSpace input) 1202 where 1203 check input = do 1204 ('-', input) <- alexGetChar' input 1205 ('-', input) <- alexGetChar' input 1206 (c, after_c) <- alexGetChar' input 1207 case c of 1208 '-' -> Nothing 1209 ' ' -> case alexGetChar' after_c of 1210 Just ('$', _) -> Nothing 1211 _ -> Just input 1212 _ -> Just input 1213 1214 dropNonNewlineSpace input = case alexGetChar' input of 1215 Just (c, input') 1216 | isSpace c && c /= '\n' -> dropNonNewlineSpace input' 1217 | otherwise -> input 1218 Nothing -> input 1219 1220lineCommentToken :: Action 1221lineCommentToken span buf len = do 1222 b <- getBit RawTokenStreamBit 1223 if b then do 1224 lt <- getLastLocComment 1225 strtoken (\s -> ITlineComment s lt) span buf len 1226 else lexToken 1227 1228 1229{- 1230 nested comments require traversing by hand, they can't be parsed 1231 using regular expressions. 1232-} 1233nested_comment :: P (PsLocated Token) -> Action 1234nested_comment cont span buf len = do 1235 input <- getInput 1236 go (reverse $ lexemeToString buf len) (1::Int) input 1237 where 1238 go commentAcc 0 input = do 1239 l <- getLastLocComment 1240 let finalizeComment str = (Nothing, ITblockComment str l) 1241 commentEnd cont input commentAcc finalizeComment buf span 1242 go commentAcc n input = case alexGetChar' input of 1243 Nothing -> errBrace input (psRealSpan span) 1244 Just ('-',input) -> case alexGetChar' input of 1245 Nothing -> errBrace input (psRealSpan span) 1246 Just ('\125',input) -> go ('\125':'-':commentAcc) (n-1) input -- '}' 1247 Just (_,_) -> go ('-':commentAcc) n input 1248 Just ('\123',input) -> case alexGetChar' input of -- '{' char 1249 Nothing -> errBrace input (psRealSpan span) 1250 Just ('-',input) -> go ('-':'\123':commentAcc) (n+1) input 1251 Just (_,_) -> go ('\123':commentAcc) n input 1252 -- See Note [Nested comment line pragmas] 1253 Just ('\n',input) -> case alexGetChar' input of 1254 Nothing -> errBrace input (psRealSpan span) 1255 Just ('#',_) -> do (parsedAcc,input) <- parseNestedPragma input 1256 go (parsedAcc ++ '\n':commentAcc) n input 1257 Just (_,_) -> go ('\n':commentAcc) n input 1258 Just (c,input) -> go (c:commentAcc) n input 1259 1260nested_doc_comment :: Action 1261nested_doc_comment span buf _len = withLexedDocType (go "") 1262 where 1263 go commentAcc input docType _ = case alexGetChar' input of 1264 Nothing -> errBrace input (psRealSpan span) 1265 Just ('-',input) -> case alexGetChar' input of 1266 Nothing -> errBrace input (psRealSpan span) 1267 Just ('\125',input) -> 1268 docCommentEnd input commentAcc docType buf span 1269 Just (_,_) -> go ('-':commentAcc) input docType False 1270 Just ('\123', input) -> case alexGetChar' input of 1271 Nothing -> errBrace input (psRealSpan span) 1272 Just ('-',input) -> do 1273 setInput input 1274 let cont = do input <- getInput; go commentAcc input docType False 1275 nested_comment cont span buf _len 1276 Just (_,_) -> go ('\123':commentAcc) input docType False 1277 -- See Note [Nested comment line pragmas] 1278 Just ('\n',input) -> case alexGetChar' input of 1279 Nothing -> errBrace input (psRealSpan span) 1280 Just ('#',_) -> do (parsedAcc,input) <- parseNestedPragma input 1281 go (parsedAcc ++ '\n':commentAcc) input docType False 1282 Just (_,_) -> go ('\n':commentAcc) input docType False 1283 Just (c,input) -> go (c:commentAcc) input docType False 1284 1285-- See Note [Nested comment line pragmas] 1286parseNestedPragma :: AlexInput -> P (String,AlexInput) 1287parseNestedPragma input@(AI _ buf) = do 1288 origInput <- getInput 1289 setInput input 1290 setExts (.|. xbit InNestedCommentBit) 1291 pushLexState bol 1292 lt <- lexToken 1293 _ <- popLexState 1294 setExts (.&. complement (xbit InNestedCommentBit)) 1295 postInput@(AI _ postBuf) <- getInput 1296 setInput origInput 1297 case unLoc lt of 1298 ITcomment_line_prag -> do 1299 let bytes = byteDiff buf postBuf 1300 diff = lexemeToString buf bytes 1301 return (reverse diff, postInput) 1302 lt' -> panic ("parseNestedPragma: unexpected token" ++ (show lt')) 1303 1304{- 1305Note [Nested comment line pragmas] 1306~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1307We used to ignore cpp-preprocessor-generated #line pragmas if they were inside 1308nested comments. 1309 1310Now, when parsing a nested comment, if we encounter a line starting with '#' we 1311call parseNestedPragma, which executes the following: 13121. Save the current lexer input (loc, buf) for later 13132. Set the current lexer input to the beginning of the line starting with '#' 13143. Turn the 'InNestedComment' extension on 13154. Push the 'bol' lexer state 13165. Lex a token. Due to (2), (3), and (4), this should always lex a single line 1317 or less and return the ITcomment_line_prag token. This may set source line 1318 and file location if a #line pragma is successfully parsed 13196. Restore lexer input and state to what they were before we did all this 13207. Return control to the function parsing a nested comment, informing it of 1321 what the lexer parsed 1322 1323Regarding (5) above: 1324Every exit from the 'bol' lexer state (do_bol, popLinePrag1, failLinePrag1) 1325checks if the 'InNestedComment' extension is set. If it is, that function will 1326return control to parseNestedPragma by returning the ITcomment_line_prag token. 1327 1328See #314 for more background on the bug this fixes. 1329-} 1330 1331withLexedDocType :: (AlexInput -> (String -> (HdkComment, Token)) -> Bool -> P (PsLocated Token)) 1332 -> P (PsLocated Token) 1333withLexedDocType lexDocComment = do 1334 input@(AI _ buf) <- getInput 1335 l <- getLastLocComment 1336 case prevChar buf ' ' of 1337 -- The `Bool` argument to lexDocComment signals whether or not the next 1338 -- line of input might also belong to this doc comment. 1339 '|' -> lexDocComment input (mkHdkCommentNext l) True 1340 '^' -> lexDocComment input (mkHdkCommentPrev l) True 1341 '$' -> lexDocComment input (mkHdkCommentNamed l) True 1342 '*' -> lexDocSection l 1 input 1343 _ -> panic "withLexedDocType: Bad doc type" 1344 where 1345 lexDocSection l n input = case alexGetChar' input of 1346 Just ('*', input) -> lexDocSection l (n+1) input 1347 Just (_, _) -> lexDocComment input (mkHdkCommentSection l n) False 1348 Nothing -> do setInput input; lexToken -- eof reached, lex it normally 1349 1350mkHdkCommentNext, mkHdkCommentPrev :: PsSpan -> String -> (HdkComment, Token) 1351mkHdkCommentNext loc str = (HdkCommentNext (mkHsDocString str), ITdocCommentNext str loc) 1352mkHdkCommentPrev loc str = (HdkCommentPrev (mkHsDocString str), ITdocCommentPrev str loc) 1353 1354mkHdkCommentNamed :: PsSpan -> String -> (HdkComment, Token) 1355mkHdkCommentNamed loc str = 1356 let (name, rest) = break isSpace str 1357 in (HdkCommentNamed name (mkHsDocString rest), ITdocCommentNamed str loc) 1358 1359mkHdkCommentSection :: PsSpan -> Int -> String -> (HdkComment, Token) 1360mkHdkCommentSection loc n str = 1361 (HdkCommentSection n (mkHsDocString str), ITdocSection n str loc) 1362 1363-- RULES pragmas turn on the forall and '.' keywords, and we turn them 1364-- off again at the end of the pragma. 1365rulePrag :: Action 1366rulePrag span buf len = do 1367 setExts (.|. xbit InRulePragBit) 1368 let !src = lexemeToString buf len 1369 return (L span (ITrules_prag (SourceText src))) 1370 1371-- When 'UsePosPragsBit' is not set, it is expected that we emit a token instead 1372-- of updating the position in 'PState' 1373linePrag :: Action 1374linePrag span buf len = do 1375 usePosPrags <- getBit UsePosPragsBit 1376 if usePosPrags 1377 then begin line_prag2 span buf len 1378 else let !src = lexemeToString buf len 1379 in return (L span (ITline_prag (SourceText src))) 1380 1381-- When 'UsePosPragsBit' is not set, it is expected that we emit a token instead 1382-- of updating the position in 'PState' 1383columnPrag :: Action 1384columnPrag span buf len = do 1385 usePosPrags <- getBit UsePosPragsBit 1386 let !src = lexemeToString buf len 1387 if usePosPrags 1388 then begin column_prag span buf len 1389 else let !src = lexemeToString buf len 1390 in return (L span (ITcolumn_prag (SourceText src))) 1391 1392endPrag :: Action 1393endPrag span _buf _len = do 1394 setExts (.&. complement (xbit InRulePragBit)) 1395 return (L span ITclose_prag) 1396 1397-- docCommentEnd 1398------------------------------------------------------------------------------- 1399-- This function is quite tricky. We can't just return a new token, we also 1400-- need to update the state of the parser. Why? Because the token is longer 1401-- than what was lexed by Alex, and the lexToken function doesn't know this, so 1402-- it writes the wrong token length to the parser state. This function is 1403-- called afterwards, so it can just update the state. 1404 1405commentEnd :: P (PsLocated Token) 1406 -> AlexInput 1407 -> String 1408 -> (String -> (Maybe HdkComment, Token)) 1409 -> StringBuffer 1410 -> PsSpan 1411 -> P (PsLocated Token) 1412commentEnd cont input commentAcc finalizeComment buf span = do 1413 setInput input 1414 let (AI loc nextBuf) = input 1415 comment = reverse commentAcc 1416 span' = mkPsSpan (psSpanStart span) loc 1417 last_len = byteDiff buf nextBuf 1418 span `seq` setLastToken span' last_len 1419 let (m_hdk_comment, hdk_token) = finalizeComment comment 1420 whenIsJust m_hdk_comment $ \hdk_comment -> 1421 P $ \s -> POk (s {hdk_comments = hdk_comments s `snocOL` L span' hdk_comment}) () 1422 b <- getBit RawTokenStreamBit 1423 if b then return (L span' hdk_token) 1424 else cont 1425 1426docCommentEnd :: AlexInput -> String -> (String -> (HdkComment, Token)) -> StringBuffer -> 1427 PsSpan -> P (PsLocated Token) 1428docCommentEnd input commentAcc docType buf span = do 1429 let finalizeComment str = 1430 let (hdk_comment, token) = docType str 1431 in (Just hdk_comment, token) 1432 commentEnd lexToken input commentAcc finalizeComment buf span 1433 1434errBrace :: AlexInput -> RealSrcSpan -> P a 1435errBrace (AI end _) span = failLocMsgP (realSrcSpanStart span) (psRealLoc end) (PsError (PsErrLexer LexUnterminatedComment LexErrKind_EOF) []) 1436 1437open_brace, close_brace :: Action 1438open_brace span _str _len = do 1439 ctx <- getContext 1440 setContext (NoLayout:ctx) 1441 return (L span ITocurly) 1442close_brace span _str _len = do 1443 popContext 1444 return (L span ITccurly) 1445 1446qvarid, qconid :: StringBuffer -> Int -> Token 1447qvarid buf len = ITqvarid $! splitQualName buf len False 1448qconid buf len = ITqconid $! splitQualName buf len False 1449 1450splitQualName :: StringBuffer -> Int -> Bool -> (FastString,FastString) 1451-- takes a StringBuffer and a length, and returns the module name 1452-- and identifier parts of a qualified name. Splits at the *last* dot, 1453-- because of hierarchical module names. 1454-- 1455-- Throws an error if the name is not qualified. 1456splitQualName orig_buf len parens = split orig_buf orig_buf 1457 where 1458 split buf dot_buf 1459 | orig_buf `byteDiff` buf >= len = done dot_buf 1460 | c == '.' = found_dot buf' 1461 | otherwise = split buf' dot_buf 1462 where 1463 (c,buf') = nextChar buf 1464 1465 -- careful, we might get names like M.... 1466 -- so, if the character after the dot is not upper-case, this is 1467 -- the end of the qualifier part. 1468 found_dot buf -- buf points after the '.' 1469 | isUpper c = split buf' buf 1470 | otherwise = done buf 1471 where 1472 (c,buf') = nextChar buf 1473 1474 done dot_buf 1475 | qual_size < 1 = error "splitQualName got an unqualified named" 1476 | otherwise = 1477 (lexemeToFastString orig_buf (qual_size - 1), 1478 if parens -- Prelude.(+) 1479 then lexemeToFastString (stepOn dot_buf) (len - qual_size - 2) 1480 else lexemeToFastString dot_buf (len - qual_size)) 1481 where 1482 qual_size = orig_buf `byteDiff` dot_buf 1483 1484varid :: Action 1485varid span buf len = 1486 case lookupUFM reservedWordsFM fs of 1487 Just (ITcase, _) -> do 1488 lastTk <- getLastTk 1489 keyword <- case lastTk of 1490 Just (L _ ITlam) -> do 1491 lambdaCase <- getBit LambdaCaseBit 1492 unless lambdaCase $ do 1493 pState <- getPState 1494 addError $ PsError PsErrLambdaCase [] (mkSrcSpanPs (last_loc pState)) 1495 return ITlcase 1496 _ -> return ITcase 1497 maybe_layout keyword 1498 return $ L span keyword 1499 Just (keyword, 0) -> do 1500 maybe_layout keyword 1501 return $ L span keyword 1502 Just (keyword, i) -> do 1503 exts <- getExts 1504 if exts .&. i /= 0 1505 then do 1506 maybe_layout keyword 1507 return $ L span keyword 1508 else 1509 return $ L span $ ITvarid fs 1510 Nothing -> 1511 return $ L span $ ITvarid fs 1512 where 1513 !fs = lexemeToFastString buf len 1514 1515conid :: StringBuffer -> Int -> Token 1516conid buf len = ITconid $! lexemeToFastString buf len 1517 1518qvarsym, qconsym :: StringBuffer -> Int -> Token 1519qvarsym buf len = ITqvarsym $! splitQualName buf len False 1520qconsym buf len = ITqconsym $! splitQualName buf len False 1521 1522-- See Note [Whitespace-sensitive operator parsing] 1523varsym_prefix :: Action 1524varsym_prefix = sym $ \span exts s -> 1525 let warnExtConflict errtok = 1526 do { addWarning Opt_WarnOperatorWhitespaceExtConflict $ 1527 PsWarnOperatorWhitespaceExtConflict (mkSrcSpanPs span) errtok 1528 ; return (ITvarsym s) } 1529 in 1530 if | s == fsLit "@" -> 1531 return ITtypeApp -- regardless of TypeApplications for better error messages 1532 | s == fsLit "%" -> 1533 if xtest LinearTypesBit exts 1534 then return ITpercent 1535 else warnExtConflict OperatorWhitespaceSymbol_PrefixPercent 1536 | s == fsLit "$" -> 1537 if xtest ThQuotesBit exts 1538 then return ITdollar 1539 else warnExtConflict OperatorWhitespaceSymbol_PrefixDollar 1540 | s == fsLit "$$" -> 1541 if xtest ThQuotesBit exts 1542 then return ITdollardollar 1543 else warnExtConflict OperatorWhitespaceSymbol_PrefixDollarDollar 1544 | s == fsLit "-" -> 1545 return ITprefixminus -- Only when LexicalNegation is on, otherwise we get ITminus 1546 -- and don't hit this code path. See Note [Minus tokens] 1547 | s == fsLit ".", OverloadedRecordDotBit `xtest` exts -> 1548 return (ITproj True) -- e.g. '(.x)' 1549 | s == fsLit "." -> return ITdot 1550 | s == fsLit "!" -> return ITbang 1551 | s == fsLit "~" -> return ITtilde 1552 | otherwise -> 1553 do { addWarning Opt_WarnOperatorWhitespace $ 1554 PsWarnOperatorWhitespace (mkSrcSpanPs span) s 1555 OperatorWhitespaceOccurrence_Prefix 1556 ; return (ITvarsym s) } 1557 1558-- See Note [Whitespace-sensitive operator parsing] 1559varsym_suffix :: Action 1560varsym_suffix = sym $ \span _ s -> 1561 if | s == fsLit "@" -> failMsgP (PsError PsErrSuffixAT []) 1562 | s == fsLit "." -> return ITdot 1563 | otherwise -> 1564 do { addWarning Opt_WarnOperatorWhitespace $ 1565 PsWarnOperatorWhitespace (mkSrcSpanPs span) s 1566 OperatorWhitespaceOccurrence_Suffix 1567 ; return (ITvarsym s) } 1568 1569-- See Note [Whitespace-sensitive operator parsing] 1570varsym_tight_infix :: Action 1571varsym_tight_infix = sym $ \span exts s -> 1572 if | s == fsLit "@" -> return ITat 1573 | s == fsLit ".", OverloadedRecordDotBit `xtest` exts -> return (ITproj False) 1574 | s == fsLit "." -> return ITdot 1575 | otherwise -> 1576 do { addWarning Opt_WarnOperatorWhitespace $ 1577 PsWarnOperatorWhitespace (mkSrcSpanPs span) s 1578 OperatorWhitespaceOccurrence_TightInfix 1579 ; return (ITvarsym s) } 1580 1581-- See Note [Whitespace-sensitive operator parsing] 1582varsym_loose_infix :: Action 1583varsym_loose_infix = sym $ \_ _ s -> 1584 if | s == fsLit "." 1585 -> return ITdot 1586 | otherwise 1587 -> return $ ITvarsym s 1588 1589consym :: Action 1590consym = sym (\_span _exts s -> return $ ITconsym s) 1591 1592sym :: (PsSpan -> ExtsBitmap -> FastString -> P Token) -> Action 1593sym con span buf len = 1594 case lookupUFM reservedSymsFM fs of 1595 Just (keyword, NormalSyntax, 0) -> do 1596 exts <- getExts 1597 if fs == fsLit "." && 1598 exts .&. (xbit OverloadedRecordDotBit) /= 0 && 1599 xtest OverloadedRecordDotBit exts 1600 then L span <$!> con span exts fs -- Process by varsym_*. 1601 else return $ L span keyword 1602 Just (keyword, NormalSyntax, i) -> do 1603 exts <- getExts 1604 if exts .&. i /= 0 1605 then return $ L span keyword 1606 else L span <$!> con span exts fs 1607 Just (keyword, UnicodeSyntax, 0) -> do 1608 exts <- getExts 1609 if xtest UnicodeSyntaxBit exts 1610 then return $ L span keyword 1611 else L span <$!> con span exts fs 1612 Just (keyword, UnicodeSyntax, i) -> do 1613 exts <- getExts 1614 if exts .&. i /= 0 && xtest UnicodeSyntaxBit exts 1615 then return $ L span keyword 1616 else L span <$!> con span exts fs 1617 Nothing -> do 1618 exts <- getExts 1619 L span <$!> con span exts fs 1620 where 1621 !fs = lexemeToFastString buf len 1622 1623-- Variations on the integral numeric literal. 1624tok_integral :: (SourceText -> Integer -> Token) 1625 -> (Integer -> Integer) 1626 -> Int -> Int 1627 -> (Integer, (Char -> Int)) 1628 -> Action 1629tok_integral itint transint transbuf translen (radix,char_to_int) span buf len = do 1630 numericUnderscores <- getBit NumericUnderscoresBit -- #14473 1631 let src = lexemeToString buf len 1632 when ((not numericUnderscores) && ('_' `elem` src)) $ do 1633 pState <- getPState 1634 addError $ PsError (PsErrNumUnderscores NumUnderscore_Integral) [] (mkSrcSpanPs (last_loc pState)) 1635 return $ L span $ itint (SourceText src) 1636 $! transint $ parseUnsignedInteger 1637 (offsetBytes transbuf buf) (subtract translen len) radix char_to_int 1638 1639tok_num :: (Integer -> Integer) 1640 -> Int -> Int 1641 -> (Integer, (Char->Int)) -> Action 1642tok_num = tok_integral $ \case 1643 st@(SourceText ('-':_)) -> itint st (const True) 1644 st@(SourceText _) -> itint st (const False) 1645 st@NoSourceText -> itint st (< 0) 1646 where 1647 itint :: SourceText -> (Integer -> Bool) -> Integer -> Token 1648 itint !st is_negative !val = ITinteger ((IL st $! is_negative val) val) 1649 1650tok_primint :: (Integer -> Integer) 1651 -> Int -> Int 1652 -> (Integer, (Char->Int)) -> Action 1653tok_primint = tok_integral ITprimint 1654 1655 1656tok_primword :: Int -> Int 1657 -> (Integer, (Char->Int)) -> Action 1658tok_primword = tok_integral ITprimword positive 1659positive, negative :: (Integer -> Integer) 1660positive = id 1661negative = negate 1662decimal, octal, hexadecimal :: (Integer, Char -> Int) 1663decimal = (10,octDecDigit) 1664binary = (2,octDecDigit) 1665octal = (8,octDecDigit) 1666hexadecimal = (16,hexDigit) 1667 1668-- readSignificandExponentPair can understand negative rationals, exponents, everything. 1669tok_frac :: Int -> (String -> Token) -> Action 1670tok_frac drop f span buf len = do 1671 numericUnderscores <- getBit NumericUnderscoresBit -- #14473 1672 let src = lexemeToString buf (len-drop) 1673 when ((not numericUnderscores) && ('_' `elem` src)) $ do 1674 pState <- getPState 1675 addError $ PsError (PsErrNumUnderscores NumUnderscore_Float) [] (mkSrcSpanPs (last_loc pState)) 1676 return (L span $! (f $! src)) 1677 1678tok_float, tok_primfloat, tok_primdouble :: String -> Token 1679tok_float str = ITrational $! readFractionalLit str 1680tok_hex_float str = ITrational $! readHexFractionalLit str 1681tok_primfloat str = ITprimfloat $! readFractionalLit str 1682tok_primdouble str = ITprimdouble $! readFractionalLit str 1683 1684readFractionalLit, readHexFractionalLit :: String -> FractionalLit 1685readHexFractionalLit = readFractionalLitX readHexSignificandExponentPair Base2 1686readFractionalLit = readFractionalLitX readSignificandExponentPair Base10 1687 1688readFractionalLitX :: (String -> (Integer, Integer)) 1689 -> FractionalExponentBase 1690 -> String -> FractionalLit 1691readFractionalLitX readStr b str = 1692 mkSourceFractionalLit str is_neg i e b 1693 where 1694 is_neg = case str of 1695 '-' : _ -> True 1696 _ -> False 1697 (i, e) = readStr str 1698 1699-- ----------------------------------------------------------------------------- 1700-- Layout processing 1701 1702-- we're at the first token on a line, insert layout tokens if necessary 1703do_bol :: Action 1704do_bol span _str _len = do 1705 -- See Note [Nested comment line pragmas] 1706 b <- getBit InNestedCommentBit 1707 if b then return (L span ITcomment_line_prag) else do 1708 (pos, gen_semic) <- getOffside 1709 case pos of 1710 LT -> do 1711 --trace "layout: inserting '}'" $ do 1712 popContext 1713 -- do NOT pop the lex state, we might have a ';' to insert 1714 return (L span ITvccurly) 1715 EQ | gen_semic -> do 1716 --trace "layout: inserting ';'" $ do 1717 _ <- popLexState 1718 return (L span ITsemi) 1719 _ -> do 1720 _ <- popLexState 1721 lexToken 1722 1723-- certain keywords put us in the "layout" state, where we might 1724-- add an opening curly brace. 1725maybe_layout :: Token -> P () 1726maybe_layout t = do -- If the alternative layout rule is enabled then 1727 -- we never create an implicit layout context here. 1728 -- Layout is handled XXX instead. 1729 -- The code for closing implicit contexts, or 1730 -- inserting implicit semi-colons, is therefore 1731 -- irrelevant as it only applies in an implicit 1732 -- context. 1733 alr <- getBit AlternativeLayoutRuleBit 1734 unless alr $ f t 1735 where f (ITdo _) = pushLexState layout_do 1736 f (ITmdo _) = pushLexState layout_do 1737 f ITof = pushLexState layout 1738 f ITlcase = pushLexState layout 1739 f ITlet = pushLexState layout 1740 f ITwhere = pushLexState layout 1741 f ITrec = pushLexState layout 1742 f ITif = pushLexState layout_if 1743 f _ = return () 1744 1745-- Pushing a new implicit layout context. If the indentation of the 1746-- next token is not greater than the previous layout context, then 1747-- Haskell 98 says that the new layout context should be empty; that is 1748-- the lexer must generate {}. 1749-- 1750-- We are slightly more lenient than this: when the new context is started 1751-- by a 'do', then we allow the new context to be at the same indentation as 1752-- the previous context. This is what the 'strict' argument is for. 1753new_layout_context :: Bool -> Bool -> Token -> Action 1754new_layout_context strict gen_semic tok span _buf len = do 1755 _ <- popLexState 1756 (AI l _) <- getInput 1757 let offset = srcLocCol (psRealLoc l) - len 1758 ctx <- getContext 1759 nondecreasing <- getBit NondecreasingIndentationBit 1760 let strict' = strict || not nondecreasing 1761 case ctx of 1762 Layout prev_off _ : _ | 1763 (strict' && prev_off >= offset || 1764 not strict' && prev_off > offset) -> do 1765 -- token is indented to the left of the previous context. 1766 -- we must generate a {} sequence now. 1767 pushLexState layout_left 1768 return (L span tok) 1769 _ -> do setContext (Layout offset gen_semic : ctx) 1770 return (L span tok) 1771 1772do_layout_left :: Action 1773do_layout_left span _buf _len = do 1774 _ <- popLexState 1775 pushLexState bol -- we must be at the start of a line 1776 return (L span ITvccurly) 1777 1778-- ----------------------------------------------------------------------------- 1779-- LINE pragmas 1780 1781setLineAndFile :: Int -> Action 1782setLineAndFile code (PsSpan span _) buf len = do 1783 let src = lexemeToString buf (len - 1) -- drop trailing quotation mark 1784 linenumLen = length $ head $ words src 1785 linenum = parseUnsignedInteger buf linenumLen 10 octDecDigit 1786 file = mkFastString $ go $ drop 1 $ dropWhile (/= '"') src 1787 -- skip everything through first quotation mark to get to the filename 1788 where go ('\\':c:cs) = c : go cs 1789 go (c:cs) = c : go cs 1790 go [] = [] 1791 -- decode escapes in the filename. e.g. on Windows 1792 -- when our filenames have backslashes in, gcc seems to 1793 -- escape the backslashes. One symptom of not doing this 1794 -- is that filenames in error messages look a bit strange: 1795 -- C:\\foo\bar.hs 1796 -- only the first backslash is doubled, because we apply 1797 -- System.FilePath.normalise before printing out 1798 -- filenames and it does not remove duplicate 1799 -- backslashes after the drive letter (should it?). 1800 resetAlrLastLoc file 1801 setSrcLoc (mkRealSrcLoc file (fromIntegral linenum - 1) (srcSpanEndCol span)) 1802 -- subtract one: the line number refers to the *following* line 1803 addSrcFile file 1804 _ <- popLexState 1805 pushLexState code 1806 lexToken 1807 1808setColumn :: Action 1809setColumn (PsSpan span _) buf len = do 1810 let column = 1811 case reads (lexemeToString buf len) of 1812 [(column, _)] -> column 1813 _ -> error "setColumn: expected integer" -- shouldn't happen 1814 setSrcLoc (mkRealSrcLoc (srcSpanFile span) (srcSpanEndLine span) 1815 (fromIntegral (column :: Integer))) 1816 _ <- popLexState 1817 lexToken 1818 1819alrInitialLoc :: FastString -> RealSrcSpan 1820alrInitialLoc file = mkRealSrcSpan loc loc 1821 where -- This is a hack to ensure that the first line in a file 1822 -- looks like it is after the initial location: 1823 loc = mkRealSrcLoc file (-1) (-1) 1824 1825-- ----------------------------------------------------------------------------- 1826-- Options, includes and language pragmas. 1827 1828 1829lex_string_prag :: (String -> Token) -> Action 1830lex_string_prag mkTok = lex_string_prag_comment mkTok' 1831 where 1832 mkTok' s _ = mkTok s 1833 1834lex_string_prag_comment :: (String -> PsSpan -> Token) -> Action 1835lex_string_prag_comment mkTok span _buf _len 1836 = do input <- getInput 1837 start <- getParsedLoc 1838 l <- getLastLocComment 1839 tok <- go l [] input 1840 end <- getParsedLoc 1841 return (L (mkPsSpan start end) tok) 1842 where go l acc input 1843 = if isString input "#-}" 1844 then do setInput input 1845 return (mkTok (reverse acc) l) 1846 else case alexGetChar input of 1847 Just (c,i) -> go l (c:acc) i 1848 Nothing -> err input 1849 isString _ [] = True 1850 isString i (x:xs) 1851 = case alexGetChar i of 1852 Just (c,i') | c == x -> isString i' xs 1853 _other -> False 1854 err (AI end _) = failLocMsgP (realSrcSpanStart (psRealSpan span)) (psRealLoc end) (PsError (PsErrLexer LexUnterminatedOptions LexErrKind_EOF) []) 1855 1856-- ----------------------------------------------------------------------------- 1857-- Strings & Chars 1858 1859-- This stuff is horrible. I hates it. 1860 1861lex_string_tok :: Action 1862lex_string_tok span buf _len = do 1863 tok <- lex_string "" 1864 (AI end bufEnd) <- getInput 1865 let 1866 tok' = case tok of 1867 ITprimstring _ bs -> ITprimstring (SourceText src) bs 1868 ITstring _ s -> ITstring (SourceText src) s 1869 _ -> panic "lex_string_tok" 1870 src = lexemeToString buf (cur bufEnd - cur buf) 1871 return (L (mkPsSpan (psSpanStart span) end) tok') 1872 1873lex_string :: String -> P Token 1874lex_string s = do 1875 i <- getInput 1876 case alexGetChar' i of 1877 Nothing -> lit_error i 1878 1879 Just ('"',i) -> do 1880 setInput i 1881 let s' = reverse s 1882 magicHash <- getBit MagicHashBit 1883 if magicHash 1884 then do 1885 i <- getInput 1886 case alexGetChar' i of 1887 Just ('#',i) -> do 1888 setInput i 1889 when (any (> '\xFF') s') $ do 1890 pState <- getPState 1891 let err = PsError PsErrPrimStringInvalidChar [] (mkSrcSpanPs (last_loc pState)) 1892 addError err 1893 return (ITprimstring (SourceText s') (unsafeMkByteString s')) 1894 _other -> 1895 return (ITstring (SourceText s') (mkFastString s')) 1896 else 1897 return (ITstring (SourceText s') (mkFastString s')) 1898 1899 Just ('\\',i) 1900 | Just ('&',i) <- next -> do 1901 setInput i; lex_string s 1902 | Just (c,i) <- next, c <= '\x7f' && is_space c -> do 1903 -- is_space only works for <= '\x7f' (#3751, #5425) 1904 setInput i; lex_stringgap s 1905 where next = alexGetChar' i 1906 1907 Just (c, i1) -> do 1908 case c of 1909 '\\' -> do setInput i1; c' <- lex_escape; lex_string (c':s) 1910 c | isAny c -> do setInput i1; lex_string (c:s) 1911 _other -> lit_error i 1912 1913lex_stringgap :: String -> P Token 1914lex_stringgap s = do 1915 i <- getInput 1916 c <- getCharOrFail i 1917 case c of 1918 '\\' -> lex_string s 1919 c | c <= '\x7f' && is_space c -> lex_stringgap s 1920 -- is_space only works for <= '\x7f' (#3751, #5425) 1921 _other -> lit_error i 1922 1923 1924lex_char_tok :: Action 1925-- Here we are basically parsing character literals, such as 'x' or '\n' 1926-- but we additionally spot 'x and ''T, returning ITsimpleQuote and 1927-- ITtyQuote respectively, but WITHOUT CONSUMING the x or T part 1928-- (the parser does that). 1929-- So we have to do two characters of lookahead: when we see 'x we need to 1930-- see if there's a trailing quote 1931lex_char_tok span buf _len = do -- We've seen ' 1932 i1 <- getInput -- Look ahead to first character 1933 let loc = psSpanStart span 1934 case alexGetChar' i1 of 1935 Nothing -> lit_error i1 1936 1937 Just ('\'', i2@(AI end2 _)) -> do -- We've seen '' 1938 setInput i2 1939 return (L (mkPsSpan loc end2) ITtyQuote) 1940 1941 Just ('\\', i2@(AI _end2 _)) -> do -- We've seen 'backslash 1942 setInput i2 1943 lit_ch <- lex_escape 1944 i3 <- getInput 1945 mc <- getCharOrFail i3 -- Trailing quote 1946 if mc == '\'' then finish_char_tok buf loc lit_ch 1947 else lit_error i3 1948 1949 Just (c, i2@(AI _end2 _)) 1950 | not (isAny c) -> lit_error i1 1951 | otherwise -> 1952 1953 -- We've seen 'x, where x is a valid character 1954 -- (i.e. not newline etc) but not a quote or backslash 1955 case alexGetChar' i2 of -- Look ahead one more character 1956 Just ('\'', i3) -> do -- We've seen 'x' 1957 setInput i3 1958 finish_char_tok buf loc c 1959 _other -> do -- We've seen 'x not followed by quote 1960 -- (including the possibility of EOF) 1961 -- Just parse the quote only 1962 let (AI end _) = i1 1963 return (L (mkPsSpan loc end) ITsimpleQuote) 1964 1965finish_char_tok :: StringBuffer -> PsLoc -> Char -> P (PsLocated Token) 1966finish_char_tok buf loc ch -- We've already seen the closing quote 1967 -- Just need to check for trailing # 1968 = do magicHash <- getBit MagicHashBit 1969 i@(AI end bufEnd) <- getInput 1970 let src = lexemeToString buf (cur bufEnd - cur buf) 1971 if magicHash then do 1972 case alexGetChar' i of 1973 Just ('#',i@(AI end _)) -> do 1974 setInput i 1975 return (L (mkPsSpan loc end) 1976 (ITprimchar (SourceText src) ch)) 1977 _other -> 1978 return (L (mkPsSpan loc end) 1979 (ITchar (SourceText src) ch)) 1980 else do 1981 return (L (mkPsSpan loc end) (ITchar (SourceText src) ch)) 1982 1983isAny :: Char -> Bool 1984isAny c | c > '\x7f' = isPrint c 1985 | otherwise = is_any c 1986 1987lex_escape :: P Char 1988lex_escape = do 1989 i0 <- getInput 1990 c <- getCharOrFail i0 1991 case c of 1992 'a' -> return '\a' 1993 'b' -> return '\b' 1994 'f' -> return '\f' 1995 'n' -> return '\n' 1996 'r' -> return '\r' 1997 't' -> return '\t' 1998 'v' -> return '\v' 1999 '\\' -> return '\\' 2000 '"' -> return '\"' 2001 '\'' -> return '\'' 2002 '^' -> do i1 <- getInput 2003 c <- getCharOrFail i1 2004 if c >= '@' && c <= '_' 2005 then return (chr (ord c - ord '@')) 2006 else lit_error i1 2007 2008 'x' -> readNum is_hexdigit 16 hexDigit 2009 'o' -> readNum is_octdigit 8 octDecDigit 2010 x | is_decdigit x -> readNum2 is_decdigit 10 octDecDigit (octDecDigit x) 2011 2012 c1 -> do 2013 i <- getInput 2014 case alexGetChar' i of 2015 Nothing -> lit_error i0 2016 Just (c2,i2) -> 2017 case alexGetChar' i2 of 2018 Nothing -> do lit_error i0 2019 Just (c3,i3) -> 2020 let str = [c1,c2,c3] in 2021 case [ (c,rest) | (p,c) <- silly_escape_chars, 2022 Just rest <- [stripPrefix p str] ] of 2023 (escape_char,[]):_ -> do 2024 setInput i3 2025 return escape_char 2026 (escape_char,_:_):_ -> do 2027 setInput i2 2028 return escape_char 2029 [] -> lit_error i0 2030 2031readNum :: (Char -> Bool) -> Int -> (Char -> Int) -> P Char 2032readNum is_digit base conv = do 2033 i <- getInput 2034 c <- getCharOrFail i 2035 if is_digit c 2036 then readNum2 is_digit base conv (conv c) 2037 else lit_error i 2038 2039readNum2 :: (Char -> Bool) -> Int -> (Char -> Int) -> Int -> P Char 2040readNum2 is_digit base conv i = do 2041 input <- getInput 2042 read i input 2043 where read i input = do 2044 case alexGetChar' input of 2045 Just (c,input') | is_digit c -> do 2046 let i' = i*base + conv c 2047 if i' > 0x10ffff 2048 then setInput input >> lexError LexNumEscapeRange 2049 else read i' input' 2050 _other -> do 2051 setInput input; return (chr i) 2052 2053 2054silly_escape_chars :: [(String, Char)] 2055silly_escape_chars = [ 2056 ("NUL", '\NUL'), 2057 ("SOH", '\SOH'), 2058 ("STX", '\STX'), 2059 ("ETX", '\ETX'), 2060 ("EOT", '\EOT'), 2061 ("ENQ", '\ENQ'), 2062 ("ACK", '\ACK'), 2063 ("BEL", '\BEL'), 2064 ("BS", '\BS'), 2065 ("HT", '\HT'), 2066 ("LF", '\LF'), 2067 ("VT", '\VT'), 2068 ("FF", '\FF'), 2069 ("CR", '\CR'), 2070 ("SO", '\SO'), 2071 ("SI", '\SI'), 2072 ("DLE", '\DLE'), 2073 ("DC1", '\DC1'), 2074 ("DC2", '\DC2'), 2075 ("DC3", '\DC3'), 2076 ("DC4", '\DC4'), 2077 ("NAK", '\NAK'), 2078 ("SYN", '\SYN'), 2079 ("ETB", '\ETB'), 2080 ("CAN", '\CAN'), 2081 ("EM", '\EM'), 2082 ("SUB", '\SUB'), 2083 ("ESC", '\ESC'), 2084 ("FS", '\FS'), 2085 ("GS", '\GS'), 2086 ("RS", '\RS'), 2087 ("US", '\US'), 2088 ("SP", '\SP'), 2089 ("DEL", '\DEL') 2090 ] 2091 2092-- before calling lit_error, ensure that the current input is pointing to 2093-- the position of the error in the buffer. This is so that we can report 2094-- a correct location to the user, but also so we can detect UTF-8 decoding 2095-- errors if they occur. 2096lit_error :: AlexInput -> P a 2097lit_error i = do setInput i; lexError LexStringCharLit 2098 2099getCharOrFail :: AlexInput -> P Char 2100getCharOrFail i = do 2101 case alexGetChar' i of 2102 Nothing -> lexError LexStringCharLitEOF 2103 Just (c,i) -> do setInput i; return c 2104 2105-- ----------------------------------------------------------------------------- 2106-- QuasiQuote 2107 2108lex_qquasiquote_tok :: Action 2109lex_qquasiquote_tok span buf len = do 2110 let (qual, quoter) = splitQualName (stepOn buf) (len - 2) False 2111 quoteStart <- getParsedLoc 2112 quote <- lex_quasiquote (psRealLoc quoteStart) "" 2113 end <- getParsedLoc 2114 return (L (mkPsSpan (psSpanStart span) end) 2115 (ITqQuasiQuote (qual, 2116 quoter, 2117 mkFastString (reverse quote), 2118 mkPsSpan quoteStart end))) 2119 2120lex_quasiquote_tok :: Action 2121lex_quasiquote_tok span buf len = do 2122 let quoter = tail (lexemeToString buf (len - 1)) 2123 -- 'tail' drops the initial '[', 2124 -- while the -1 drops the trailing '|' 2125 quoteStart <- getParsedLoc 2126 quote <- lex_quasiquote (psRealLoc quoteStart) "" 2127 end <- getParsedLoc 2128 return (L (mkPsSpan (psSpanStart span) end) 2129 (ITquasiQuote (mkFastString quoter, 2130 mkFastString (reverse quote), 2131 mkPsSpan quoteStart end))) 2132 2133lex_quasiquote :: RealSrcLoc -> String -> P String 2134lex_quasiquote start s = do 2135 i <- getInput 2136 case alexGetChar' i of 2137 Nothing -> quasiquote_error start 2138 2139 -- NB: The string "|]" terminates the quasiquote, 2140 -- with absolutely no escaping. See the extensive 2141 -- discussion on #5348 for why there is no 2142 -- escape handling. 2143 Just ('|',i) 2144 | Just (']',i) <- alexGetChar' i 2145 -> do { setInput i; return s } 2146 2147 Just (c, i) -> do 2148 setInput i; lex_quasiquote start (c : s) 2149 2150quasiquote_error :: RealSrcLoc -> P a 2151quasiquote_error start = do 2152 (AI end buf) <- getInput 2153 reportLexError start (psRealLoc end) buf 2154 (\k -> PsError (PsErrLexer LexUnterminatedQQ k) []) 2155 2156-- ----------------------------------------------------------------------------- 2157-- Warnings 2158 2159warnTab :: Action 2160warnTab srcspan _buf _len = do 2161 addTabWarning (psRealSpan srcspan) 2162 lexToken 2163 2164warnThen :: WarningFlag -> (SrcSpan -> PsWarning) -> Action -> Action 2165warnThen flag warning action srcspan buf len = do 2166 addWarning flag (warning (RealSrcSpan (psRealSpan srcspan) Nothing)) 2167 action srcspan buf len 2168 2169-- ----------------------------------------------------------------------------- 2170-- The Parse Monad 2171 2172-- | Do we want to generate ';' layout tokens? In some cases we just want to 2173-- generate '}', e.g. in MultiWayIf we don't need ';'s because '|' separates 2174-- alternatives (unlike a `case` expression where we need ';' to as a separator 2175-- between alternatives). 2176type GenSemic = Bool 2177 2178generateSemic, dontGenerateSemic :: GenSemic 2179generateSemic = True 2180dontGenerateSemic = False 2181 2182data LayoutContext 2183 = NoLayout 2184 | Layout !Int !GenSemic 2185 deriving Show 2186 2187-- | The result of running a parser. 2188data ParseResult a 2189 = POk -- ^ The parser has consumed a (possibly empty) prefix 2190 -- of the input and produced a result. Use 'getMessages' 2191 -- to check for accumulated warnings and non-fatal errors. 2192 PState -- ^ The resulting parsing state. Can be used to resume parsing. 2193 a -- ^ The resulting value. 2194 | PFailed -- ^ The parser has consumed a (possibly empty) prefix 2195 -- of the input and failed. 2196 PState -- ^ The parsing state right before failure, including the fatal 2197 -- parse error. 'getMessages' and 'getErrorMessages' must return 2198 -- a non-empty bag of errors. 2199 2200-- | Test whether a 'WarningFlag' is set 2201warnopt :: WarningFlag -> ParserOpts -> Bool 2202warnopt f options = f `EnumSet.member` pWarningFlags options 2203 2204-- | Parser options. 2205-- 2206-- See 'mkParserOpts' to construct this. 2207data ParserOpts = ParserOpts 2208 { pWarningFlags :: EnumSet WarningFlag -- ^ enabled warning flags 2209 , pExtsBitmap :: !ExtsBitmap -- ^ bitmap of permitted extensions 2210 } 2211 2212-- | Haddock comment as produced by the lexer. These are accumulated in 2213-- 'PState' and then processed in "GHC.Parser.PostProcess.Haddock". 2214data HdkComment 2215 = HdkCommentNext HsDocString 2216 | HdkCommentPrev HsDocString 2217 | HdkCommentNamed String HsDocString 2218 | HdkCommentSection Int HsDocString 2219 deriving Show 2220 2221data PState = PState { 2222 buffer :: StringBuffer, 2223 options :: ParserOpts, 2224 warnings :: Bag PsWarning, 2225 errors :: Bag PsError, 2226 tab_first :: Maybe RealSrcSpan, -- pos of first tab warning in the file 2227 tab_count :: !Word, -- number of tab warnings in the file 2228 last_tk :: Maybe (PsLocated Token), -- last non-comment token 2229 prev_loc :: PsSpan, -- pos of previous token, including comments, 2230 prev_loc2 :: PsSpan, -- pos of two back token, including comments, 2231 -- see Note [PsSpan in Comments] 2232 last_loc :: PsSpan, -- pos of current token 2233 last_len :: !Int, -- len of current token 2234 loc :: PsLoc, -- current loc (end of prev token + 1) 2235 context :: [LayoutContext], 2236 lex_state :: [Int], 2237 srcfiles :: [FastString], 2238 -- Used in the alternative layout rule: 2239 -- These tokens are the next ones to be sent out. They are 2240 -- just blindly emitted, without the rule looking at them again: 2241 alr_pending_implicit_tokens :: [PsLocated Token], 2242 -- This is the next token to be considered or, if it is Nothing, 2243 -- we need to get the next token from the input stream: 2244 alr_next_token :: Maybe (PsLocated Token), 2245 -- This is what we consider to be the location of the last token 2246 -- emitted: 2247 alr_last_loc :: PsSpan, 2248 -- The stack of layout contexts: 2249 alr_context :: [ALRContext], 2250 -- Are we expecting a '{'? If it's Just, then the ALRLayout tells 2251 -- us what sort of layout the '{' will open: 2252 alr_expecting_ocurly :: Maybe ALRLayout, 2253 -- Have we just had the '}' for a let block? If so, than an 'in' 2254 -- token doesn't need to close anything: 2255 alr_justClosedExplicitLetBlock :: Bool, 2256 2257 -- The next three are used to implement Annotations giving the 2258 -- locations of 'noise' tokens in the source, so that users of 2259 -- the GHC API can do source to source conversions. 2260 -- See note [exact print annotations] in GHC.Parser.Annotation 2261 eof_pos :: Maybe (RealSrcSpan, RealSrcSpan), -- pos, gap to prior token 2262 header_comments :: Maybe [LEpaComment], 2263 comment_q :: [LEpaComment], 2264 2265 -- Haddock comments accumulated in ascending order of their location 2266 -- (BufPos). We use OrdList to get O(1) snoc. 2267 -- 2268 -- See Note [Adding Haddock comments to the syntax tree] in GHC.Parser.PostProcess.Haddock 2269 hdk_comments :: OrdList (PsLocated HdkComment) 2270 } 2271 -- last_loc and last_len are used when generating error messages, 2272 -- and in pushCurrentContext only. Sigh, if only Happy passed the 2273 -- current token to happyError, we could at least get rid of last_len. 2274 -- Getting rid of last_loc would require finding another way to 2275 -- implement pushCurrentContext (which is only called from one place). 2276 2277 -- AZ question: setLastToken which sets last_loc and last_len 2278 -- is called whan processing AlexToken, immediately prior to 2279 -- calling the action in the token. So from the perspective 2280 -- of the action, it is the *current* token. Do I understand 2281 -- correctly? 2282 2283data ALRContext = ALRNoLayout Bool{- does it contain commas? -} 2284 Bool{- is it a 'let' block? -} 2285 | ALRLayout ALRLayout Int 2286data ALRLayout = ALRLayoutLet 2287 | ALRLayoutWhere 2288 | ALRLayoutOf 2289 | ALRLayoutDo 2290 2291-- | The parsing monad, isomorphic to @StateT PState Maybe@. 2292newtype P a = P { unP :: PState -> ParseResult a } 2293 2294instance Functor P where 2295 fmap = liftM 2296 2297instance Applicative P where 2298 pure = returnP 2299 (<*>) = ap 2300 2301instance Monad P where 2302 (>>=) = thenP 2303 2304returnP :: a -> P a 2305returnP a = a `seq` (P $ \s -> POk s a) 2306 2307thenP :: P a -> (a -> P b) -> P b 2308(P m) `thenP` k = P $ \ s -> 2309 case m s of 2310 POk s1 a -> (unP (k a)) s1 2311 PFailed s1 -> PFailed s1 2312 2313failMsgP :: (SrcSpan -> PsError) -> P a 2314failMsgP f = do 2315 pState <- getPState 2316 addFatalError (f (mkSrcSpanPs (last_loc pState))) 2317 2318failLocMsgP :: RealSrcLoc -> RealSrcLoc -> (SrcSpan -> PsError) -> P a 2319failLocMsgP loc1 loc2 f = 2320 addFatalError (f (RealSrcSpan (mkRealSrcSpan loc1 loc2) Nothing)) 2321 2322getPState :: P PState 2323getPState = P $ \s -> POk s s 2324 2325getExts :: P ExtsBitmap 2326getExts = P $ \s -> POk s (pExtsBitmap . options $ s) 2327 2328setExts :: (ExtsBitmap -> ExtsBitmap) -> P () 2329setExts f = P $ \s -> POk s { 2330 options = 2331 let p = options s 2332 in p { pExtsBitmap = f (pExtsBitmap p) } 2333 } () 2334 2335setSrcLoc :: RealSrcLoc -> P () 2336setSrcLoc new_loc = 2337 P $ \s@(PState{ loc = PsLoc _ buf_loc }) -> 2338 POk s{ loc = PsLoc new_loc buf_loc } () 2339 2340getRealSrcLoc :: P RealSrcLoc 2341getRealSrcLoc = P $ \s@(PState{ loc=loc }) -> POk s (psRealLoc loc) 2342 2343getParsedLoc :: P PsLoc 2344getParsedLoc = P $ \s@(PState{ loc=loc }) -> POk s loc 2345 2346addSrcFile :: FastString -> P () 2347addSrcFile f = P $ \s -> POk s{ srcfiles = f : srcfiles s } () 2348 2349setEofPos :: RealSrcSpan -> RealSrcSpan -> P () 2350setEofPos span gap = P $ \s -> POk s{ eof_pos = Just (span, gap) } () 2351 2352setLastToken :: PsSpan -> Int -> P () 2353setLastToken loc len = P $ \s -> POk s { 2354 last_loc=loc, 2355 last_len=len 2356 } () 2357 2358setLastTk :: PsLocated Token -> P () 2359setLastTk tk@(L l _) = P $ \s -> POk s { last_tk = Just tk 2360 , prev_loc = l 2361 , prev_loc2 = prev_loc s} () 2362 2363setLastComment :: PsLocated Token -> P () 2364setLastComment (L l _) = P $ \s -> POk s { prev_loc = l 2365 , prev_loc2 = prev_loc s} () 2366 2367getLastTk :: P (Maybe (PsLocated Token)) 2368getLastTk = P $ \s@(PState { last_tk = last_tk }) -> POk s last_tk 2369 2370-- see Note [PsSpan in Comments] 2371getLastLocComment :: P PsSpan 2372getLastLocComment = P $ \s@(PState { prev_loc = prev_loc }) -> POk s prev_loc 2373 2374-- see Note [PsSpan in Comments] 2375getLastLocEof :: P PsSpan 2376getLastLocEof = P $ \s@(PState { prev_loc2 = prev_loc2 }) -> POk s prev_loc2 2377 2378getLastLoc :: P PsSpan 2379getLastLoc = P $ \s@(PState { last_loc = last_loc }) -> POk s last_loc 2380 2381data AlexInput = AI !PsLoc !StringBuffer 2382 2383{- 2384Note [Unicode in Alex] 2385~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2386Although newer versions of Alex support unicode, this grammar is processed with 2387the old style '--latin1' behaviour. This means that when implementing the 2388functions 2389 2390 alexGetByte :: AlexInput -> Maybe (Word8,AlexInput) 2391 alexInputPrevChar :: AlexInput -> Char 2392 2393which Alex uses to take apart our 'AlexInput', we must 2394 2395 * return a latin1 character in the 'Word8' that 'alexGetByte' expects 2396 * return a latin1 character in 'alexInputPrevChar'. 2397 2398We handle this in 'adjustChar' by squishing entire classes of unicode 2399characters into single bytes. 2400-} 2401 2402{-# INLINE adjustChar #-} 2403adjustChar :: Char -> Word8 2404adjustChar c = fromIntegral $ ord adj_c 2405 where non_graphic = '\x00' 2406 upper = '\x01' 2407 lower = '\x02' 2408 digit = '\x03' 2409 symbol = '\x04' 2410 space = '\x05' 2411 other_graphic = '\x06' 2412 uniidchar = '\x07' 2413 2414 adj_c 2415 | c <= '\x07' = non_graphic 2416 | c <= '\x7f' = c 2417 -- Alex doesn't handle Unicode, so when Unicode 2418 -- character is encountered we output these values 2419 -- with the actual character value hidden in the state. 2420 | otherwise = 2421 -- NB: The logic behind these definitions is also reflected 2422 -- in "GHC.Utils.Lexeme" 2423 -- Any changes here should likely be reflected there. 2424 2425 case generalCategory c of 2426 UppercaseLetter -> upper 2427 LowercaseLetter -> lower 2428 TitlecaseLetter -> upper 2429 ModifierLetter -> uniidchar -- see #10196 2430 OtherLetter -> lower -- see #1103 2431 NonSpacingMark -> uniidchar -- see #7650 2432 SpacingCombiningMark -> other_graphic 2433 EnclosingMark -> other_graphic 2434 DecimalNumber -> digit 2435 LetterNumber -> other_graphic 2436 OtherNumber -> digit -- see #4373 2437 ConnectorPunctuation -> symbol 2438 DashPunctuation -> symbol 2439 OpenPunctuation -> other_graphic 2440 ClosePunctuation -> other_graphic 2441 InitialQuote -> other_graphic 2442 FinalQuote -> other_graphic 2443 OtherPunctuation -> symbol 2444 MathSymbol -> symbol 2445 CurrencySymbol -> symbol 2446 ModifierSymbol -> symbol 2447 OtherSymbol -> symbol 2448 Space -> space 2449 _other -> non_graphic 2450 2451-- Getting the previous 'Char' isn't enough here - we need to convert it into 2452-- the same format that 'alexGetByte' would have produced. 2453-- 2454-- See Note [Unicode in Alex] and #13986. 2455alexInputPrevChar :: AlexInput -> Char 2456alexInputPrevChar (AI _ buf) = chr (fromIntegral (adjustChar pc)) 2457 where pc = prevChar buf '\n' 2458 2459-- backwards compatibility for Alex 2.x 2460alexGetChar :: AlexInput -> Maybe (Char,AlexInput) 2461alexGetChar inp = case alexGetByte inp of 2462 Nothing -> Nothing 2463 Just (b,i) -> c `seq` Just (c,i) 2464 where c = chr $ fromIntegral b 2465 2466-- See Note [Unicode in Alex] 2467alexGetByte :: AlexInput -> Maybe (Word8,AlexInput) 2468alexGetByte (AI loc s) 2469 | atEnd s = Nothing 2470 | otherwise = byte `seq` loc' `seq` s' `seq` 2471 --trace (show (ord c)) $ 2472 Just (byte, (AI loc' s')) 2473 where (c,s') = nextChar s 2474 loc' = advancePsLoc loc c 2475 byte = adjustChar c 2476 2477-- This version does not squash unicode characters, it is used when 2478-- lexing strings. 2479alexGetChar' :: AlexInput -> Maybe (Char,AlexInput) 2480alexGetChar' (AI loc s) 2481 | atEnd s = Nothing 2482 | otherwise = c `seq` loc' `seq` s' `seq` 2483 --trace (show (ord c)) $ 2484 Just (c, (AI loc' s')) 2485 where (c,s') = nextChar s 2486 loc' = advancePsLoc loc c 2487 2488getInput :: P AlexInput 2489getInput = P $ \s@PState{ loc=l, buffer=b } -> POk s (AI l b) 2490 2491setInput :: AlexInput -> P () 2492setInput (AI l b) = P $ \s -> POk s{ loc=l, buffer=b } () 2493 2494nextIsEOF :: P Bool 2495nextIsEOF = do 2496 AI _ s <- getInput 2497 return $ atEnd s 2498 2499pushLexState :: Int -> P () 2500pushLexState ls = P $ \s@PState{ lex_state=l } -> POk s{lex_state=ls:l} () 2501 2502popLexState :: P Int 2503popLexState = P $ \s@PState{ lex_state=ls:l } -> POk s{ lex_state=l } ls 2504 2505getLexState :: P Int 2506getLexState = P $ \s@PState{ lex_state=ls:_ } -> POk s ls 2507 2508popNextToken :: P (Maybe (PsLocated Token)) 2509popNextToken 2510 = P $ \s@PState{ alr_next_token = m } -> 2511 POk (s {alr_next_token = Nothing}) m 2512 2513activeContext :: P Bool 2514activeContext = do 2515 ctxt <- getALRContext 2516 expc <- getAlrExpectingOCurly 2517 impt <- implicitTokenPending 2518 case (ctxt,expc) of 2519 ([],Nothing) -> return impt 2520 _other -> return True 2521 2522resetAlrLastLoc :: FastString -> P () 2523resetAlrLastLoc file = 2524 P $ \s@(PState {alr_last_loc = PsSpan _ buf_span}) -> 2525 POk s{ alr_last_loc = PsSpan (alrInitialLoc file) buf_span } () 2526 2527setAlrLastLoc :: PsSpan -> P () 2528setAlrLastLoc l = P $ \s -> POk (s {alr_last_loc = l}) () 2529 2530getAlrLastLoc :: P PsSpan 2531getAlrLastLoc = P $ \s@(PState {alr_last_loc = l}) -> POk s l 2532 2533getALRContext :: P [ALRContext] 2534getALRContext = P $ \s@(PState {alr_context = cs}) -> POk s cs 2535 2536setALRContext :: [ALRContext] -> P () 2537setALRContext cs = P $ \s -> POk (s {alr_context = cs}) () 2538 2539getJustClosedExplicitLetBlock :: P Bool 2540getJustClosedExplicitLetBlock 2541 = P $ \s@(PState {alr_justClosedExplicitLetBlock = b}) -> POk s b 2542 2543setJustClosedExplicitLetBlock :: Bool -> P () 2544setJustClosedExplicitLetBlock b 2545 = P $ \s -> POk (s {alr_justClosedExplicitLetBlock = b}) () 2546 2547setNextToken :: PsLocated Token -> P () 2548setNextToken t = P $ \s -> POk (s {alr_next_token = Just t}) () 2549 2550implicitTokenPending :: P Bool 2551implicitTokenPending 2552 = P $ \s@PState{ alr_pending_implicit_tokens = ts } -> 2553 case ts of 2554 [] -> POk s False 2555 _ -> POk s True 2556 2557popPendingImplicitToken :: P (Maybe (PsLocated Token)) 2558popPendingImplicitToken 2559 = P $ \s@PState{ alr_pending_implicit_tokens = ts } -> 2560 case ts of 2561 [] -> POk s Nothing 2562 (t : ts') -> POk (s {alr_pending_implicit_tokens = ts'}) (Just t) 2563 2564setPendingImplicitTokens :: [PsLocated Token] -> P () 2565setPendingImplicitTokens ts = P $ \s -> POk (s {alr_pending_implicit_tokens = ts}) () 2566 2567getAlrExpectingOCurly :: P (Maybe ALRLayout) 2568getAlrExpectingOCurly = P $ \s@(PState {alr_expecting_ocurly = b}) -> POk s b 2569 2570setAlrExpectingOCurly :: Maybe ALRLayout -> P () 2571setAlrExpectingOCurly b = P $ \s -> POk (s {alr_expecting_ocurly = b}) () 2572 2573-- | For reasons of efficiency, boolean parsing flags (eg, language extensions 2574-- or whether we are currently in a @RULE@ pragma) are represented by a bitmap 2575-- stored in a @Word64@. 2576type ExtsBitmap = Word64 2577 2578xbit :: ExtBits -> ExtsBitmap 2579xbit = bit . fromEnum 2580 2581xtest :: ExtBits -> ExtsBitmap -> Bool 2582xtest ext xmap = testBit xmap (fromEnum ext) 2583 2584xset :: ExtBits -> ExtsBitmap -> ExtsBitmap 2585xset ext xmap = setBit xmap (fromEnum ext) 2586 2587xunset :: ExtBits -> ExtsBitmap -> ExtsBitmap 2588xunset ext xmap = clearBit xmap (fromEnum ext) 2589 2590-- | Various boolean flags, mostly language extensions, that impact lexing and 2591-- parsing. Note that a handful of these can change during lexing/parsing. 2592data ExtBits 2593 -- Flags that are constant once parsing starts 2594 = FfiBit 2595 | InterruptibleFfiBit 2596 | CApiFfiBit 2597 | ArrowsBit 2598 | ThBit 2599 | ThQuotesBit 2600 | IpBit 2601 | OverloadedLabelsBit -- #x overloaded labels 2602 | ExplicitForallBit -- the 'forall' keyword 2603 | BangPatBit -- Tells the parser to understand bang-patterns 2604 -- (doesn't affect the lexer) 2605 | PatternSynonymsBit -- pattern synonyms 2606 | HaddockBit-- Lex and parse Haddock comments 2607 | MagicHashBit -- "#" in both functions and operators 2608 | RecursiveDoBit -- mdo 2609 | QualifiedDoBit -- .do and .mdo 2610 | UnicodeSyntaxBit -- the forall symbol, arrow symbols, etc 2611 | UnboxedTuplesBit -- (# and #) 2612 | UnboxedSumsBit -- (# and #) 2613 | DatatypeContextsBit 2614 | MonadComprehensionsBit 2615 | TransformComprehensionsBit 2616 | QqBit -- enable quasiquoting 2617 | RawTokenStreamBit -- producing a token stream with all comments included 2618 | AlternativeLayoutRuleBit 2619 | ALRTransitionalBit 2620 | RelaxedLayoutBit 2621 | NondecreasingIndentationBit 2622 | SafeHaskellBit 2623 | TraditionalRecordSyntaxBit 2624 | ExplicitNamespacesBit 2625 | LambdaCaseBit 2626 | BinaryLiteralsBit 2627 | NegativeLiteralsBit 2628 | HexFloatLiteralsBit 2629 | StaticPointersBit 2630 | NumericUnderscoresBit 2631 | StarIsTypeBit 2632 | BlockArgumentsBit 2633 | NPlusKPatternsBit 2634 | DoAndIfThenElseBit 2635 | MultiWayIfBit 2636 | GadtSyntaxBit 2637 | ImportQualifiedPostBit 2638 | LinearTypesBit 2639 | NoLexicalNegationBit -- See Note [Why not LexicalNegationBit] 2640 | OverloadedRecordDotBit 2641 | OverloadedRecordUpdateBit 2642 2643 -- Flags that are updated once parsing starts 2644 | InRulePragBit 2645 | InNestedCommentBit -- See Note [Nested comment line pragmas] 2646 | UsePosPragsBit 2647 -- ^ If this is enabled, '{-# LINE ... -#}' and '{-# COLUMN ... #-}' 2648 -- update the internal position. Otherwise, those pragmas are lexed as 2649 -- tokens of their own. 2650 deriving Enum 2651 2652{-# INLINE mkParserOpts #-} 2653mkParserOpts 2654 :: EnumSet WarningFlag -- ^ warnings flags enabled 2655 -> EnumSet LangExt.Extension -- ^ permitted language extensions enabled 2656 -> Bool -- ^ are safe imports on? 2657 -> Bool -- ^ keeping Haddock comment tokens 2658 -> Bool -- ^ keep regular comment tokens 2659 2660 -> Bool 2661 -- ^ If this is enabled, '{-# LINE ... -#}' and '{-# COLUMN ... #-}' update 2662 -- the internal position kept by the parser. Otherwise, those pragmas are 2663 -- lexed as 'ITline_prag' and 'ITcolumn_prag' tokens. 2664 2665 -> ParserOpts 2666-- ^ Given exactly the information needed, set up the 'ParserOpts' 2667mkParserOpts warningFlags extensionFlags 2668 safeImports isHaddock rawTokStream usePosPrags = 2669 ParserOpts { 2670 pWarningFlags = warningFlags 2671 , pExtsBitmap = safeHaskellBit .|. langExtBits .|. optBits 2672 } 2673 where 2674 safeHaskellBit = SafeHaskellBit `setBitIf` safeImports 2675 langExtBits = 2676 FfiBit `xoptBit` LangExt.ForeignFunctionInterface 2677 .|. InterruptibleFfiBit `xoptBit` LangExt.InterruptibleFFI 2678 .|. CApiFfiBit `xoptBit` LangExt.CApiFFI 2679 .|. ArrowsBit `xoptBit` LangExt.Arrows 2680 .|. ThBit `xoptBit` LangExt.TemplateHaskell 2681 .|. ThQuotesBit `xoptBit` LangExt.TemplateHaskellQuotes 2682 .|. QqBit `xoptBit` LangExt.QuasiQuotes 2683 .|. IpBit `xoptBit` LangExt.ImplicitParams 2684 .|. OverloadedLabelsBit `xoptBit` LangExt.OverloadedLabels 2685 .|. ExplicitForallBit `xoptBit` LangExt.ExplicitForAll 2686 .|. BangPatBit `xoptBit` LangExt.BangPatterns 2687 .|. MagicHashBit `xoptBit` LangExt.MagicHash 2688 .|. RecursiveDoBit `xoptBit` LangExt.RecursiveDo 2689 .|. QualifiedDoBit `xoptBit` LangExt.QualifiedDo 2690 .|. UnicodeSyntaxBit `xoptBit` LangExt.UnicodeSyntax 2691 .|. UnboxedTuplesBit `xoptBit` LangExt.UnboxedTuples 2692 .|. UnboxedSumsBit `xoptBit` LangExt.UnboxedSums 2693 .|. DatatypeContextsBit `xoptBit` LangExt.DatatypeContexts 2694 .|. TransformComprehensionsBit `xoptBit` LangExt.TransformListComp 2695 .|. MonadComprehensionsBit `xoptBit` LangExt.MonadComprehensions 2696 .|. AlternativeLayoutRuleBit `xoptBit` LangExt.AlternativeLayoutRule 2697 .|. ALRTransitionalBit `xoptBit` LangExt.AlternativeLayoutRuleTransitional 2698 .|. RelaxedLayoutBit `xoptBit` LangExt.RelaxedLayout 2699 .|. NondecreasingIndentationBit `xoptBit` LangExt.NondecreasingIndentation 2700 .|. TraditionalRecordSyntaxBit `xoptBit` LangExt.TraditionalRecordSyntax 2701 .|. ExplicitNamespacesBit `xoptBit` LangExt.ExplicitNamespaces 2702 .|. LambdaCaseBit `xoptBit` LangExt.LambdaCase 2703 .|. BinaryLiteralsBit `xoptBit` LangExt.BinaryLiterals 2704 .|. NegativeLiteralsBit `xoptBit` LangExt.NegativeLiterals 2705 .|. HexFloatLiteralsBit `xoptBit` LangExt.HexFloatLiterals 2706 .|. PatternSynonymsBit `xoptBit` LangExt.PatternSynonyms 2707 .|. StaticPointersBit `xoptBit` LangExt.StaticPointers 2708 .|. NumericUnderscoresBit `xoptBit` LangExt.NumericUnderscores 2709 .|. StarIsTypeBit `xoptBit` LangExt.StarIsType 2710 .|. BlockArgumentsBit `xoptBit` LangExt.BlockArguments 2711 .|. NPlusKPatternsBit `xoptBit` LangExt.NPlusKPatterns 2712 .|. DoAndIfThenElseBit `xoptBit` LangExt.DoAndIfThenElse 2713 .|. MultiWayIfBit `xoptBit` LangExt.MultiWayIf 2714 .|. GadtSyntaxBit `xoptBit` LangExt.GADTSyntax 2715 .|. ImportQualifiedPostBit `xoptBit` LangExt.ImportQualifiedPost 2716 .|. LinearTypesBit `xoptBit` LangExt.LinearTypes 2717 .|. NoLexicalNegationBit `xoptNotBit` LangExt.LexicalNegation -- See Note [Why not LexicalNegationBit] 2718 .|. OverloadedRecordDotBit `xoptBit` LangExt.OverloadedRecordDot 2719 .|. OverloadedRecordUpdateBit `xoptBit` LangExt.OverloadedRecordUpdate -- Enable testing via 'getBit OverloadedRecordUpdateBit' in the parser (RecordDotSyntax parsing uses that information). 2720 optBits = 2721 HaddockBit `setBitIf` isHaddock 2722 .|. RawTokenStreamBit `setBitIf` rawTokStream 2723 .|. UsePosPragsBit `setBitIf` usePosPrags 2724 2725 xoptBit bit ext = bit `setBitIf` EnumSet.member ext extensionFlags 2726 xoptNotBit bit ext = bit `setBitIf` not (EnumSet.member ext extensionFlags) 2727 2728 setBitIf :: ExtBits -> Bool -> ExtsBitmap 2729 b `setBitIf` cond | cond = xbit b 2730 | otherwise = 0 2731 2732-- | Set parser options for parsing OPTIONS pragmas 2733initPragState :: ParserOpts -> StringBuffer -> RealSrcLoc -> PState 2734initPragState options buf loc = (initParserState options buf loc) 2735 { lex_state = [bol, option_prags, 0] 2736 } 2737 2738-- | Creates a parse state from a 'ParserOpts' value 2739initParserState :: ParserOpts -> StringBuffer -> RealSrcLoc -> PState 2740initParserState options buf loc = 2741 PState { 2742 buffer = buf, 2743 options = options, 2744 errors = emptyBag, 2745 warnings = emptyBag, 2746 tab_first = Nothing, 2747 tab_count = 0, 2748 last_tk = Nothing, 2749 prev_loc = mkPsSpan init_loc init_loc, 2750 prev_loc2 = mkPsSpan init_loc init_loc, 2751 last_loc = mkPsSpan init_loc init_loc, 2752 last_len = 0, 2753 loc = init_loc, 2754 context = [], 2755 lex_state = [bol, 0], 2756 srcfiles = [], 2757 alr_pending_implicit_tokens = [], 2758 alr_next_token = Nothing, 2759 alr_last_loc = PsSpan (alrInitialLoc (fsLit "<no file>")) (BufSpan (BufPos 0) (BufPos 0)), 2760 alr_context = [], 2761 alr_expecting_ocurly = Nothing, 2762 alr_justClosedExplicitLetBlock = False, 2763 eof_pos = Nothing, 2764 header_comments = Nothing, 2765 comment_q = [], 2766 hdk_comments = nilOL 2767 } 2768 where init_loc = PsLoc loc (BufPos 0) 2769 2770-- | An mtl-style class for monads that support parsing-related operations. 2771-- For example, sometimes we make a second pass over the parsing results to validate, 2772-- disambiguate, or rearrange them, and we do so in the PV monad which cannot consume 2773-- input but can report parsing errors, check for extension bits, and accumulate 2774-- parsing annotations. Both P and PV are instances of MonadP. 2775-- 2776-- MonadP grants us convenient overloading. The other option is to have separate operations 2777-- for each monad: addErrorP vs addErrorPV, getBitP vs getBitPV, and so on. 2778-- 2779class Monad m => MonadP m where 2780 -- | Add a non-fatal error. Use this when the parser can produce a result 2781 -- despite the error. 2782 -- 2783 -- For example, when GHC encounters a @forall@ in a type, 2784 -- but @-XExplicitForAll@ is disabled, the parser constructs @ForAllTy@ 2785 -- as if @-XExplicitForAll@ was enabled, adding a non-fatal error to 2786 -- the accumulator. 2787 -- 2788 -- Control flow wise, non-fatal errors act like warnings: they are added 2789 -- to the accumulator and parsing continues. This allows GHC to report 2790 -- more than one parse error per file. 2791 -- 2792 addError :: PsError -> m () 2793 2794 -- | Add a warning to the accumulator. 2795 -- Use 'getMessages' to get the accumulated warnings. 2796 addWarning :: WarningFlag -> PsWarning -> m () 2797 2798 -- | Add a fatal error. This will be the last error reported by the parser, and 2799 -- the parser will not produce any result, ending in a 'PFailed' state. 2800 addFatalError :: PsError -> m a 2801 2802 -- | Check if a given flag is currently set in the bitmap. 2803 getBit :: ExtBits -> m Bool 2804 -- | Go through the @comment_q@ in @PState@ and remove all comments 2805 -- that belong within the given span 2806 allocateCommentsP :: RealSrcSpan -> m EpAnnComments 2807 -- | Go through the @comment_q@ in @PState@ and remove all comments 2808 -- that come before or within the given span 2809 allocatePriorCommentsP :: RealSrcSpan -> m EpAnnComments 2810 -- | Go through the @comment_q@ in @PState@ and remove all comments 2811 -- that come after the given span 2812 allocateFinalCommentsP :: RealSrcSpan -> m EpAnnComments 2813 2814instance MonadP P where 2815 addError err 2816 = P $ \s -> POk s { errors = err `consBag` errors s} () 2817 2818 addWarning option w 2819 = P $ \s -> if warnopt option (options s) 2820 then POk (s { warnings = w `consBag` warnings s }) () 2821 else POk s () 2822 2823 addFatalError err = 2824 addError err >> P PFailed 2825 2826 getBit ext = P $ \s -> let b = ext `xtest` pExtsBitmap (options s) 2827 in b `seq` POk s b 2828 allocateCommentsP ss = P $ \s -> 2829 let (comment_q', newAnns) = allocateComments ss (comment_q s) in 2830 POk s { 2831 comment_q = comment_q' 2832 } (EpaComments newAnns) 2833 allocatePriorCommentsP ss = P $ \s -> 2834 let (header_comments', comment_q', newAnns) 2835 = allocatePriorComments ss (comment_q s) (header_comments s) in 2836 POk s { 2837 header_comments = header_comments', 2838 comment_q = comment_q' 2839 } (EpaComments newAnns) 2840 allocateFinalCommentsP ss = P $ \s -> 2841 let (header_comments', comment_q', newAnns) 2842 = allocateFinalComments ss (comment_q s) (header_comments s) in 2843 POk s { 2844 header_comments = header_comments', 2845 comment_q = comment_q' 2846 } (EpaCommentsBalanced (fromMaybe [] header_comments') (reverse newAnns)) 2847 2848getCommentsFor :: (MonadP m) => SrcSpan -> m EpAnnComments 2849getCommentsFor (RealSrcSpan l _) = allocateCommentsP l 2850getCommentsFor _ = return emptyComments 2851 2852getPriorCommentsFor :: (MonadP m) => SrcSpan -> m EpAnnComments 2853getPriorCommentsFor (RealSrcSpan l _) = allocatePriorCommentsP l 2854getPriorCommentsFor _ = return emptyComments 2855 2856getFinalCommentsFor :: (MonadP m) => SrcSpan -> m EpAnnComments 2857getFinalCommentsFor (RealSrcSpan l _) = allocateFinalCommentsP l 2858getFinalCommentsFor _ = return emptyComments 2859 2860getEofPos :: P (Maybe (RealSrcSpan, RealSrcSpan)) 2861getEofPos = P $ \s@(PState { eof_pos = pos }) -> POk s pos 2862 2863addTabWarning :: RealSrcSpan -> P () 2864addTabWarning srcspan 2865 = P $ \s@PState{tab_first=tf, tab_count=tc, options=o} -> 2866 let tf' = if isJust tf then tf else Just srcspan 2867 tc' = tc + 1 2868 s' = if warnopt Opt_WarnTabs o 2869 then s{tab_first = tf', tab_count = tc'} 2870 else s 2871 in POk s' () 2872 2873-- | Get a bag of the errors that have been accumulated so far. 2874-- Does not take -Werror into account. 2875getErrorMessages :: PState -> Bag PsError 2876getErrorMessages p = errors p 2877 2878-- | Get the warnings and errors accumulated so far. 2879-- Does not take -Werror into account. 2880getMessages :: PState -> (Bag PsWarning, Bag PsError) 2881getMessages p = 2882 let ws = warnings p 2883 -- we add the tabulation warning on the fly because 2884 -- we count the number of occurrences of tab characters 2885 ws' = case tab_first p of 2886 Nothing -> ws 2887 Just tf -> PsWarnTab (RealSrcSpan tf Nothing) (tab_count p) 2888 `consBag` ws 2889 in (ws', errors p) 2890 2891getContext :: P [LayoutContext] 2892getContext = P $ \s@PState{context=ctx} -> POk s ctx 2893 2894setContext :: [LayoutContext] -> P () 2895setContext ctx = P $ \s -> POk s{context=ctx} () 2896 2897popContext :: P () 2898popContext = P $ \ s@(PState{ buffer = buf, options = o, context = ctx, 2899 last_len = len, last_loc = last_loc }) -> 2900 case ctx of 2901 (_:tl) -> 2902 POk s{ context = tl } () 2903 [] -> 2904 unP (addFatalError $ srcParseErr o buf len (mkSrcSpanPs last_loc)) s 2905 2906-- Push a new layout context at the indentation of the last token read. 2907pushCurrentContext :: GenSemic -> P () 2908pushCurrentContext gen_semic = P $ \ s@PState{ last_loc=loc, context=ctx } -> 2909 POk s{context = Layout (srcSpanStartCol (psRealSpan loc)) gen_semic : ctx} () 2910 2911-- This is only used at the outer level of a module when the 'module' keyword is 2912-- missing. 2913pushModuleContext :: P () 2914pushModuleContext = pushCurrentContext generateSemic 2915 2916getOffside :: P (Ordering, Bool) 2917getOffside = P $ \s@PState{last_loc=loc, context=stk} -> 2918 let offs = srcSpanStartCol (psRealSpan loc) in 2919 let ord = case stk of 2920 Layout n gen_semic : _ -> 2921 --trace ("layout: " ++ show n ++ ", offs: " ++ show offs) $ 2922 (compare offs n, gen_semic) 2923 _ -> 2924 (GT, dontGenerateSemic) 2925 in POk s ord 2926 2927-- --------------------------------------------------------------------------- 2928-- Construct a parse error 2929 2930srcParseErr 2931 :: ParserOpts 2932 -> StringBuffer -- current buffer (placed just after the last token) 2933 -> Int -- length of the previous token 2934 -> SrcSpan 2935 -> PsError 2936srcParseErr options buf len loc = PsError (PsErrParse token) suggests loc 2937 where 2938 token = lexemeToString (offsetBytes (-len) buf) len 2939 pattern = decodePrevNChars 8 buf 2940 last100 = decodePrevNChars 100 buf 2941 doInLast100 = "do" `isInfixOf` last100 2942 mdoInLast100 = "mdo" `isInfixOf` last100 2943 th_enabled = ThQuotesBit `xtest` pExtsBitmap options 2944 ps_enabled = PatternSynonymsBit `xtest` pExtsBitmap options 2945 2946 sug c s = if c then Just s else Nothing 2947 sug_th = sug (not th_enabled && token == "$") SuggestTH -- #7396 2948 sug_rdo = sug (token == "<-" && mdoInLast100) SuggestRecursiveDo 2949 sug_do = sug (token == "<-" && not mdoInLast100) SuggestDo 2950 sug_let = sug (token == "=" && doInLast100) SuggestLetInDo -- #15849 2951 sug_pat = sug (not ps_enabled && pattern == "pattern ") SuggestPatternSynonyms -- #12429 2952 suggests 2953 | null token = [] 2954 | otherwise = catMaybes [sug_th, sug_rdo, sug_do, sug_let, sug_pat] 2955 2956-- Report a parse failure, giving the span of the previous token as 2957-- the location of the error. This is the entry point for errors 2958-- detected during parsing. 2959srcParseFail :: P a 2960srcParseFail = P $ \s@PState{ buffer = buf, options = o, last_len = len, 2961 last_loc = last_loc } -> 2962 unP (addFatalError $ srcParseErr o buf len (mkSrcSpanPs last_loc)) s 2963 2964-- A lexical error is reported at a particular position in the source file, 2965-- not over a token range. 2966lexError :: LexErr -> P a 2967lexError e = do 2968 loc <- getRealSrcLoc 2969 (AI end buf) <- getInput 2970 reportLexError loc (psRealLoc end) buf 2971 (\k -> PsError (PsErrLexer e k) []) 2972 2973-- ----------------------------------------------------------------------------- 2974-- This is the top-level function: called from the parser each time a 2975-- new token is to be read from the input. 2976 2977lexer, lexerDbg :: Bool -> (Located Token -> P a) -> P a 2978 2979lexer queueComments cont = do 2980 alr <- getBit AlternativeLayoutRuleBit 2981 let lexTokenFun = if alr then lexTokenAlr else lexToken 2982 (L span tok) <- lexTokenFun 2983 --trace ("token: " ++ show tok) $ do 2984 2985 if (queueComments && isComment tok) 2986 then queueComment (L (psRealSpan span) tok) >> lexer queueComments cont 2987 else cont (L (mkSrcSpanPs span) tok) 2988 2989-- Use this instead of 'lexer' in GHC.Parser to dump the tokens for debugging. 2990lexerDbg queueComments cont = lexer queueComments contDbg 2991 where 2992 contDbg tok = trace ("token: " ++ show (unLoc tok)) (cont tok) 2993 2994lexTokenAlr :: P (PsLocated Token) 2995lexTokenAlr = do mPending <- popPendingImplicitToken 2996 t <- case mPending of 2997 Nothing -> 2998 do mNext <- popNextToken 2999 t <- case mNext of 3000 Nothing -> lexToken 3001 Just next -> return next 3002 alternativeLayoutRuleToken t 3003 Just t -> 3004 return t 3005 setAlrLastLoc (getLoc t) 3006 case unLoc t of 3007 ITwhere -> setAlrExpectingOCurly (Just ALRLayoutWhere) 3008 ITlet -> setAlrExpectingOCurly (Just ALRLayoutLet) 3009 ITof -> setAlrExpectingOCurly (Just ALRLayoutOf) 3010 ITlcase -> setAlrExpectingOCurly (Just ALRLayoutOf) 3011 ITdo _ -> setAlrExpectingOCurly (Just ALRLayoutDo) 3012 ITmdo _ -> setAlrExpectingOCurly (Just ALRLayoutDo) 3013 ITrec -> setAlrExpectingOCurly (Just ALRLayoutDo) 3014 _ -> return () 3015 return t 3016 3017alternativeLayoutRuleToken :: PsLocated Token -> P (PsLocated Token) 3018alternativeLayoutRuleToken t 3019 = do context <- getALRContext 3020 lastLoc <- getAlrLastLoc 3021 mExpectingOCurly <- getAlrExpectingOCurly 3022 transitional <- getBit ALRTransitionalBit 3023 justClosedExplicitLetBlock <- getJustClosedExplicitLetBlock 3024 setJustClosedExplicitLetBlock False 3025 let thisLoc = getLoc t 3026 thisCol = srcSpanStartCol (psRealSpan thisLoc) 3027 newLine = srcSpanStartLine (psRealSpan thisLoc) > srcSpanEndLine (psRealSpan lastLoc) 3028 case (unLoc t, context, mExpectingOCurly) of 3029 -- This case handles a GHC extension to the original H98 3030 -- layout rule... 3031 (ITocurly, _, Just alrLayout) -> 3032 do setAlrExpectingOCurly Nothing 3033 let isLet = case alrLayout of 3034 ALRLayoutLet -> True 3035 _ -> False 3036 setALRContext (ALRNoLayout (containsCommas ITocurly) isLet : context) 3037 return t 3038 -- ...and makes this case unnecessary 3039 {- 3040 -- I think our implicit open-curly handling is slightly 3041 -- different to John's, in how it interacts with newlines 3042 -- and "in" 3043 (ITocurly, _, Just _) -> 3044 do setAlrExpectingOCurly Nothing 3045 setNextToken t 3046 lexTokenAlr 3047 -} 3048 (_, ALRLayout _ col : _ls, Just expectingOCurly) 3049 | (thisCol > col) || 3050 (thisCol == col && 3051 isNonDecreasingIndentation expectingOCurly) -> 3052 do setAlrExpectingOCurly Nothing 3053 setALRContext (ALRLayout expectingOCurly thisCol : context) 3054 setNextToken t 3055 return (L thisLoc ITvocurly) 3056 | otherwise -> 3057 do setAlrExpectingOCurly Nothing 3058 setPendingImplicitTokens [L lastLoc ITvccurly] 3059 setNextToken t 3060 return (L lastLoc ITvocurly) 3061 (_, _, Just expectingOCurly) -> 3062 do setAlrExpectingOCurly Nothing 3063 setALRContext (ALRLayout expectingOCurly thisCol : context) 3064 setNextToken t 3065 return (L thisLoc ITvocurly) 3066 -- We do the [] cases earlier than in the spec, as we 3067 -- have an actual EOF token 3068 (ITeof, ALRLayout _ _ : ls, _) -> 3069 do setALRContext ls 3070 setNextToken t 3071 return (L thisLoc ITvccurly) 3072 (ITeof, _, _) -> 3073 return t 3074 -- the other ITeof case omitted; general case below covers it 3075 (ITin, _, _) 3076 | justClosedExplicitLetBlock -> 3077 return t 3078 (ITin, ALRLayout ALRLayoutLet _ : ls, _) 3079 | newLine -> 3080 do setPendingImplicitTokens [t] 3081 setALRContext ls 3082 return (L thisLoc ITvccurly) 3083 -- This next case is to handle a transitional issue: 3084 (ITwhere, ALRLayout _ col : ls, _) 3085 | newLine && thisCol == col && transitional -> 3086 do addWarning Opt_WarnAlternativeLayoutRuleTransitional 3087 $ PsWarnTransitionalLayout (mkSrcSpanPs thisLoc) TransLayout_Where 3088 setALRContext ls 3089 setNextToken t 3090 -- Note that we use lastLoc, as we may need to close 3091 -- more layouts, or give a semicolon 3092 return (L lastLoc ITvccurly) 3093 -- This next case is to handle a transitional issue: 3094 (ITvbar, ALRLayout _ col : ls, _) 3095 | newLine && thisCol == col && transitional -> 3096 do addWarning Opt_WarnAlternativeLayoutRuleTransitional 3097 $ PsWarnTransitionalLayout (mkSrcSpanPs thisLoc) TransLayout_Pipe 3098 setALRContext ls 3099 setNextToken t 3100 -- Note that we use lastLoc, as we may need to close 3101 -- more layouts, or give a semicolon 3102 return (L lastLoc ITvccurly) 3103 (_, ALRLayout _ col : ls, _) 3104 | newLine && thisCol == col -> 3105 do setNextToken t 3106 let loc = psSpanStart thisLoc 3107 zeroWidthLoc = mkPsSpan loc loc 3108 return (L zeroWidthLoc ITsemi) 3109 | newLine && thisCol < col -> 3110 do setALRContext ls 3111 setNextToken t 3112 -- Note that we use lastLoc, as we may need to close 3113 -- more layouts, or give a semicolon 3114 return (L lastLoc ITvccurly) 3115 -- We need to handle close before open, as 'then' is both 3116 -- an open and a close 3117 (u, _, _) 3118 | isALRclose u -> 3119 case context of 3120 ALRLayout _ _ : ls -> 3121 do setALRContext ls 3122 setNextToken t 3123 return (L thisLoc ITvccurly) 3124 ALRNoLayout _ isLet : ls -> 3125 do let ls' = if isALRopen u 3126 then ALRNoLayout (containsCommas u) False : ls 3127 else ls 3128 setALRContext ls' 3129 when isLet $ setJustClosedExplicitLetBlock True 3130 return t 3131 [] -> 3132 do let ls = if isALRopen u 3133 then [ALRNoLayout (containsCommas u) False] 3134 else [] 3135 setALRContext ls 3136 -- XXX This is an error in John's code, but 3137 -- it looks reachable to me at first glance 3138 return t 3139 (u, _, _) 3140 | isALRopen u -> 3141 do setALRContext (ALRNoLayout (containsCommas u) False : context) 3142 return t 3143 (ITin, ALRLayout ALRLayoutLet _ : ls, _) -> 3144 do setALRContext ls 3145 setPendingImplicitTokens [t] 3146 return (L thisLoc ITvccurly) 3147 (ITin, ALRLayout _ _ : ls, _) -> 3148 do setALRContext ls 3149 setNextToken t 3150 return (L thisLoc ITvccurly) 3151 -- the other ITin case omitted; general case below covers it 3152 (ITcomma, ALRLayout _ _ : ls, _) 3153 | topNoLayoutContainsCommas ls -> 3154 do setALRContext ls 3155 setNextToken t 3156 return (L thisLoc ITvccurly) 3157 (ITwhere, ALRLayout ALRLayoutDo _ : ls, _) -> 3158 do setALRContext ls 3159 setPendingImplicitTokens [t] 3160 return (L thisLoc ITvccurly) 3161 -- the other ITwhere case omitted; general case below covers it 3162 (_, _, _) -> return t 3163 3164isALRopen :: Token -> Bool 3165isALRopen ITcase = True 3166isALRopen ITif = True 3167isALRopen ITthen = True 3168isALRopen IToparen = True 3169isALRopen ITobrack = True 3170isALRopen ITocurly = True 3171-- GHC Extensions: 3172isALRopen IToubxparen = True 3173isALRopen _ = False 3174 3175isALRclose :: Token -> Bool 3176isALRclose ITof = True 3177isALRclose ITthen = True 3178isALRclose ITelse = True 3179isALRclose ITcparen = True 3180isALRclose ITcbrack = True 3181isALRclose ITccurly = True 3182-- GHC Extensions: 3183isALRclose ITcubxparen = True 3184isALRclose _ = False 3185 3186isNonDecreasingIndentation :: ALRLayout -> Bool 3187isNonDecreasingIndentation ALRLayoutDo = True 3188isNonDecreasingIndentation _ = False 3189 3190containsCommas :: Token -> Bool 3191containsCommas IToparen = True 3192containsCommas ITobrack = True 3193-- John doesn't have {} as containing commas, but records contain them, 3194-- which caused a problem parsing Cabal's Distribution.Simple.InstallDirs 3195-- (defaultInstallDirs). 3196containsCommas ITocurly = True 3197-- GHC Extensions: 3198containsCommas IToubxparen = True 3199containsCommas _ = False 3200 3201topNoLayoutContainsCommas :: [ALRContext] -> Bool 3202topNoLayoutContainsCommas [] = False 3203topNoLayoutContainsCommas (ALRLayout _ _ : ls) = topNoLayoutContainsCommas ls 3204topNoLayoutContainsCommas (ALRNoLayout b _ : _) = b 3205 3206lexToken :: P (PsLocated Token) 3207lexToken = do 3208 inp@(AI loc1 buf) <- getInput 3209 sc <- getLexState 3210 exts <- getExts 3211 case alexScanUser exts inp sc of 3212 AlexEOF -> do 3213 let span = mkPsSpan loc1 loc1 3214 lt <- getLastLocEof 3215 setEofPos (psRealSpan span) (psRealSpan lt) 3216 setLastToken span 0 3217 return (L span ITeof) 3218 AlexError (AI loc2 buf) -> 3219 reportLexError (psRealLoc loc1) (psRealLoc loc2) buf 3220 (\k -> PsError (PsErrLexer LexError k) []) 3221 AlexSkip inp2 _ -> do 3222 setInput inp2 3223 lexToken 3224 AlexToken inp2@(AI end buf2) _ t -> do 3225 setInput inp2 3226 let span = mkPsSpan loc1 end 3227 let bytes = byteDiff buf buf2 3228 span `seq` setLastToken span bytes 3229 lt <- t span buf bytes 3230 let lt' = unLoc lt 3231 if (isComment lt') then setLastComment lt else setLastTk lt 3232 return lt 3233 3234reportLexError :: RealSrcLoc -> RealSrcLoc -> StringBuffer -> (LexErrKind -> SrcSpan -> PsError) -> P a 3235reportLexError loc1 loc2 buf f 3236 | atEnd buf = failLocMsgP loc1 loc2 (f LexErrKind_EOF) 3237 | otherwise = 3238 let c = fst (nextChar buf) 3239 in if c == '\0' -- decoding errors are mapped to '\0', see utf8DecodeChar# 3240 then failLocMsgP loc2 loc2 (f LexErrKind_UTF8) 3241 else failLocMsgP loc1 loc2 (f (LexErrKind_Char c)) 3242 3243lexTokenStream :: ParserOpts -> StringBuffer -> RealSrcLoc -> ParseResult [Located Token] 3244lexTokenStream opts buf loc = unP go initState{ options = opts' } 3245 where 3246 new_exts = xunset HaddockBit -- disable Haddock 3247 $ xunset UsePosPragsBit -- parse LINE/COLUMN pragmas as tokens 3248 $ xset RawTokenStreamBit -- include comments 3249 $ pExtsBitmap opts 3250 opts' = opts { pExtsBitmap = new_exts } 3251 initState = initParserState opts' buf loc 3252 go = do 3253 ltok <- lexer False return 3254 case ltok of 3255 L _ ITeof -> return [] 3256 _ -> liftM (ltok:) go 3257 3258linePrags = Map.singleton "line" linePrag 3259 3260fileHeaderPrags = Map.fromList([("options", lex_string_prag IToptions_prag), 3261 ("options_ghc", lex_string_prag IToptions_prag), 3262 ("options_haddock", lex_string_prag_comment ITdocOptions), 3263 ("language", token ITlanguage_prag), 3264 ("include", lex_string_prag ITinclude_prag)]) 3265 3266ignoredPrags = Map.fromList (map ignored pragmas) 3267 where ignored opt = (opt, nested_comment lexToken) 3268 impls = ["hugs", "nhc98", "jhc", "yhc", "catch", "derive"] 3269 options_pragmas = map ("options_" ++) impls 3270 -- CFILES is a hugs-only thing. 3271 pragmas = options_pragmas ++ ["cfiles", "contract"] 3272 3273oneWordPrags = Map.fromList [ 3274 ("rules", rulePrag), 3275 ("inline", 3276 strtoken (\s -> (ITinline_prag (SourceText s) Inline FunLike))), 3277 ("inlinable", 3278 strtoken (\s -> (ITinline_prag (SourceText s) Inlinable FunLike))), 3279 ("inlineable", 3280 strtoken (\s -> (ITinline_prag (SourceText s) Inlinable FunLike))), 3281 -- Spelling variant 3282 ("notinline", 3283 strtoken (\s -> (ITinline_prag (SourceText s) NoInline FunLike))), 3284 ("specialize", strtoken (\s -> ITspec_prag (SourceText s))), 3285 ("source", strtoken (\s -> ITsource_prag (SourceText s))), 3286 ("warning", strtoken (\s -> ITwarning_prag (SourceText s))), 3287 ("deprecated", strtoken (\s -> ITdeprecated_prag (SourceText s))), 3288 ("scc", strtoken (\s -> ITscc_prag (SourceText s))), 3289 ("unpack", strtoken (\s -> ITunpack_prag (SourceText s))), 3290 ("nounpack", strtoken (\s -> ITnounpack_prag (SourceText s))), 3291 ("ann", strtoken (\s -> ITann_prag (SourceText s))), 3292 ("minimal", strtoken (\s -> ITminimal_prag (SourceText s))), 3293 ("overlaps", strtoken (\s -> IToverlaps_prag (SourceText s))), 3294 ("overlappable", strtoken (\s -> IToverlappable_prag (SourceText s))), 3295 ("overlapping", strtoken (\s -> IToverlapping_prag (SourceText s))), 3296 ("incoherent", strtoken (\s -> ITincoherent_prag (SourceText s))), 3297 ("ctype", strtoken (\s -> ITctype (SourceText s))), 3298 ("complete", strtoken (\s -> ITcomplete_prag (SourceText s))), 3299 ("column", columnPrag) 3300 ] 3301 3302twoWordPrags = Map.fromList [ 3303 ("inline conlike", 3304 strtoken (\s -> (ITinline_prag (SourceText s) Inline ConLike))), 3305 ("notinline conlike", 3306 strtoken (\s -> (ITinline_prag (SourceText s) NoInline ConLike))), 3307 ("specialize inline", 3308 strtoken (\s -> (ITspec_inline_prag (SourceText s) True))), 3309 ("specialize notinline", 3310 strtoken (\s -> (ITspec_inline_prag (SourceText s) False))) 3311 ] 3312 3313dispatch_pragmas :: Map String Action -> Action 3314dispatch_pragmas prags span buf len = case Map.lookup (clean_pragma (lexemeToString buf len)) prags of 3315 Just found -> found span buf len 3316 Nothing -> lexError LexUnknownPragma 3317 3318known_pragma :: Map String Action -> AlexAccPred ExtsBitmap 3319known_pragma prags _ (AI _ startbuf) _ (AI _ curbuf) 3320 = isKnown && nextCharIsNot curbuf pragmaNameChar 3321 where l = lexemeToString startbuf (byteDiff startbuf curbuf) 3322 isKnown = isJust $ Map.lookup (clean_pragma l) prags 3323 pragmaNameChar c = isAlphaNum c || c == '_' 3324 3325clean_pragma :: String -> String 3326clean_pragma prag = canon_ws (map toLower (unprefix prag)) 3327 where unprefix prag' = case stripPrefix "{-#" prag' of 3328 Just rest -> rest 3329 Nothing -> prag' 3330 canonical prag' = case prag' of 3331 "noinline" -> "notinline" 3332 "specialise" -> "specialize" 3333 "constructorlike" -> "conlike" 3334 _ -> prag' 3335 canon_ws s = unwords (map canonical (words s)) 3336 3337 3338 3339{- 3340%************************************************************************ 3341%* * 3342 Helper functions for generating annotations in the parser 3343%* * 3344%************************************************************************ 3345-} 3346 3347 3348-- |Given a 'RealSrcSpan' that surrounds a 'HsPar' or 'HsParTy', generate 3349-- 'AddEpAnn' values for the opening and closing bordering on the start 3350-- and end of the span 3351mkParensEpAnn :: RealSrcSpan -> (AddEpAnn, AddEpAnn) 3352mkParensEpAnn ss = (AddEpAnn AnnOpenP (EpaSpan lo),AddEpAnn AnnCloseP (EpaSpan lc)) 3353 where 3354 f = srcSpanFile ss 3355 sl = srcSpanStartLine ss 3356 sc = srcSpanStartCol ss 3357 el = srcSpanEndLine ss 3358 ec = srcSpanEndCol ss 3359 lo = mkRealSrcSpan (realSrcSpanStart ss) (mkRealSrcLoc f sl (sc+1)) 3360 lc = mkRealSrcSpan (mkRealSrcLoc f el (ec - 1)) (realSrcSpanEnd ss) 3361 3362queueComment :: RealLocated Token -> P() 3363queueComment c = P $ \s -> POk s { 3364 comment_q = commentToAnnotation c : comment_q s 3365 } () 3366 3367allocateComments 3368 :: RealSrcSpan 3369 -> [LEpaComment] 3370 -> ([LEpaComment], [LEpaComment]) 3371allocateComments ss comment_q = 3372 let 3373 (before,rest) = break (\(L l _) -> isRealSubspanOf (anchor l) ss) comment_q 3374 (middle,after) = break (\(L l _) -> not (isRealSubspanOf (anchor l) ss)) rest 3375 comment_q' = before ++ after 3376 newAnns = middle 3377 in 3378 (comment_q', newAnns) 3379 3380allocatePriorComments 3381 :: RealSrcSpan 3382 -> [LEpaComment] 3383 -> Maybe [LEpaComment] 3384 -> (Maybe [LEpaComment], [LEpaComment], [LEpaComment]) 3385allocatePriorComments ss comment_q mheader_comments = 3386 let 3387 cmp (L l _) = anchor l <= ss 3388 (before,after) = partition cmp comment_q 3389 newAnns = before 3390 comment_q'= after 3391 in 3392 case mheader_comments of 3393 Nothing -> (Just newAnns, comment_q', []) 3394 Just _ -> (mheader_comments, comment_q', newAnns) 3395 3396allocateFinalComments 3397 :: RealSrcSpan 3398 -> [LEpaComment] 3399 -> Maybe [LEpaComment] 3400 -> (Maybe [LEpaComment], [LEpaComment], [LEpaComment]) 3401allocateFinalComments ss comment_q mheader_comments = 3402 let 3403 cmp (L l _) = anchor l <= ss 3404 (before,after) = partition cmp comment_q 3405 newAnns = after 3406 comment_q'= before 3407 in 3408 case mheader_comments of 3409 Nothing -> (Just newAnns, [], comment_q') 3410 Just _ -> (mheader_comments, [], comment_q' ++ newAnns) 3411 3412commentToAnnotation :: RealLocated Token -> LEpaComment 3413commentToAnnotation (L l (ITdocCommentNext s ll)) = mkLEpaComment l ll (EpaDocCommentNext s) 3414commentToAnnotation (L l (ITdocCommentPrev s ll)) = mkLEpaComment l ll (EpaDocCommentPrev s) 3415commentToAnnotation (L l (ITdocCommentNamed s ll)) = mkLEpaComment l ll (EpaDocCommentNamed s) 3416commentToAnnotation (L l (ITdocSection n s ll)) = mkLEpaComment l ll (EpaDocSection n s) 3417commentToAnnotation (L l (ITdocOptions s ll)) = mkLEpaComment l ll (EpaDocOptions s) 3418commentToAnnotation (L l (ITlineComment s ll)) = mkLEpaComment l ll (EpaLineComment s) 3419commentToAnnotation (L l (ITblockComment s ll)) = mkLEpaComment l ll (EpaBlockComment s) 3420commentToAnnotation _ = panic "commentToAnnotation" 3421 3422-- see Note [PsSpan in Comments] 3423mkLEpaComment :: RealSrcSpan -> PsSpan -> EpaCommentTok -> LEpaComment 3424mkLEpaComment l ll tok = L (realSpanAsAnchor l) (EpaComment tok (psRealSpan ll)) 3425 3426-- --------------------------------------------------------------------- 3427 3428isComment :: Token -> Bool 3429isComment (ITlineComment _ _) = True 3430isComment (ITblockComment _ _) = True 3431isComment (ITdocCommentNext _ _) = True 3432isComment (ITdocCommentPrev _ _) = True 3433isComment (ITdocCommentNamed _ _) = True 3434isComment (ITdocSection _ _ _) = True 3435isComment (ITdocOptions _ _) = True 3436isComment _ = False 3437 3438 3439bol,column_prag,layout,layout_do,layout_if,layout_left,line_prag1,line_prag1a,line_prag2,line_prag2a,option_prags :: Int 3440bol = 1 3441column_prag = 2 3442layout = 3 3443layout_do = 4 3444layout_if = 5 3445layout_left = 6 3446line_prag1 = 7 3447line_prag1a = 8 3448line_prag2 = 9 3449line_prag2a = 10 3450option_prags = 11 3451alex_action_1 = warnTab 3452alex_action_2 = nested_comment lexToken 3453alex_action_3 = lineCommentToken 3454alex_action_4 = lineCommentToken 3455alex_action_5 = lineCommentToken 3456alex_action_6 = lineCommentToken 3457alex_action_7 = lineCommentToken 3458alex_action_8 = lineCommentToken 3459alex_action_10 = begin line_prag1 3460alex_action_11 = begin line_prag1 3461alex_action_14 = do_bol 3462alex_action_15 = hopefully_open_brace 3463alex_action_17 = begin line_prag1 3464alex_action_18 = new_layout_context True dontGenerateSemic ITvbar 3465alex_action_19 = pop 3466alex_action_20 = new_layout_context True generateSemic ITvocurly 3467alex_action_21 = new_layout_context False generateSemic ITvocurly 3468alex_action_22 = do_layout_left 3469alex_action_23 = begin bol 3470alex_action_24 = dispatch_pragmas linePrags 3471alex_action_25 = setLineAndFile line_prag1a 3472alex_action_26 = failLinePrag1 3473alex_action_27 = popLinePrag1 3474alex_action_28 = setLineAndFile line_prag2a 3475alex_action_29 = pop 3476alex_action_30 = setColumn 3477alex_action_31 = dispatch_pragmas twoWordPrags 3478alex_action_32 = dispatch_pragmas oneWordPrags 3479alex_action_33 = dispatch_pragmas ignoredPrags 3480alex_action_34 = endPrag 3481alex_action_35 = dispatch_pragmas fileHeaderPrags 3482alex_action_36 = nested_comment lexToken 3483alex_action_37 = warnThen Opt_WarnUnrecognisedPragmas PsWarnUnrecognisedPragma 3484 (nested_comment lexToken) 3485alex_action_38 = multiline_doc_comment 3486alex_action_39 = nested_doc_comment 3487alex_action_40 = token (ITopenExpQuote NoE NormalSyntax) 3488alex_action_41 = token (ITopenTExpQuote NoE) 3489alex_action_42 = token (ITcloseQuote NormalSyntax) 3490alex_action_43 = token ITcloseTExpQuote 3491alex_action_44 = token (ITopenExpQuote HasE NormalSyntax) 3492alex_action_45 = token (ITopenTExpQuote HasE) 3493alex_action_46 = token ITopenPatQuote 3494alex_action_47 = layout_token ITopenDecQuote 3495alex_action_48 = token ITopenTypQuote 3496alex_action_49 = lex_quasiquote_tok 3497alex_action_50 = lex_qquasiquote_tok 3498alex_action_51 = token (ITopenExpQuote NoE UnicodeSyntax) 3499alex_action_52 = token (ITcloseQuote UnicodeSyntax) 3500alex_action_53 = special (IToparenbar NormalSyntax) 3501alex_action_54 = special (ITcparenbar NormalSyntax) 3502alex_action_55 = special (IToparenbar UnicodeSyntax) 3503alex_action_56 = special (ITcparenbar UnicodeSyntax) 3504alex_action_57 = skip_one_varid ITdupipvarid 3505alex_action_58 = skip_one_varid ITlabelvarid 3506alex_action_59 = token IToubxparen 3507alex_action_60 = token ITcubxparen 3508alex_action_61 = special IToparen 3509alex_action_62 = special ITcparen 3510alex_action_63 = special ITobrack 3511alex_action_64 = special ITcbrack 3512alex_action_65 = special ITcomma 3513alex_action_66 = special ITsemi 3514alex_action_67 = special ITbackquote 3515alex_action_68 = open_brace 3516alex_action_69 = close_brace 3517alex_action_70 = qdo_token ITdo 3518alex_action_71 = qdo_token ITmdo 3519alex_action_72 = idtoken qvarid 3520alex_action_73 = idtoken qconid 3521alex_action_74 = varid 3522alex_action_75 = idtoken conid 3523alex_action_76 = idtoken qvarid 3524alex_action_77 = idtoken qconid 3525alex_action_78 = varid 3526alex_action_79 = idtoken conid 3527alex_action_80 = varsym_tight_infix 3528alex_action_81 = varsym_prefix 3529alex_action_82 = varsym_suffix 3530alex_action_83 = varsym_loose_infix 3531alex_action_84 = idtoken qvarsym 3532alex_action_85 = idtoken qconsym 3533alex_action_86 = consym 3534alex_action_87 = tok_num positive 0 0 decimal 3535alex_action_88 = tok_num positive 2 2 binary 3536alex_action_89 = tok_num positive 2 2 octal 3537alex_action_90 = tok_num positive 2 2 hexadecimal 3538alex_action_91 = tok_num negative 1 1 decimal 3539alex_action_92 = tok_num negative 3 3 binary 3540alex_action_93 = tok_num negative 3 3 octal 3541alex_action_94 = tok_num negative 3 3 hexadecimal 3542alex_action_95 = tok_frac 0 tok_float 3543alex_action_96 = tok_frac 0 tok_float 3544alex_action_97 = tok_frac 0 tok_hex_float 3545alex_action_98 = tok_frac 0 tok_hex_float 3546alex_action_99 = tok_primint positive 0 1 decimal 3547alex_action_100 = tok_primint positive 2 3 binary 3548alex_action_101 = tok_primint positive 2 3 octal 3549alex_action_102 = tok_primint positive 2 3 hexadecimal 3550alex_action_103 = tok_primint negative 1 2 decimal 3551alex_action_104 = tok_primint negative 3 4 binary 3552alex_action_105 = tok_primint negative 3 4 octal 3553alex_action_106 = tok_primint negative 3 4 hexadecimal 3554alex_action_107 = tok_primword 0 2 decimal 3555alex_action_108 = tok_primword 2 4 binary 3556alex_action_109 = tok_primword 2 4 octal 3557alex_action_110 = tok_primword 2 4 hexadecimal 3558alex_action_111 = tok_frac 1 tok_primfloat 3559alex_action_112 = tok_frac 2 tok_primdouble 3560alex_action_113 = tok_frac 1 tok_primfloat 3561alex_action_114 = tok_frac 2 tok_primdouble 3562alex_action_115 = lex_char_tok 3563alex_action_116 = lex_string_tok 3564{-# LINE 1 "templates/GenericTemplate.hs" #-} 3565-- ----------------------------------------------------------------------------- 3566-- ALEX TEMPLATE 3567-- 3568-- This code is in the PUBLIC DOMAIN; you may copy it freely and use 3569-- it for any purpose whatsoever. 3570 3571-- ----------------------------------------------------------------------------- 3572-- INTERNALS and main scanner engine 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex. 3592#if __GLASGOW_HASKELL__ > 706 3593#define GTE(n,m) (tagToEnum# (n >=# m)) 3594#define EQ(n,m) (tagToEnum# (n ==# m)) 3595#else 3596#define GTE(n,m) (n >=# m) 3597#define EQ(n,m) (n ==# m) 3598#endif 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618data AlexAddr = AlexA# Addr# 3619-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex. 3620#if __GLASGOW_HASKELL__ < 503 3621uncheckedShiftL# = shiftL# 3622#endif 3623 3624{-# INLINE alexIndexInt16OffAddr #-} 3625alexIndexInt16OffAddr :: AlexAddr -> Int# -> Int# 3626alexIndexInt16OffAddr (AlexA# arr) off = 3627#ifdef WORDS_BIGENDIAN 3628 narrow16Int# i 3629 where 3630 i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low) 3631 high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#))) 3632 low = int2Word# (ord# (indexCharOffAddr# arr off')) 3633 off' = off *# 2# 3634#else 3635#if __GLASGOW_HASKELL__ >= 901 3636 int16ToInt# 3637#endif 3638 (indexInt16OffAddr# arr off) 3639#endif 3640 3641 3642 3643 3644 3645{-# INLINE alexIndexInt32OffAddr #-} 3646alexIndexInt32OffAddr :: AlexAddr -> Int# -> Int# 3647alexIndexInt32OffAddr (AlexA# arr) off = 3648#ifdef WORDS_BIGENDIAN 3649 narrow32Int# i 3650 where 3651 i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#` 3652 (b2 `uncheckedShiftL#` 16#) `or#` 3653 (b1 `uncheckedShiftL#` 8#) `or#` b0) 3654 b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#))) 3655 b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#))) 3656 b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#))) 3657 b0 = int2Word# (ord# (indexCharOffAddr# arr off')) 3658 off' = off *# 4# 3659#else 3660#if __GLASGOW_HASKELL__ >= 901 3661 int32ToInt# 3662#endif 3663 (indexInt32OffAddr# arr off) 3664#endif 3665 3666 3667 3668 3669 3670 3671#if __GLASGOW_HASKELL__ < 503 3672quickIndex arr i = arr ! i 3673#else 3674-- GHC >= 503, unsafeAt is available from Data.Array.Base. 3675quickIndex = unsafeAt 3676#endif 3677 3678 3679 3680 3681-- ----------------------------------------------------------------------------- 3682-- Main lexing routines 3683 3684data AlexReturn a 3685 = AlexEOF 3686 | AlexError !AlexInput 3687 | AlexSkip !AlexInput !Int 3688 | AlexToken !AlexInput !Int a 3689 3690-- alexScan :: AlexInput -> StartCode -> AlexReturn a 3691alexScan input__ (I# (sc)) 3692 = alexScanUser undefined input__ (I# (sc)) 3693 3694alexScanUser user__ input__ (I# (sc)) 3695 = case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of 3696 (AlexNone, input__') -> 3697 case alexGetByte input__ of 3698 Nothing -> 3699 3700 3701 3702 AlexEOF 3703 Just _ -> 3704 3705 3706 3707 AlexError input__' 3708 3709 (AlexLastSkip input__'' len, _) -> 3710 3711 3712 3713 AlexSkip input__'' len 3714 3715 (AlexLastAcc k input__''' len, _) -> 3716 3717 3718 3719 AlexToken input__''' len (alex_actions ! k) 3720 3721 3722-- Push the input through the DFA, remembering the most recent accepting 3723-- state it encountered. 3724 3725alex_scan_tkn user__ orig_input len input__ s last_acc = 3726 input__ `seq` -- strict in the input 3727 let 3728 new_acc = (check_accs (alex_accept `quickIndex` (I# (s)))) 3729 in 3730 new_acc `seq` 3731 case alexGetByte input__ of 3732 Nothing -> (new_acc, input__) 3733 Just (c, new_input) -> 3734 3735 3736 3737 case fromIntegral c of { (I# (ord_c)) -> 3738 let 3739 base = alexIndexInt32OffAddr alex_base s 3740 offset = (base +# ord_c) 3741 check = alexIndexInt16OffAddr alex_check offset 3742 3743 new_s = if GTE(offset,0#) && EQ(check,ord_c) 3744 then alexIndexInt16OffAddr alex_table offset 3745 else alexIndexInt16OffAddr alex_deflt s 3746 in 3747 case new_s of 3748 -1# -> (new_acc, input__) 3749 -- on an error, we want to keep the input *before* the 3750 -- character that failed, not after. 3751 _ -> alex_scan_tkn user__ orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len) 3752 -- note that the length is increased ONLY if this is the 1st byte in a char encoding) 3753 new_input new_s new_acc 3754 } 3755 where 3756 check_accs (AlexAccNone) = last_acc 3757 check_accs (AlexAcc a ) = AlexLastAcc a input__ (I# (len)) 3758 check_accs (AlexAccSkip) = AlexLastSkip input__ (I# (len)) 3759 3760 check_accs (AlexAccPred a predx rest) 3761 | predx user__ orig_input (I# (len)) input__ 3762 = AlexLastAcc a input__ (I# (len)) 3763 | otherwise 3764 = check_accs rest 3765 check_accs (AlexAccSkipPred predx rest) 3766 | predx user__ orig_input (I# (len)) input__ 3767 = AlexLastSkip input__ (I# (len)) 3768 | otherwise 3769 = check_accs rest 3770 3771 3772data AlexLastAcc 3773 = AlexNone 3774 | AlexLastAcc !Int !AlexInput !Int 3775 | AlexLastSkip !AlexInput !Int 3776 3777data AlexAcc user 3778 = AlexAccNone 3779 | AlexAcc Int 3780 | AlexAccSkip 3781 3782 | AlexAccPred Int (AlexAccPred user) (AlexAcc user) 3783 | AlexAccSkipPred (AlexAccPred user) (AlexAcc user) 3784 3785type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool 3786 3787-- ----------------------------------------------------------------------------- 3788-- Predicates on a rule 3789 3790alexAndPred p1 p2 user__ in1 len in2 3791 = p1 user__ in1 len in2 && p2 user__ in1 len in2 3792 3793--alexPrevCharIsPred :: Char -> AlexAccPred _ 3794alexPrevCharIs c _ input__ _ _ = c == alexInputPrevChar input__ 3795 3796alexPrevCharMatches f _ input__ _ _ = f (alexInputPrevChar input__) 3797 3798--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ 3799alexPrevCharIsOneOf arr _ input__ _ _ = arr ! alexInputPrevChar input__ 3800 3801--alexRightContext :: Int -> AlexAccPred _ 3802alexRightContext (I# (sc)) user__ _ _ input__ = 3803 case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of 3804 (AlexNone, _) -> False 3805 _ -> True 3806 -- TODO: there's no need to find the longest 3807 -- match when checking the right context, just 3808 -- the first match will do. 3809 3810