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