{-# OPTIONS -fglasgow-exts -cpp #-}
{-# LINE 1 "Text/Highlighting/Illuminate/CSS.x" #-}

{-# OPTIONS -w  #-} -- Suppress warnings from alex-generated code
module Text.Highlighting.Illuminate.CSS (lexer) where

#if __GLASGOW_HASKELL__ >= 603
#include "ghcconfig.h"
#elif defined(__GLASGOW_HASKELL__)
#include "config.h"
#endif
#if __GLASGOW_HASKELL__ >= 503
import Data.Array
import Data.Char (ord)
import Data.Array.Base (unsafeAt)
#else
import Array
import Char (ord)
#endif
#if __GLASGOW_HASKELL__ >= 503
import GHC.Exts
#else
import GlaExts
#endif
import Text.Highlighting.Illuminate.Types
import Data.Sequence (Seq, (><), (<|), (|>), singleton, viewl, ViewL(..))
import qualified Data.Sequence as Seq (empty)
import qualified Data.Foldable as F
import Data.List (span, break, splitAt, isPrefixOf)
{-# LINE 1 "templates/wrappers.hs" #-}
{-# LINE 1 "templates/wrappers.hs" #-}
{-# LINE 1 "<built-in>" #-}
{-# LINE 1 "<command line>" #-}
{-# LINE 1 "templates/wrappers.hs" #-}
-- -----------------------------------------------------------------------------
-- Alex wrapper code.
--
-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
-- it for any purpose whatsoever.

{-# LINE 18 "templates/wrappers.hs" #-}

-- -----------------------------------------------------------------------------
-- The input type


type AlexInput = (AlexPosn,     -- current position,
                  Char,         -- previous char
                  String)       -- current input string

alexInputPrevChar :: AlexInput -> Char
alexInputPrevChar (p,c,s) = c

alexGetChar :: AlexInput -> Maybe (Char,AlexInput)
alexGetChar (p,c,[]) = Nothing
alexGetChar (p,_,(c:s))  = let p' = alexMove p c in p' `seq`
                                Just (c, (p', c, s))


{-# LINE 51 "templates/wrappers.hs" #-}

-- -----------------------------------------------------------------------------
-- Token positions

-- `Posn' records the location of a token in the input text.  It has three
-- fields: the address (number of chacaters preceding the token), line number
-- and column of a token within the file. `start_pos' gives the position of the
-- start of the file and `eof_pos' a standard encoding for the end of file.
-- `move_pos' calculates the new position after traversing a given character,
-- assuming the usual eight character tab stops.


data AlexPosn = AlexPn !Int !Int !Int
        deriving (Eq,Show)

alexStartPos :: AlexPosn
alexStartPos = AlexPn 0 1 1

alexMove :: AlexPosn -> Char -> AlexPosn
alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (((c+7) `div` 8)*8+1)
alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1)   1
alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)


-- -----------------------------------------------------------------------------
-- Default monad


data AlexState = AlexState {
        alex_pos :: !AlexPosn,  -- position at current input location
        alex_inp :: String,     -- the current input
        alex_chr :: !Char,      -- the character before the input
        alex_scd :: !Int        -- the current startcode

      , alex_ust :: AlexUserState -- AlexUserState will be defined in the user program

    }

-- Compile with -funbox-strict-fields for best results!

runAlex :: String -> Alex a -> Either String a
runAlex input (Alex f) 
   = case f (AlexState {alex_pos = alexStartPos,
                        alex_inp = input,       
                        alex_chr = '\n',

                        alex_ust = alexInitUserState,

                        alex_scd = 0}) of Left msg -> Left msg
                                          Right ( _, a ) -> Right a

newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }

instance Monad Alex where
  m >>= k  = Alex $ \s -> case unAlex m s of 
                                Left msg -> Left msg
                                Right (s',a) -> unAlex (k a) s'
  return a = Alex $ \s -> Right (s,a)

alexGetInput :: Alex AlexInput
alexGetInput
 = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_inp=inp} -> 
        Right (s, (pos,c,inp))

alexSetInput :: AlexInput -> Alex ()
alexSetInput (pos,c,inp)
 = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_inp=inp} of
                  s@(AlexState{}) -> Right (s, ())

alexError :: String -> Alex a
alexError message = Alex $ \s -> Left message

alexGetStartCode :: Alex Int
alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)

alexSetStartCode :: Int -> Alex ()
alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())

alexMonadScan = do
  inp <- alexGetInput
  sc <- alexGetStartCode
  case alexScan inp sc of
    AlexEOF -> alexEOF
    AlexError inp' -> alexError "lexical error"
    AlexSkip  inp' len -> do
        alexSetInput inp'
        alexMonadScan
    AlexToken inp' len action -> do
        alexSetInput inp'
        action inp len

-- -----------------------------------------------------------------------------
-- Useful token actions

type AlexAction result = AlexInput -> Int -> result

-- just ignore this token and scan another one
-- skip :: AlexAction result
skip input len = alexMonadScan

-- ignore this token, but set the start code to a new value
-- begin :: Int -> AlexAction result
begin code input len = do alexSetStartCode code; alexMonadScan

-- perform an action for this token, and set the start code to a new value
-- andBegin :: AlexAction result -> Int -> AlexAction result
(action `andBegin` code) input len = do alexSetStartCode code; action input len

-- token :: (String -> Int -> token) -> AlexAction token
token t input len = return (t input len)



-- -----------------------------------------------------------------------------
-- Monad (with ByteString input)

{-# LINE 251 "templates/wrappers.hs" #-}


-- -----------------------------------------------------------------------------
-- Basic wrapper

{-# LINE 273 "templates/wrappers.hs" #-}


-- -----------------------------------------------------------------------------
-- Basic wrapper, ByteString version

{-# LINE 297 "templates/wrappers.hs" #-}

{-# LINE 322 "templates/wrappers.hs" #-}


-- -----------------------------------------------------------------------------
-- Posn wrapper

-- Adds text positions to the basic model.

{-# LINE 339 "templates/wrappers.hs" #-}


-- -----------------------------------------------------------------------------
-- Posn wrapper, ByteString version

{-# LINE 354 "templates/wrappers.hs" #-}


-- -----------------------------------------------------------------------------
-- GScan wrapper

-- For compatibility with previous versions of Alex, and because we can.

-- -----------------------------------------------------------------------------
-- Custom code for highlighting

alexEOF = return $ singleton (EOF,"")

type AlexUserState = [(Int,TokenType)]  -- a stack of codes and default token types

alexInitUserState = [(0,Plain)]

tok :: TokenType -> AlexInput -> Int -> Alex Tokens
tok t (_,_,s) len = return $ singleton (t, take len s)

getUserState :: Alex AlexUserState
getUserState = Alex $ \s@AlexState{alex_ust=ust} -> Right (s, ust)

setUserState :: AlexUserState -> Alex ()
setUserState newstate = Alex $ \s -> Right (s{alex_ust=newstate}, ())

modifyUserState :: (AlexUserState -> AlexUserState) -> Alex ()
modifyUserState fn = Alex $ \s@AlexState{alex_ust=ust} -> Right (s{alex_ust = fn ust}, ())

plain :: AlexInput -> Int -> Alex Tokens
plain (_,_,s) len = do
  ((_,defaultToken) : _) <- getUserState
  return $ singleton (defaultToken, take len s)

pushContext :: (Int, TokenType) -> b -> Alex b
pushContext newcontext toks = do
  modifyUserState (newcontext :)
  alexSetStartCode $ fst newcontext
  return toks

popContext :: b -> Alex b
popContext toks = do
  contexts <- getUserState
  case contexts of
       []      -> error "Empty contexts stack!"
       [x]     -> return toks
       (x:y:xs) -> do
           setUserState (y:xs)
           alexSetStartCode $ fst y
           return toks

scanForStop :: String -> String -> Int
scanForStop stop ('\n':xs) = 1 +
  let (sps, xs') = span (`elem` " \t") xs
      offset = length sps + length stop
  in  if stop `isPrefixOf` xs'
         then case (takeWhile (`elem` " \t") $ drop (length stop) xs') of
                   ('\n':_)  -> offset
                   []        -> offset
                   _         -> offset + scanForStop stop (drop offset xs')
         else length sps + scanForStop stop xs'
scanForStop stop (_:xs) = 1 + scanForStop stop xs
scanForStop stop [] = 0

hereDoc :: Tokens -> Alex Tokens
hereDoc toks = Alex $ \s ->
  let inp = alex_inp s
      unescape ('\\':x:xs) = x : unescape xs
      unescape (x:xs) = x : unescape xs
      unescape [] = []
      unstring = tail . init . unescape
  in  case viewl toks of
        ((tt,str) :< empty) | tt `elem` [String, VarId] ->
            let stop = if tt == String then unstring str else str
                off = scanForStop stop inp
                (res, newinp) = splitAt off inp
                newpos = foldl alexMove (alex_pos s) res
                s' = s{alex_pos = newpos, alex_inp = newinp, alex_chr = '\n'}
            in  Right (s', toks |> (String, res))
        _                   -> Left "hereDoc expecting String or VarId"

(==>) :: (AlexInput -> Int -> Alex a) -> (a -> Alex b) -> (AlexInput -> Int -> Alex b)
(act1 ==> act2) inp len = do
  res <- act1 inp len
  act2 res

scanner :: Scanner
scanner str = runAlex str $ do
  let loop acc = do toks <- alexMonadScan
                    case viewl toks of
                       ((t,_) :< _) | t == EOF -> return acc
                       _ -> loop (acc >< toks)
  loop Seq.empty

tokenizeWith :: Lexer -> AlexInput -> Int -> Alex Tokens
tokenizeWith lx (_,_,s) len = do
  case (scan lx) (take len s) of
    Left e   -> fail e
    Right r  -> return r

scanWith :: Lexer -> Tokens -> Alex Tokens
scanWith lx toks = Alex $ \s ->
  case (scan lx) (alex_inp s) of
    Left e  -> Left e
    Right r -> Right (s', toks >< r)
      where s' = s{alex_pos = newpos, alex_inp = newinp, alex_chr = lastchar}
            parsed_chars = F.concatMap snd r
            newpos = foldl alexMove (alex_pos s) parsed_chars
            lastchar = if null parsed_chars then '\n' else last parsed_chars
            newinp = drop (length parsed_chars) (alex_inp s)

alex_base :: AlexAddr
alex_base = AlexA# "\xf7\xff\xff\xff\x6a\x00\x00\x00\x80\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\xd3\xff\xff\xff\x00\x00\x00\x00\xc9\xff\xff\xff\xb5\xff\xff\xff\xc1\xff\xff\xff\xb7\xff\xff\xff\xc2\xff\xff\xff\xbb\xff\xff\xff\xb1\xff\xff\xff\xc3\xff\xff\xff\xc4\xff\xff\xff\xb8\xff\xff\xff\x00\x00\x00\x00\xd0\xff\xff\xff\xbf\xff\xff\xff\xcb\xff\xff\xff\xc5\xff\xff\xff\xcc\xff\xff\xff\xc6\xff\xff\xff\xba\xff\xff\xff\xc7\xff\xff\xff\xce\xff\xff\xff\xe2\xff\xff\xff\x00\x00\x00\x00\xb9\x00\x00\x00\xd0\x00\x00\x00\x47\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\xe9\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\xff\xff\xff\xf1\xff\xff\xff\x26\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x00\x00\x00\x43\x00\x00\x00\x40\x00\x00\x00\x3a\x00\x00\x00\x3c\x00\x00\x00\x49\x00\x00\x00\x62\x00\x00\x00\x5e\x00\x00\x00\x52\x00\x00\x00\x5d\x00\x00\x00\x4c\x00\x00\x00\x50\x00\x00\x00\x60\x00\x00\x00\x65\x00\x00\x00\x66\x00\x00\x00\xc7\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x68\x00\x00\x00\x75\x00\x00\x00\x7d\x00\x00\x00\x86\x00\x00\x00\x8f\x00\x00\x00\x87\x00\x00\x00\x82\x00\x00\x00\x88\x00\x00\x00\x8c\x00\x00\x00\x8a\x00\x00\x00\x98\x00\x00\x00\x9e\x00\x00\x00\xab\x00\x00\x00\xa6\x00\x00\x00\xa9\x00\x00\x00\xa0\x00\x00\x00\x9d\x00\x00\x00\xae\x00\x00\x00\xa4\x00\x00\x00\xb0\x00\x00\x00\xb1\x00\x00\x00\xb3\x00\x00\x00\xbd\x00\x00\x00\xb4\x00\x00\x00\xbe\x00\x00\x00\xc4\x00\x00\x00\xb2\x00\x00\x00\xb5\x00\x00\x00\xc8\x00\x00\x00\xc6\x00\x00\x00\xbb\x00\x00\x00\xcc\x00\x00\x00\xcb\x00\x00\x00\xcf\x00\x00\x00\xd5\x00\x00\x00\xdb\x00\x00\x00\xcd\x00\x00\x00\xd2\x00\x00\x00\xdd\x00\x00\x00\xd4\x00\x00\x00\xd7\x00\x00\x00\xe7\x00\x00\x00\xe6\x00\x00\x00\xe1\x00\x00\x00\xde\x00\x00\x00\xe8\x00\x00\x00\xd8\x00\x00\x00\xe2\x00\x00\x00\xeb\x00\x00\x00\xe3\x00\x00\x00\xe4\x00\x00\x00\xea\x00\x00\x00\xee\x00\x00\x00\xe5\x00\x00\x00\xe9\x00\x00\x00\xec\x00\x00\x00\xed\x00\x00\x00\xef\x00\x00\x00\xf0\x00\x00\x00\xf1\x00\x00\x00\xf2\x00\x00\x00\xf3\x00\x00\x00\xf4\x00\x00\x00\xf7\x00\x00\x00\xf5\x00\x00\x00\xf6\x00\x00\x00\xf8\x00\x00\x00\xf9\x00\x00\x00\xfd\x00\x00\x00\xfa\x00\x00\x00\x00\x01\x00\x00\xfe\x00\x00\x00\xff\x00\x00\x00\x02\x01\x00\x00\x03\x01\x00\x00\x07\x01\x00\x00\x08\x01\x00\x00\x04\x01\x00\x00\x0c\x01\x00\x00\x09\x01\x00\x00\x0e\x01\x00\x00\x0d\x01\x00\x00\x0b\x01\x00\x00\x0a\x01\x00\x00\xdf\x00\x00\x00\x0f\x01\x00\x00\x01\x01\x00\x00\x10\x01\x00\x00\x11\x01\x00\x00\x14\x01\x00\x00\x1c\x01\x00\x00\x12\x01\x00\x00\x13\x01\x00\x00\x16\x01\x00\x00\x20\x01\x00\x00\x15\x01\x00\x00\x17\x01\x00\x00\x1b\x01\x00\x00\x23\x01\x00\x00\x22\x01\x00\x00\x29\x01\x00\x00\x1a\x01\x00\x00\x27\x01\x00\x00\x28\x01\x00\x00\x2e\x01\x00\x00\x1f\x01\x00\x00\x2c\x01\x00\x00\x2d\x01\x00\x00\x31\x01\x00\x00\x24\x01\x00\x00\x2f\x01\x00\x00\x30\x01\x00\x00\x36\x01\x00\x00\x2a\x01\x00\x00\x33\x01\x00\x00\x34\x01\x00\x00\x38\x01\x00\x00\x2b\x01\x00\x00\x39\x01\x00\x00\x32\x01\x00\x00\x35\x01\x00\x00\x3a\x01\x00\x00\x3f\x01\x00\x00\x3c\x01\x00\x00\x3b\x01\x00\x00\x40\x01\x00\x00\x3e\x01\x00\x00\x37\x01\x00\x00\x75\x01\x00\x00\x3d\x01\x00\x00\x41\x01\x00\x00\x44\x01\x00\x00\x4c\x01\x00\x00\x4d\x01\x00\x00\xfb\x00\x00\x00\x43\x01\x00\x00\x47\x01\x00\x00\x4e\x01\x00\x00\x49\x01\x00\x00\x4b\x01\x00\x00\x45\x01\x00\x00\x56\x01\x00\x00\x50\x01\x00\x00\x51\x01\x00\x00\x52\x01\x00\x00\x53\x01\x00\x00\x5a\x01\x00\x00\x4f\x01\x00\x00\x76\x01\x00\x00\x59\x01\x00\x00\x58\x01\x00\x00\x61\x01\x00\x00\x57\x01\x00\x00\x63\x01\x00\x00\x46\x01\x00\x00\x65\x01\x00\x00\x5e\x01\x00\x00\x5b\x01\x00\x00\x68\x01\x00\x00\x5d\x01\x00\x00\x69\x01\x00\x00\x5f\x01\x00\x00\x6c\x01\x00\x00\x73\x01\x00\x00\x70\x01\x00\x00\x64\x01\x00\x00\x6d\x01\x00\x00\x67\x01\x00\x00\x72\x01\x00\x00\x74\x01\x00\x00\x6e\x01\x00\x00\x6a\x01\x00\x00\x7a\x01\x00\x00\x6f\x01\x00\x00\x71\x01\x00\x00\x77\x01\x00\x00\x78\x01\x00\x00\x79\x01\x00\x00\x7e\x01\x00\x00\x81\x01\x00\x00\x7b\x01\x00\x00\x7c\x01\x00\x00\x7f\x01\x00\x00\x82\x01\x00\x00\x6b\x01\x00\x00\x85\x01\x00\x00\x86\x01\x00\x00\x7d\x01\x00\x00\x87\x01\x00\x00\x83\x01\x00\x00\xe0\x00\x00\x00\x89\x01\x00\x00\x84\x01\x00\x00\x8c\x01\x00\x00\x88\x01\x00\x00\x8b\x01\x00\x00\x8a\x01\x00\x00\x8d\x01\x00\x00\x8e\x01\x00\x00\xb9\x01\x00\x00\x8f\x01\x00\x00\x96\x01\x00\x00\x90\x01\x00\x00\x91\x01\x00\x00\x92\x01\x00\x00\x93\x01\x00\x00\x94\x01\x00\x00\x9d\x01\x00\x00\x95\x01\x00\x00\x98\x01\x00\x00\x97\x01\x00\x00\x9a\x01\x00\x00\xa3\x01\x00\x00\x80\x01\x00\x00\x9f\x01\x00\x00\x9e\x01\x00\x00\x99\x01\x00\x00\xa5\x01\x00\x00\x9b\x01\x00\x00\xa7\x01\x00\x00\xae\x01\x00\x00\xaf\x01\x00\x00\xaa\x01\x00\x00\xa1\x01\x00\x00\xa4\x01\x00\x00\xa6\x01\x00\x00\xa9\x01\x00\x00\xb3\x01\x00\x00\xa8\x01\x00\x00\xba\x01\x00\x00\xb6\x01\x00\x00\xb4\x01\x00\x00\xbc\x01\x00\x00\xbe\x01\x00\x00\xb1\x01\x00\x00\xbb\x01\x00\x00\xc4\x01\x00\x00\xb8\x01\x00\x00\xb5\x01\x00\x00\xc2\x01\x00\x00\xbf\x01\x00\x00\xc3\x01\x00\x00\xc5\x01\x00\x00\xb7\x01\x00\x00\xc7\x01\x00\x00\xc6\x01\x00\x00\xc9\x01\x00\x00\xca\x01\x00\x00\xbd\x01\x00\x00\xce\x01\x00\x00\xc8\x01\x00\x00\xc0\x01\x00\x00\xc1\x01\x00\x00\xd1\x01\x00\x00\xcb\x01\x00\x00\x0b\x02\x00\x00\xcc\x01\x00\x00\xd0\x01\x00\x00\xd8\x01\x00\x00\xd7\x01\x00\x00\xd2\x01\x00\x00\xd3\x01\x00\x00\xdb\x01\x00\x00\xd5\x01\x00\x00\xd9\x01\x00\x00\x17\x02\x00\x00\xdd\x01\x00\x00\xe1\x01\x00\x00\xde\x01\x00\x00\xe2\x01\x00\x00\xe3\x01\x00\x00\xd6\x01\x00\x00\xda\x01\x00\x00\x1f\x02\x00\x00\xdc\x01\x00\x00\xdf\x01\x00\x00\xd4\x01\x00\x00\xe4\x01\x00\x00\xec\x01\x00\x00\xe9\x01\x00\x00\xe7\x01\x00\x00\xf4\x01\x00\x00\xef\x01\x00\x00\xf2\x01\x00\x00\xeb\x01\x00\x00\xe5\x01\x00\x00\xf3\x01\x00\x00\xea\x01\x00\x00\xf6\x01\x00\x00\xf1\x01\x00\x00\xed\x01\x00\x00\xe8\x01\x00\x00\xf5\x01\x00\x00\xfd\x01\x00\x00\x02\x02\x00\x00\xf7\x01\x00\x00\xff\x01\x00\x00\xfb\x01\x00\x00\xf9\x01\x00\x00\x06\x02\x00\x00\xfe\x01\x00\x00\xfc\x01\x00\x00\x05\x02\x00\x00\x09\x02\x00\x00\x0c\x02\x00\x00\x01\x02\x00\x00\x04\x02\x00\x00\x03\x02\x00\x00\x07\x02\x00\x00\x0a\x02\x00\x00\x0f\x02\x00\x00\x11\x02\x00\x00\x18\x02\x00\x00\x0d\x02\x00\x00\x1a\x02\x00\x00\x0e\x02\x00\x00\x44\x02\x00\x00\x13\x02\x00\x00\x1d\x02\x00\x00\x1e\x02\x00\x00\x12\x02\x00\x00\x21\x02\x00\x00\x14\x02\x00\x00\x50\x02\x00\x00\x22\x02\x00\x00\x24\x02\x00\x00\x23\x02\x00\x00\x20\x02\x00\x00\x26\x02\x00\x00\x1b\x02\x00\x00\x27\x02\x00\x00\x2d\x02\x00\x00\x28\x02\x00\x00\x2a\x02\x00\x00\x25\x02\x00\x00\x5e\x02\x00\x00\x2c\x02\x00\x00\x30\x02\x00\x00\x2e\x02\x00\x00\x2f\x02\x00\x00\x32\x02\x00\x00\x29\x02\x00\x00\x35\x02\x00\x00\x34\x02\x00\x00\x2b\x02\x00\x00\x33\x02\x00\x00\x36\x02\x00\x00\x31\x02\x00\x00\x38\x02\x00\x00\x41\x02\x00\x00\x37\x02\x00\x00\x3a\x02\x00\x00\x3b\x02\x00\x00\x3d\x02\x00\x00\x3e\x02\x00\x00\x3c\x02\x00\x00\x3f\x02\x00\x00\x43\x02\x00\x00\x42\x02\x00\x00\x46\x02\x00\x00\x45\x02\x00\x00\x47\x02\x00\x00\x48\x02\x00\x00\x49\x02\x00\x00\x4b\x02\x00\x00\x4e\x02\x00\x00\x4c\x02\x00\x00\x4a\x02\x00\x00\x4d\x02\x00\x00\x53\x02\x00\x00\x58\x02\x00\x00\x51\x02\x00\x00\x52\x02\x00\x00\x54\x02\x00\x00\x4f\x02\x00\x00\x39\x02\x00\x00\x63\x02\x00\x00\x61\x02\x00\x00\x5b\x02\x00\x00\x5d\x02\x00\x00\x59\x02\x00\x00\x62\x02\x00\x00\x68\x02\x00\x00\x5c\x02\x00\x00\x60\x02\x00\x00\x64\x02\x00\x00\x67\x02\x00\x00\x69\x02\x00\x00\x5f\x02\x00\x00\x66\x02\x00\x00\x65\x02\x00\x00\x6a\x02\x00\x00\x6c\x02\x00\x00\x6b\x02\x00\x00\x72\x02\x00\x00\x77\x02\x00\x00\x6d\x02\x00\x00\x7a\x02\x00\x00\x7e\x02\x00\x00\x70\x02\x00\x00\x7f\x02\x00\x00\x82\x02\x00\x00\x7b\x02\x00\x00\xb8\x02\x00\x00\x86\x02\x00\x00\x83\x02\x00\x00\x76\x02\x00\x00\x87\x02\x00\x00\x79\x02\x00\x00\x88\x02\x00\x00\x8a\x02\x00\x00\x84\x02\x00\x00\x7c\x02\x00\x00\x8c\x02\x00\x00\x89\x02\x00\x00\x81\x02\x00\x00\x8d\x02\x00\x00\x8e\x02\x00\x00\x90\x02\x00\x00\x85\x02\x00\x00\x94\x02\x00\x00\x99\x02\x00\x00\x96\x02\x00\x00\x8b\x02\x00\x00\x98\x02\x00\x00\x8f\x02\x00\x00\x9b\x02\x00\x00\x9c\x02\x00\x00\x95\x02\x00\x00\x91\x02\x00\x00\xa0\x02\x00\x00\x92\x02\x00\x00\xa4\x02\x00\x00\xa1\x02\x00\x00\x9a\x02\x00\x00\x9d\x02\x00\x00\x9f\x02\x00\x00\xa3\x02\x00\x00\xa6\x02\x00\x00\xa7\x02\x00\x00\x97\x02\x00\x00\xe1\x02\x00\x00\xab\x02\x00\x00\x9e\x02\x00\x00\xa2\x02\x00\x00\xa8\x02\x00\x00\xa9\x02\x00\x00\xae\x02\x00\x00\xa5\x02\x00\x00\xad\x02\x00\x00\xaa\x02\x00\x00\xb0\x02\x00\x00\xac\x02\x00\x00\xaf\x02\x00\x00\xb1\x02\x00\x00\xb2\x02\x00\x00\xb3\x02\x00\x00\xb5\x02\x00\x00\xb6\x02\x00\x00\xb7\x02\x00\x00\xbc\x02\x00\x00\xb4\x02\x00\x00\xba\x02\x00\x00\xbd\x02\x00\x00\xb9\x02\x00\x00\xbb\x02\x00\x00\xc2\x02\x00\x00\xbe\x02\x00\x00\xc4\x02\x00\x00\xbf\x02\x00\x00\xc0\x02\x00\x00\xc6\x02\x00\x00\xce\x02\x00\x00\xc5\x02\x00\x00\xcd\x02\x00\x00\xcc\x02\x00\x00\xc3\x02\x00\x00\xd2\x02\x00\x00\xd5\x02\x00\x00\xca\x02\x00\x00\xc9\x02\x00\x00\xd3\x02\x00\x00\xda\x02\x00\x00\xcf\x02\x00\x00\xd6\x02\x00\x00\xd7\x02\x00\x00\xd0\x02\x00\x00\xd4\x02\x00\x00\xe3\x02\x00\x00\xd8\x02\x00\x00\xd9\x02\x00\x00\xe6\x02\x00\x00\xdb\x02\x00\x00\xdf\x02\x00\x00\xdc\x02\x00\x00\xe2\x02\x00\x00\xe7\x02\x00\x00\xe5\x02\x00\x00\x17\x03\x00\x00\xe0\x02\x00\x00\xe8\x02\x00\x00\xdd\x02\x00\x00\xee\x02\x00\x00\xe4\x02\x00\x00\xef\x02\x00\x00\xe9\x02\x00\x00\xea\x02\x00\x00\xf4\x02\x00\x00\xf5\x02\x00\x00\xec\x02\x00\x00\xf6\x02\x00\x00\x2d\x03\x00\x00\xf2\x02\x00\x00\xfe\x02\x00\x00\xeb\x02\x00\x00\xf1\x02\x00\x00\xed\x02\x00\x00\xf3\x02\x00\x00\xf0\x02\x00\x00\xf7\x02\x00\x00\x34\x03\x00\x00\x05\x03\x00\x00\xf9\x02\x00\x00\x01\x03\x00\x00\x06\x03\x00\x00\x02\x03\x00\x00\x07\x03\x00\x00\x0c\x03\x00\x00\x03\x03\x00\x00\xff\x02\x00\x00\x12\x03\x00\x00\x00\x03\x00\x00\x0d\x03\x00\x00\x08\x03\x00\x00\x0e\x03\x00\x00\x0f\x03\x00\x00\x11\x03\x00\x00\x15\x03\x00\x00\x10\x03\x00\x00\x0b\x03\x00\x00\x13\x03\x00\x00\x1f\x03\x00\x00\x1d\x03\x00\x00\x14\x03\x00\x00\x16\x03\x00\x00\x18\x03\x00\x00\x21\x03\x00\x00\x19\x03\x00\x00\x1b\x03\x00\x00\x1e\x03\x00\x00\x1a\x03\x00\x00\x20\x03\x00\x00\x22\x03\x00\x00\x1c\x03\x00\x00\x23\x03\x00\x00\x27\x03\x00\x00\x25\x03\x00\x00\x24\x03\x00\x00\x30\x03\x00\x00\x26\x03\x00\x00\x58\x03\x00\x00\x33\x03\x00\x00\x2e\x03\x00\x00\x32\x03\x00\x00\x2f\x03\x00\x00\x35\x03\x00\x00\x29\x03\x00\x00\x28\x03\x00\x00\x36\x03\x00\x00\x3a\x03\x00\x00\x38\x03\x00\x00\x37\x03\x00\x00\x59\x03\x00\x00\x3f\x03\x00\x00\x39\x03\x00\x00\x3d\x03\x00\x00\x3b\x03\x00\x00\x3c\x03\x00\x00\x3e\x03\x00\x00\x40\x03\x00\x00\x45\x03\x00\x00\x42\x03\x00\x00\x41\x03\x00\x00\x43\x03\x00\x00\x44\x03\x00\x00\x46\x03\x00\x00\x47\x03\x00\x00\x4b\x03\x00\x00\x4a\x03\x00\x00\x74\x03\x00\x00\x4c\x03\x00\x00\x53\x03\x00\x00\x48\x03\x00\x00\x4d\x03\x00\x00\x4e\x03\x00\x00\x49\x03\x00\x00\x4f\x03\x00\x00\x50\x03\x00\x00\x52\x03\x00\x00\x5d\x03\x00\x00\x55\x03\x00\x00\x54\x03\x00\x00\x56\x03\x00\x00\x7b\x03\x00\x00\x57\x03\x00\x00\x51\x03\x00\x00\x5b\x03\x00\x00\x60\x03\x00\x00\x62\x03\x00\x00\x5c\x03\x00\x00\x5a\x03\x00\x00\x5e\x03\x00\x00\x5f\x03\x00\x00\x63\x03\x00\x00\x61\x03\x00\x00\x69\x03\x00\x00\x8c\x03\x00\x00\x64\x03\x00\x00\x66\x03\x00\x00\x6e\x03\x00\x00\x6d\x03\x00\x00\x68\x03\x00\x00\x6a\x03\x00\x00\x72\x03\x00\x00\xa7\x03\x00\x00\x71\x03\x00\x00\x6f\x03\x00\x00\x77\x03\x00\x00\x79\x03\x00\x00\x67\x03\x00\x00\xd7\x03\x00\x00\x00\x00\x00\x00\xdc\x03\x00\x00\xc0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x03\x00\x00\xf4\x03\x00\x00\xa6\x03\x00\x00\xa0\x03\x00\x00\x94\x03\x00\x00\x9a\x03\x00\x00\xf9\x03\x00\x00\x11\x04\x00\x00\x16\x04\x00\x00\x1e\x04\x00\x00\x00\x00\x00\x00\xcb\x03\x00\x00\xd2\x03\x00\x00\xec\x03\x00\x00\x44\x04\x00\x00\x8f\x04\x00\x00\xda\x04\x00\x00\x25\x05\x00\x00\x70\x05\x00\x00\xc1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#

alex_table :: AlexAddr
alex_table = AlexA# "\x00\x00\x42\x03\x04\x00\x06\x00\x07\x00\x08\x00\x09\x00\x07\x00\x0b\x00\x0c\x00\x11\x00\x07\x00\x0d\x00\x0f\x00\x12\x00\x13\x00\x18\x00\x12\x00\x17\x00\x16\x00\x14\x00\x12\x00\xaa\x00\xcc\x00\x40\x03\x40\x03\x3a\x03\xec\x00\x40\x03\x40\x03\xf1\x00\x40\x03\x40\x03\x40\x03\x40\x03\x40\x03\x40\x03\x39\x03\x35\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x40\x03\x40\x03\x32\x03\x40\x03\x40\x03\x40\x03\x1a\x00\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x40\x03\xf6\x00\x40\x03\x40\x03\x3c\x03\xfb\x00\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3c\x03\x3f\x03\x40\x03\x42\x03\x40\x03\x1c\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x50\x01\x80\x01\x89\x01\xc4\x01\xd8\x01\x12\x02\x2b\x02\x3b\x02\x52\x02\x42\x03\x27\x03\x27\x03\x1e\x00\x5f\x02\x27\x03\x27\x03\x87\x02\x27\x03\x27\x03\x27\x03\x27\x03\x27\x03\x27\x03\x27\x03\x26\x03\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x27\x03\x27\x03\x27\x03\x27\x03\x27\x03\x27\x03\x05\x00\x9c\x00\x9d\x00\x9e\x00\x1b\x00\x9f\x00\xa0\x00\x21\x00\x19\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\xa4\x00\xa6\x00\xa7\x00\x15\x00\xa3\x00\x10\x00\xa2\x00\xa5\x00\x27\x03\x0e\x00\x27\x03\x27\x03\xae\x00\x22\x00\x9b\x00\xa1\x00\x27\x01\x5d\x01\x69\x01\x7a\x01\xc8\x00\xa1\x01\xa9\x00\x0a\x00\xa8\x00\xa6\x01\xd3\x01\xaf\x00\x07\x02\x25\x02\x73\x02\x78\x02\x81\x02\xa8\x02\xd7\x02\xe2\x02\x04\x03\xac\x00\xad\x00\x1d\x03\xb0\x00\x27\x03\x28\x03\x27\x03\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\xb1\x00\xb2\x00\xb3\x00\x23\x00\xb5\x00\xb6\x00\xb7\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x24\x00\xb9\x00\xba\x00\xbb\x00\x25\x00\xbd\x00\xbe\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\xbf\x00\xc0\x00\xc1\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\xc2\x00\x26\x00\xc4\x00\xc6\x00\xc5\x00\xc7\x00\x27\x00\xc9\x00\xab\x00\x24\x01\xb4\x00\xcb\x00\xca\x00\x28\x00\xe4\x00\xcd\x00\xb8\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\xbc\x00\xe9\x00\xc3\x00\xce\x00\xcf\x00\xd1\x00\xd2\x00\xe0\x00\xd5\x00\xde\x00\xd0\x00\x29\x00\x20\x01\xd4\x00\xd3\x00\x2a\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xdb\x00\xda\x00\xe3\x00\xdd\x00\x2b\x00\x2c\x00\xdc\x00\xdf\x00\xe1\x00\x2d\x00\xe2\x00\x6c\x01\xea\x00\x02\x01\xeb\x00\xed\x00\xe5\x00\x34\x01\x2e\x00\x2f\x00\xe8\x00\xf2\x00\xe6\x00\xef\x00\xe7\x00\xee\x00\xf7\x00\x35\x00\xf0\x00\x30\x00\xf3\x00\x00\x01\x31\x00\xf4\x00\xf5\x00\x10\x01\xfc\x00\x04\x01\x32\x00\xf8\x00\xf9\x00\x14\x01\x08\x01\x33\x00\xfa\x00\xfd\x00\x18\x01\xfe\x00\x03\x01\xff\x00\x34\x00\x01\x01\x0c\x01\x07\x01\x36\x00\x0b\x01\x1c\x01\x05\x01\x37\x00\x09\x01\x0f\x01\x38\x00\x0d\x01\x06\x01\x11\x01\x0a\x01\x12\x01\x13\x01\x39\x00\x0e\x01\x15\x01\x16\x01\x17\x01\x3a\x00\x1a\x01\x19\x01\x3b\x00\x1b\x01\x1d\x01\x1e\x01\x3c\x00\x22\x01\x21\x01\x1f\x01\x23\x01\x28\x01\x3d\x00\x2e\x01\x42\x01\x26\x01\x2d\x01\x25\x01\x3e\x00\x31\x01\x2b\x01\x30\x01\x32\x01\x29\x01\x2c\x01\x36\x01\x2a\x01\x2f\x01\x3f\x00\x33\x01\x48\x01\x4f\x01\x40\x00\x35\x01\x41\x00\x38\x01\x3a\x01\x37\x01\x3b\x01\x39\x01\x42\x00\x3c\x01\x40\x01\x3e\x01\x41\x01\x43\x01\x3d\x01\x45\x01\x43\x00\x44\x01\x3f\x01\x47\x01\x46\x01\x49\x01\x4b\x01\x4a\x01\x4c\x01\x4e\x01\x44\x00\x4d\x01\x46\x00\x54\x01\x45\x00\x51\x01\x55\x01\x52\x01\x56\x01\x53\x01\x47\x00\x57\x01\x66\x01\x59\x01\x58\x01\x5a\x01\x48\x00\x5c\x01\x5e\x01\x5b\x01\x60\x01\x61\x01\x63\x01\x75\x01\x68\x01\x6b\x01\x49\x00\x6d\x01\x5f\x01\x65\x01\x83\x01\x64\x01\x62\x01\x4a\x00\x67\x01\x76\x01\x6a\x01\x71\x01\x6f\x01\x4b\x00\x70\x01\x6e\x01\x4c\x00\x72\x01\x77\x01\x78\x01\x79\x01\x7d\x01\x7b\x01\x81\x01\x73\x01\x7e\x01\x7c\x01\x82\x01\x4d\x00\x7f\x01\x74\x01\x84\x01\x4e\x00\x85\x01\x4f\x00\x51\x00\x86\x01\x87\x01\x8a\x01\x96\x01\x9c\x01\x50\x00\x8b\x01\x8c\x01\x88\x01\x8d\x01\x8e\x01\x91\x01\x8f\x01\x52\x00\x90\x01\x92\x01\x93\x01\x53\x00\x97\x01\x95\x01\x54\x00\x94\x01\x98\x01\x99\x01\x9a\x01\x9b\x01\x9d\x01\x9e\x01\x55\x00\x9f\x01\x56\x00\xa2\x01\xa0\x01\xa8\x01\xa3\x01\xa4\x01\x57\x00\xa5\x01\xa7\x01\x58\x00\xaa\x01\xab\x01\xb4\x01\xad\x01\xb0\x01\xb1\x01\xb2\x01\xa9\x01\xac\x01\xb6\x01\xae\x01\xaf\x01\xb3\x01\x59\x00\xb5\x01\xb7\x01\xb8\x01\xb9\x01\xba\x01\xbd\x01\xbb\x01\x5a\x00\xbc\x01\xbf\x01\xc2\x01\xbe\x01\xc0\x01\xc3\x01\x5b\x00\xc5\x01\xc1\x01\xc6\x01\xc7\x01\xc8\x01\x5c\x00\xcb\x01\xc9\x01\xca\x01\x5d\x00\xcc\x01\xd0\x01\xcd\x01\xce\x01\xcf\x01\xd1\x01\x5e\x00\xd4\x01\xd7\x01\xd2\x01\xd6\x01\x5f\x00\xdf\x01\xd5\x01\xe7\x01\xfb\x01\x60\x00\xda\x01\xdc\x01\xf0\x01\xdd\x01\xea\x01\xe4\x01\xe0\x01\xde\x01\x61\x00\xe5\x01\xe1\x01\xdb\x01\xe3\x01\xd9\x01\xe2\x01\x62\x00\xf1\x01\xe6\x01\xe8\x01\xe9\x01\x63\x00\xeb\x01\xec\x01\xed\x01\xee\x01\xef\x01\xf5\x01\x64\x00\xf3\x01\xf2\x01\xfd\x01\xf4\x01\x65\x00\xf6\x01\x66\x00\xf8\x01\xf9\x01\x67\x00\xfc\x01\xfe\x01\xff\x01\x01\x02\x00\x02\x05\x02\xf7\x01\x02\x02\x69\x00\xfa\x01\x68\x00\x04\x02\x06\x02\x0a\x02\x09\x02\x0b\x02\x03\x02\x6b\x00\x0c\x02\x13\x02\x10\x02\x08\x02\x0f\x02\x11\x02\x0d\x02\x1f\x02\x6a\x00\x1d\x02\x0e\x02\x6f\x00\x14\x02\x15\x02\x6d\x00\x16\x02\x1c\x02\x17\x02\x1a\x02\x22\x02\x6c\x00\x1b\x02\x6e\x00\x18\x02\x20\x02\x24\x02\x28\x02\x23\x02\x1e\x02\x19\x02\x21\x02\x26\x02\x27\x02\x29\x02\x2a\x02\x3a\x02\x70\x00\x32\x02\x2d\x02\x5c\x02\x2f\x02\x30\x02\x64\x02\x71\x00\x31\x02\x6d\x02\x72\x00\x37\x02\x33\x02\x50\x02\x38\x02\x73\x00\x34\x02\x2e\x02\x36\x02\x2c\x02\x39\x02\x35\x02\x75\x00\x3c\x02\x74\x00\x3d\x02\x3f\x02\x3e\x02\x41\x02\x40\x02\x42\x02\x46\x02\x43\x02\x44\x02\x76\x00\x45\x02\x47\x02\x4a\x02\x4b\x02\x48\x02\x77\x00\x4f\x02\x49\x02\x4d\x02\x78\x00\x4e\x02\x4c\x02\x51\x02\x79\x00\x53\x02\x57\x02\x54\x02\x56\x02\x61\x02\x55\x02\x58\x02\x7a\x00\x59\x02\x5b\x02\x5a\x02\x7b\x00\x5d\x02\x5e\x02\x65\x02\x7c\x00\x63\x02\x7d\x00\x60\x02\x62\x02\x67\x02\x68\x02\x66\x02\x6b\x02\x00\x00\x69\x02\x6a\x02\x7e\x00\x6f\x02\x6c\x02\x6e\x02\x71\x02\x77\x02\x72\x02\x7b\x02\x7f\x00\x70\x02\x7a\x02\x79\x02\x75\x02\x7d\x02\x7f\x02\x8a\x02\x83\x00\x74\x02\x76\x02\x7c\x02\x80\x00\x80\x02\x85\x02\x7e\x02\x82\x02\x81\x00\x86\x02\x84\x00\x89\x02\x82\x00\x9d\x02\x84\x02\x88\x02\x8b\x02\x92\x02\xa4\x02\x83\x02\x8c\x02\x8d\x02\x85\x00\x93\x02\x8e\x02\x90\x02\x8f\x02\x91\x02\x95\x02\x86\x00\xa0\x02\x94\x02\x96\x02\x99\x02\x9b\x02\xa2\x02\x9e\x02\x9c\x02\x97\x02\x9f\x02\x98\x02\x9a\x02\x87\x00\xa3\x02\xa1\x02\x88\x00\xa6\x02\xa9\x02\xa5\x02\xaa\x02\xab\x02\xb3\x02\xad\x02\xac\x02\xa7\x02\x89\x00\xae\x02\xaf\x02\xb1\x02\xb6\x02\xb2\x02\xd6\x02\xb0\x02\xb8\x02\xb7\x02\x8a\x00\xb4\x02\xbb\x02\xb9\x02\xb5\x02\xbc\x02\xba\x02\xc4\x02\xbd\x02\x8b\x00\xbf\x02\xbe\x02\xc0\x02\xc1\x02\xc6\x02\xc2\x02\xc3\x02\xc9\x02\xce\x02\xc7\x02\xca\x02\x8c\x00\xc5\x02\xc8\x02\x8d\x00\xcb\x02\xcc\x02\xd0\x02\xcd\x02\xd3\x02\xde\x02\xea\x02\xd1\x02\xda\x02\xd4\x02\xcf\x02\xdd\x02\x90\x00\x8e\x00\xd2\x02\x8f\x00\xd9\x02\xd8\x02\xd5\x02\xdb\x02\xdc\x02\xdf\x02\xe1\x02\xe0\x02\x91\x00\xe8\x02\xe3\x02\xe4\x02\xe5\x02\xe7\x02\xef\x02\xe6\x02\xeb\x02\xfb\x02\xee\x02\xe9\x02\xf7\x02\xec\x02\xed\x02\xf2\x02\x09\x03\xf1\x02\x92\x00\xf3\x02\xf5\x02\xf4\x02\xf9\x02\xfa\x02\xf8\x02\xf0\x02\xfc\x02\x01\x03\xfd\x02\xfe\x02\xff\x02\x95\x00\xf6\x02\x16\x03\x00\x03\x08\x03\x0c\x03\x03\x03\x06\x03\x93\x00\x0f\x03\x0b\x03\x94\x00\x0d\x03\x02\x03\x05\x03\x0e\x03\x96\x00\x07\x03\x10\x03\x0a\x03\x98\x00\x13\x03\x15\x03\x12\x03\x19\x03\x1a\x03\x1b\x03\x97\x00\x14\x03\x1e\x03\x11\x03\x18\x03\x17\x03\x1c\x03\x99\x00\x1f\x03\x21\x03\xff\xff\x20\x03\x22\x03\x9a\x00\x25\x03\x25\x03\x25\x03\x25\x03\x25\x03\x25\x03\x25\x03\x25\x03\x25\x03\x25\x03\x34\x03\x2a\x03\x2c\x03\x2d\x03\x2e\x03\x36\x03\x2b\x03\x2b\x03\x2b\x03\x2b\x03\x2b\x03\x34\x03\xff\xff\x25\x03\x00\x00\x00\x00\x36\x03\x00\x00\x25\x03\x2b\x03\x2b\x03\x2b\x03\x2b\x03\x2b\x03\x31\x03\x31\x03\x31\x03\x31\x03\x31\x03\x2b\x03\x00\x00\x00\x00\x00\x00\x2a\x03\x2c\x03\x2d\x03\x2e\x03\x00\x00\x00\x00\x24\x03\x00\x00\x00\x00\x2b\x03\x00\x00\x24\x03\x00\x00\x00\x00\x31\x03\x31\x03\x31\x03\x31\x03\x31\x03\x31\x03\x33\x03\x33\x03\x33\x03\x33\x03\x33\x03\x00\x00\x29\x03\x00\x00\x33\x03\x33\x03\x33\x03\x33\x03\x33\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x03\x29\x03\x00\x00\x00\x00\x00\x00\x33\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x03\x30\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x00\x00\x00\x00\x00\x00\x00\x00\x38\x03\x00\x00\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x00\x00\x00\x00\x00\x00\x00\x00\x38\x03\x00\x00\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x00\x00\x00\x00\x00\x00\x00\x00\x38\x03\x00\x00\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x38\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x03\x00\x00\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\xff\xff\x00\x00\x00\x00\x00\x00\x3b\x03\x00\x00\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x3b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#

alex_check :: AlexAddr
alex_check = AlexA# "\xff\xff\x0a\x00\x2f\x00\x3a\x00\x4f\x00\x44\x00\x4f\x00\x45\x00\x4d\x00\x58\x00\x3a\x00\x47\x00\x49\x00\x55\x00\x4f\x00\x44\x00\x49\x00\x45\x00\x58\x00\x4d\x00\x4f\x00\x47\x00\x2d\x00\x2d\x00\x21\x00\x22\x00\x23\x00\x2d\x00\x25\x00\x26\x00\x2d\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\x55\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\x2d\x00\x5d\x00\x5e\x00\x5f\x00\x2d\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\x0a\x00\x7e\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\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x0a\x00\x21\x00\x22\x00\x23\x00\x2d\x00\x25\x00\x26\x00\x2d\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\x2a\x00\x7a\x00\x69\x00\x6d\x00\x42\x00\x75\x00\x74\x00\x68\x00\x46\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x6b\x00\x72\x00\x6f\x00\x54\x00\x63\x00\x42\x00\x61\x00\x67\x00\x5b\x00\x46\x00\x5d\x00\x5e\x00\x61\x00\x64\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x6f\x00\x68\x00\x6e\x00\x54\x00\x75\x00\x6c\x00\x6d\x00\x63\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x74\x00\x74\x00\x7a\x00\x68\x00\x7c\x00\x7d\x00\x7e\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x6d\x00\x65\x00\x6e\x00\x74\x00\x6f\x00\x6c\x00\x6f\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\x72\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x6f\x00\x73\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x69\x00\x74\x00\x69\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x6f\x00\x6e\x00\x65\x00\x65\x00\x70\x00\x61\x00\x74\x00\x72\x00\x61\x00\x74\x00\x63\x00\x65\x00\x64\x00\x72\x00\x62\x00\x63\x00\x69\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x70\x00\x6c\x00\x72\x00\x6f\x00\x6c\x00\x61\x00\x70\x00\x72\x00\x73\x00\x74\x00\x6c\x00\x65\x00\x77\x00\x6f\x00\x73\x00\x72\x00\x70\x00\x61\x00\x63\x00\x69\x00\x74\x00\x6e\x00\x68\x00\x6c\x00\x67\x00\x65\x00\x79\x00\x6f\x00\x69\x00\x70\x00\x67\x00\x76\x00\x65\x00\x79\x00\x66\x00\x63\x00\x6f\x00\x61\x00\x74\x00\x6d\x00\x6f\x00\x63\x00\x74\x00\x6c\x00\x74\x00\x6f\x00\x63\x00\x65\x00\x6f\x00\x74\x00\x6f\x00\x73\x00\x72\x00\x6c\x00\x6f\x00\x77\x00\x63\x00\x73\x00\x72\x00\x6f\x00\x6c\x00\x77\x00\x73\x00\x72\x00\x6f\x00\x6f\x00\x77\x00\x6c\x00\x6c\x00\x6f\x00\x72\x00\x74\x00\x73\x00\x6c\x00\x65\x00\x6c\x00\x77\x00\x74\x00\x65\x00\x74\x00\x6c\x00\x65\x00\x74\x00\x79\x00\x69\x00\x79\x00\x64\x00\x74\x00\x68\x00\x79\x00\x69\x00\x64\x00\x74\x00\x68\x00\x64\x00\x69\x00\x68\x00\x74\x00\x69\x00\x64\x00\x68\x00\x64\x00\x69\x00\x74\x00\x74\x00\x61\x00\x68\x00\x2d\x00\x2d\x00\x6f\x00\x6e\x00\x74\x00\x6d\x00\x64\x00\x69\x00\x69\x00\x6c\x00\x70\x00\x6f\x00\x6f\x00\x74\x00\x73\x00\x65\x00\x65\x00\x6d\x00\x75\x00\x72\x00\x69\x00\x70\x00\x6f\x00\x74\x00\x6c\x00\x65\x00\x6e\x00\x72\x00\x6e\x00\x65\x00\x6e\x00\x72\x00\x69\x00\x75\x00\x63\x00\x74\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x65\x00\x72\x00\x6e\x00\x65\x00\x65\x00\x74\x00\x73\x00\x65\x00\x65\x00\x74\x00\x61\x00\x62\x00\x66\x00\x65\x00\x74\x00\x72\x00\x66\x00\x70\x00\x72\x00\x6f\x00\x72\x00\x65\x00\x6f\x00\x69\x00\x73\x00\x65\x00\x63\x00\x69\x00\x2d\x00\x61\x00\x65\x00\x72\x00\x61\x00\x72\x00\x73\x00\x6d\x00\x6f\x00\x74\x00\x6e\x00\x6c\x00\x63\x00\x6c\x00\x6d\x00\x69\x00\x79\x00\x6f\x00\x74\x00\x6e\x00\x70\x00\x65\x00\x6c\x00\x6c\x00\x61\x00\x6c\x00\x66\x00\x74\x00\x6f\x00\x6f\x00\x61\x00\x73\x00\x6e\x00\x79\x00\x69\x00\x74\x00\x6c\x00\x74\x00\x65\x00\x73\x00\x69\x00\x61\x00\x76\x00\x77\x00\x79\x00\x64\x00\x6a\x00\x7a\x00\x75\x00\x73\x00\x65\x00\x74\x00\x74\x00\x72\x00\x74\x00\x63\x00\x68\x00\x61\x00\x6c\x00\x65\x00\x79\x00\x72\x00\x69\x00\x61\x00\x6e\x00\x65\x00\x69\x00\x74\x00\x67\x00\x74\x00\x65\x00\x68\x00\x66\x00\x69\x00\x67\x00\x74\x00\x68\x00\x65\x00\x74\x00\x74\x00\x65\x00\x69\x00\x2d\x00\x61\x00\x63\x00\x69\x00\x74\x00\x72\x00\x65\x00\x73\x00\x70\x00\x6e\x00\x67\x00\x6e\x00\x2d\x00\x68\x00\x65\x00\x69\x00\x73\x00\x67\x00\x74\x00\x68\x00\x2d\x00\x79\x00\x74\x00\x73\x00\x6c\x00\x65\x00\x69\x00\x74\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\x00\x70\x00\x6f\x00\x6e\x00\x69\x00\x74\x00\x74\x00\x69\x00\x6f\x00\x79\x00\x65\x00\x61\x00\x69\x00\x70\x00\x67\x00\x6e\x00\x62\x00\x72\x00\x6b\x00\x69\x00\x70\x00\x6f\x00\x69\x00\x78\x00\x67\x00\x2d\x00\x6c\x00\x6f\x00\x68\x00\x74\x00\x65\x00\x74\x00\x72\x00\x6f\x00\x74\x00\x74\x00\x6d\x00\x2d\x00\x66\x00\x65\x00\x72\x00\x74\x00\x6f\x00\x66\x00\x66\x00\x73\x00\x65\x00\x67\x00\x74\x00\x65\x00\x68\x00\x2d\x00\x69\x00\x73\x00\x68\x00\x74\x00\x69\x00\x64\x00\x68\x00\x6e\x00\x68\x00\x65\x00\x67\x00\x69\x00\x64\x00\x77\x00\x68\x00\x68\x00\x74\x00\x74\x00\x69\x00\x74\x00\x68\x00\x70\x00\x61\x00\x77\x00\x65\x00\x6e\x00\x63\x00\x69\x00\x72\x00\x6c\x00\x6e\x00\x75\x00\x76\x00\x73\x00\x64\x00\x74\x00\x77\x00\x6f\x00\x6c\x00\x65\x00\x6f\x00\x69\x00\x73\x00\x6c\x00\x66\x00\x72\x00\x77\x00\x68\x00\x74\x00\x65\x00\x6f\x00\x64\x00\x6c\x00\x74\x00\x79\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6e\x00\x67\x00\x67\x00\x62\x00\x6f\x00\x69\x00\x69\x00\x67\x00\x6c\x00\x70\x00\x68\x00\x6f\x00\x74\x00\x6c\x00\x6f\x00\x75\x00\x65\x00\x6d\x00\x74\x00\x72\x00\x6f\x00\x74\x00\x66\x00\x74\x00\x65\x00\x62\x00\x74\x00\x72\x00\x61\x00\x65\x00\x2d\x00\x6b\x00\x61\x00\x62\x00\x66\x00\x74\x00\x72\x00\x65\x00\x65\x00\x72\x00\x69\x00\x66\x00\x65\x00\x64\x00\x6f\x00\x73\x00\x65\x00\x69\x00\x6e\x00\x73\x00\x65\x00\x61\x00\x62\x00\x66\x00\x65\x00\x61\x00\x74\x00\x65\x00\x72\x00\x66\x00\x72\x00\x6f\x00\x65\x00\x74\x00\x63\x00\x61\x00\x68\x00\x67\x00\x65\x00\x72\x00\x6e\x00\x2d\x00\x64\x00\x79\x00\x69\x00\xff\xff\x75\x00\x72\x00\x67\x00\x69\x00\x6e\x00\x73\x00\x69\x00\x65\x00\x6f\x00\x68\x00\x6e\x00\x74\x00\x63\x00\x69\x00\x6f\x00\x65\x00\x67\x00\x61\x00\x65\x00\x75\x00\x74\x00\x6e\x00\x73\x00\x68\x00\x65\x00\x73\x00\x69\x00\x73\x00\x61\x00\x6b\x00\x65\x00\x74\x00\x65\x00\x70\x00\x68\x00\x64\x00\x61\x00\x74\x00\x7a\x00\x65\x00\x6e\x00\x72\x00\x70\x00\x75\x00\x65\x00\x6d\x00\x72\x00\x6e\x00\x6c\x00\x2d\x00\x75\x00\x63\x00\x61\x00\x69\x00\x61\x00\x63\x00\x6f\x00\x74\x00\x68\x00\x75\x00\x74\x00\x6e\x00\x74\x00\x72\x00\x65\x00\x65\x00\x61\x00\x72\x00\x62\x00\x6c\x00\x65\x00\x2d\x00\x65\x00\x73\x00\x73\x00\x6c\x00\x61\x00\x6f\x00\x2d\x00\x75\x00\x6f\x00\x79\x00\x6c\x00\x61\x00\x74\x00\x78\x00\x64\x00\x69\x00\x74\x00\x65\x00\x67\x00\x69\x00\x63\x00\x6e\x00\x72\x00\x6f\x00\x61\x00\x74\x00\x64\x00\x69\x00\x6f\x00\x73\x00\x74\x00\x65\x00\x68\x00\x6e\x00\x6e\x00\x6e\x00\x74\x00\x61\x00\x64\x00\x61\x00\x6f\x00\x66\x00\x2d\x00\x2d\x00\x6e\x00\x63\x00\x6f\x00\x72\x00\x65\x00\x70\x00\x77\x00\x73\x00\x6d\x00\x69\x00\x6e\x00\x72\x00\x6f\x00\x64\x00\x62\x00\x64\x00\x69\x00\x69\x00\x61\x00\x65\x00\x72\x00\x74\x00\x63\x00\x69\x00\x69\x00\x61\x00\x2d\x00\x67\x00\x6c\x00\x6f\x00\x6c\x00\x69\x00\x62\x00\x2d\x00\x69\x00\x6e\x00\x69\x00\x69\x00\x6c\x00\x63\x00\x65\x00\x69\x00\x73\x00\x66\x00\x6c\x00\x61\x00\x6d\x00\x69\x00\x65\x00\x74\x00\x2d\x00\x6c\x00\x65\x00\x61\x00\x6d\x00\x69\x00\x79\x00\x64\x00\x70\x00\x79\x00\x63\x00\x75\x00\x68\x00\x69\x00\x65\x00\x74\x00\x6f\x00\x73\x00\x68\x00\x6f\x00\x64\x00\x74\x00\x61\x00\x63\x00\x69\x00\x73\x00\x72\x00\x2d\x00\x77\x00\x70\x00\x73\x00\x6e\x00\x67\x00\x69\x00\x64\x00\x0a\x00\x6e\x00\x65\x00\x78\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2a\x00\x45\x00\x4c\x00\x59\x00\x54\x00\x2f\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2a\x00\x0a\x00\x20\x00\xff\xff\xff\xff\x2f\x00\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\x65\x00\x6c\x00\x79\x00\x74\x00\xff\xff\xff\xff\x3a\x00\xff\xff\xff\xff\x20\x00\xff\xff\x3a\x00\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x3e\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x3e\x00\xff\xff\xff\xff\xff\xff\x20\x00\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\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x53\x00\x2f\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\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x73\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\x73\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\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x0a\x00\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#

alex_deflt :: AlexAddr
alex_deflt = AlexA# "\x41\x03\x41\x03\x41\x03\x41\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x03\x37\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#

alex_accept = listArray (0::Int,834) [[],[],[],[],[(AlexAcc (alex_action_0))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_1))],[(AlexAcc (alex_action_1))],[],[],[(AlexAcc (alex_action_16))],[],[],[],[(AlexAcc (alex_action_16))],[],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[],[],[(AlexAcc (alex_action_16))],[],[],[],[(AlexAcc (alex_action_16))],[],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_5))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAccPred  (alex_action_6) (alexRightContext 803))],[(AlexAcc (alex_action_16))],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_16))],[],[],[],[],[],[],[(AlexAccSkip)],[],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_9))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_15))],[],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAccPred  (alex_action_13) (alexRightContext 829))],[(AlexAccPred  (alex_action_13) (alexRightContext 829)),(AlexAcc (alex_action_16))],[],[(AlexAccSkip)],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_17))]]
{-# LINE 78 "Text/Highlighting/Illuminate/CSS.x" #-}

lexer :: Lexer
lexer = Lexer { name = "CSS"
              , aliases = ["css"]
              , filenames = ["*.css"]
              , scan = scanner }


cbracket,comment,linecomment :: Int
cbracket = 1
comment = 2
linecomment = 3
alex_action_0 =  tok Comment ==> popContext 
alex_action_1 =  tok Alert 
alex_action_2 =  tok Alert 
alex_action_3 =  tok Whitespace ==> popContext 
alex_action_4 =  tok Number 
alex_action_5 =  tok Number 
alex_action_6 =  tok Property 
alex_action_7 =  tok Symbol 
alex_action_8 =  tok CBracket ==> popContext 
alex_action_9 =  tok EOF 
alex_action_10 =  tok Comment ==> pushContext (comment, Comment) 
alex_action_11 =  tok Comment ==> pushContext (linecomment, Comment) 
alex_action_12 =  tok Selector 
alex_action_13 =  tok String 
alex_action_14 =  tok CBracket ==> pushContext (cbracket, Plain) 
alex_action_15 =  tok Symbol 
alex_action_16 =  plain 
alex_action_17 =  tok Whitespace 
{-# LINE 1 "templates/GenericTemplate.hs" #-}
{-# LINE 1 "templates/GenericTemplate.hs" #-}
{-# LINE 1 "<built-in>" #-}
{-# LINE 1 "<command line>" #-}
{-# LINE 1 "templates/GenericTemplate.hs" #-}
-- -----------------------------------------------------------------------------
-- ALEX TEMPLATE
--
-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
-- it for any purpose whatsoever.

-- -----------------------------------------------------------------------------
-- INTERNALS and main scanner engine

{-# LINE 35 "templates/GenericTemplate.hs" #-}

{-# LINE 45 "templates/GenericTemplate.hs" #-}


data AlexAddr = AlexA# Addr#

#if __GLASGOW_HASKELL__ < 503
uncheckedShiftL# = shiftL#
#endif

{-# INLINE alexIndexInt16OffAddr #-}
alexIndexInt16OffAddr (AlexA# arr) off =
#ifdef WORDS_BIGENDIAN
  narrow16Int# i
  where
	i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
	high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
	low  = int2Word# (ord# (indexCharOffAddr# arr off'))
	off' = off *# 2#
#else
  indexInt16OffAddr# arr off
#endif





{-# INLINE alexIndexInt32OffAddr #-}
alexIndexInt32OffAddr (AlexA# arr) off = 
#ifdef WORDS_BIGENDIAN
  narrow32Int# i
  where
   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`
		     (b2 `uncheckedShiftL#` 16#) `or#`
		     (b1 `uncheckedShiftL#` 8#) `or#` b0)
   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))
   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))
   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))
   off' = off *# 4#
#else
  indexInt32OffAddr# arr off
#endif





#if __GLASGOW_HASKELL__ < 503
quickIndex arr i = arr ! i
#else
-- GHC >= 503, unsafeAt is available from Data.Array.Base.
quickIndex = unsafeAt
#endif




-- -----------------------------------------------------------------------------
-- Main lexing routines

data AlexReturn a
  = AlexEOF
  | AlexError  !AlexInput
  | AlexSkip   !AlexInput !Int
  | AlexToken  !AlexInput !Int a

-- alexScan :: AlexInput -> StartCode -> AlexReturn a
alexScan input (I# (sc))
  = alexScanUser undefined input (I# (sc))

alexScanUser user input (I# (sc))
  = case alex_scan_tkn user input 0# input sc AlexNone of
	(AlexNone, input') ->
		case alexGetChar input of
			Nothing -> 



				   AlexEOF
			Just _ ->



				   AlexError input'

	(AlexLastSkip input len, _) ->



		AlexSkip input len

	(AlexLastAcc k input len, _) ->



		AlexToken input len k


-- Push the input through the DFA, remembering the most recent accepting
-- state it encountered.

alex_scan_tkn user orig_input len input s last_acc =
  input `seq` -- strict in the input
  let 
	new_acc = check_accs (alex_accept `quickIndex` (I# (s)))
  in
  new_acc `seq`
  case alexGetChar input of
     Nothing -> (new_acc, input)
     Just (c, new_input) -> 



	let
		base   = alexIndexInt32OffAddr alex_base s
		(I# (ord_c)) = ord c
		offset = (base +# ord_c)
		check  = alexIndexInt16OffAddr alex_check offset
		
		new_s = if (offset >=# 0#) && (check ==# ord_c)
			  then alexIndexInt16OffAddr alex_table offset
			  else alexIndexInt16OffAddr alex_deflt s
	in
	case new_s of 
	    -1# -> (new_acc, input)
		-- on an error, we want to keep the input *before* the
		-- character that failed, not after.
    	    _ -> alex_scan_tkn user orig_input (len +# 1#) 
			new_input new_s new_acc

  where
	check_accs [] = last_acc
	check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))
	check_accs (AlexAccSkip : _)  = AlexLastSkip  input (I# (len))
	check_accs (AlexAccPred a pred : rest)
	   | pred user orig_input (I# (len)) input
	   = AlexLastAcc a input (I# (len))
	check_accs (AlexAccSkipPred pred : rest)
	   | pred user orig_input (I# (len)) input
	   = AlexLastSkip input (I# (len))
	check_accs (_ : rest) = check_accs rest

data AlexLastAcc a
  = AlexNone
  | AlexLastAcc a !AlexInput !Int
  | AlexLastSkip  !AlexInput !Int

data AlexAcc a user
  = AlexAcc a
  | AlexAccSkip
  | AlexAccPred a (AlexAccPred user)
  | AlexAccSkipPred (AlexAccPred user)

type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool

-- -----------------------------------------------------------------------------
-- Predicates on a rule

alexAndPred p1 p2 user in1 len in2
  = p1 user in1 len in2 && p2 user in1 len in2

--alexPrevCharIsPred :: Char -> AlexAccPred _ 
alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input

--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ 
alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input

--alexRightContext :: Int -> AlexAccPred _
alexRightContext (I# (sc)) user _ _ input = 
     case alex_scan_tkn user input 0# input sc AlexNone of
	  (AlexNone, _) -> False
	  _ -> True
	-- TODO: there's no need to find the longest
	-- match when checking the right context, just
	-- the first match will do.

-- used by wrappers
iUnbox (I# (i)) = i